Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

SID_SILVA

DataTable e GridView com Inclusao de Dados

Recommended Posts

Ola Amigos,voltei mas que novidade.

 

Eu preciso exibir dados em um GridView.Inicialmente esses dados que virao de um Textbox e de um DropDownList, serao

inseridos em um DataTable e depois alimentacao o GridView e por fim serao salvos na base de dados, ate ai sem problemas.

 

Numa rotina de alteracao, eu preciso trazer esses dados da base, para exibi-los no Grid, tambem sem problemas.

 

O problema e que quando eu trago os dados na rotina de alteracao, eu posso continuar incluindo novos dados no GridView, para salva-los posteriormente.Acontece que quando eu tenho alguns itens no GridView (Rotina de alteracao) e incluo outros, os itens anteriores sao apagados e fica apenass o novo item incluido.Isso tem a ver com o comando "ADD" que utilizo quando vou incluir uma nova linha no DataTable.

 

Como posso resolver esse assunto?

Preciso trazes os dados da base e exibi-los no GridView e ter a possibilidade de incluir novas linhas, conservando as anteriores, com posterior gravacao dos dados.

 

Obrigado e um Abraco

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom Dia Quntelab, obrigado por sua ajuda novamente.

 

Aqui esta o codigo :

Ficou um pouco grande

 

Aqui crio as rotinas que irao incluir os dados noDataTable

Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click

		ObterBeneficios()
		IncluirBeneficios()
		''mostra no gridview

		GrdBeneficio.DataSource = ObterBeneficios()

		GrdBeneficio.DataBind()
		TxtBeneficioValor.Text = ""
	End Sub

Crio o DataTable

Public Function ObterBeneficios() As DataSet

		'verifica se a cesta de compras esta na sessão

		If Session("Beneficios") Is Nothing Then

			'se nao estiver vamos criar um dataset e um datatable para armazenar os dados digitados

			'cria dataset

			Dim ds As DataSet = New DataSet()

			'define um objeto DataColumn

			Dim keys(1) As DataColumn

			'define o campo que sera a chave primaria 

			Dim ItemID As New DataColumn("ItemID", GetType(Int32))

			'cria o datatable

			Dim dt As DataTable = New DataTable("Beneficios")

			'inclua as colunas no datatable

			dt.Columns.Add(ItemID)

			'outra forma de definir e incluir colunas no datatable

			dt.Columns.Add("BENE_ID", System.Type.GetType("System.Double"), "")
			dt.Columns.Add("BENE_NOME", System.Type.GetType("System.String"), "")
			dt.Columns.Add("REL_VALOR", System.Type.GetType("System.Double"), "")

			'define a chave primária

			keys(0) = ItemID

			dt.PrimaryKey = keys

			'inclui na tabela

			ds.Tables.Add(dt)

			'coloca o dataset na sessão

			Session("Beneficios") = ds

			'retorna o dataset criado

			Return ds

		Else

			'retorna o dataset que esta na sessão

			Return Session("Beneficios")

		End If

	End Function

Incluo os dados no DataTable

Private Sub IncluirBeneficios()

		Dim conexao As SqlConnection

		'define o objeto conexao e obtem a string de conexao do arquivo web.config

		conexao = New SqlConnection(ConfigurationManager.ConnectionStrings("timesheet").ConnectionString)

		Try

			'obtem a tabela do dataset e atribui ao datable local

			Dim dt As DataTable = ObterBeneficios().Tables(0)

			'localiza o codigo do produto na tabela 

			Dim row As DataRow = dt.Rows.Find(Convert.ToDouble(CboBeneficios.SelectedItem.Value))

			If row Is Nothing Then

				'se nao achou cria uma nova linha

				row = dt.NewRow()

				row("itemID") = Convert.ToDouble(CboBeneficios.SelectedItem.Value)
				row("BENE_NOME") = CboBeneficios.SelectedItem.Text.Trim
				row("REL_VALOR") = TxtBeneficioValor.Text

				'inclui a linha no datable
				dt.Rows.Add(row)

			Else

				'se a linha ja existir então apenas altera a quantidade

				'Dim qtd As Integer = Convert.ToInt32(row("Quantidade"))

				'qtd = qtd + quantidade

				'row("Quantidade") = qtd

			End If

		Finally

			conexao.Close()

		End Try
	End Sub

Removo dados do DataTable

Private Sub RemoverBeneficios(ByVal prodID As Integer)

		'obtem o dataset

		Dim ds As DataSet = ObterBeneficios()

		'localiza o produto

		Dim row As DataRow = ds.Tables(0).Rows.Find(prodID)

		'se a linha nao for nula

		If row IsNot Nothing Then

			'remove a linha

			ds.Tables(0).Rows.Remove(row)

			'atualiza o dataset

			ds.AcceptChanges()

			'mostra no gridview

			GrdBeneficio.DataSource = ObterBeneficios()

			GrdBeneficio.DataBind()

		End If
		' PEGA O VALOR DE UMA COLKUNA NO GRIDVIEW Dim codigo As String = gdvCategorias.SelectedRow.Cells(1).Text
	End Sub

Protected Sub GrdBeneficio_RowDeleting(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewDeleteEventArgs)
		'chama rotina para remover item do documento
		RemoverBeneficios(Convert.ToInt32(GrdBeneficio.DataKeys(e.RowIndex).Value))
	End Sub

Pego o ID da Tabela Principal para grava-lo na tela de relacionamento

'Determine a query que seleciona o identificador do registro inserido

				cmd = New SqlCommand("SELECT @@IDENTITY", conexao)

				cmd.CommandType = CommandType.Text

				'obtem o codigo do pedido que foi incluido na tabela Pedidos

				IdNewUser = cmd.ExecuteScalar()

Leio todo o DataTable para gravar todas as linhas do GridView na base de dados.

For Each Row In ObterBeneficios.Tables(0).Rows
				Dim cmdItem As SqlCommand

				cmdItem = New SqlCommand("SP_IncluiRelBeneficios", conexao)
				cmdItem.CommandType = CommandType.StoredProcedure

				cmdItem.Parameters.Add("@USER_ID", SqlDbType.Int, 0, "USER_ID").Value = IdNewUser
				cmdItem.Parameters.Add("@BENE_ID", SqlDbType.Int, 0, "BENE_ID").Value = Row("BENE_ID")
				cmdItem.Parameters.Add("@REL_VALOR", SqlDbType.Real, 0, "REL_VALOR").Value = Row("REL_VALOR")
				cmdItem.ExecuteNonQuery()

				Session("Beneficios") = Nothing
			Next

 

Sera que e dificil resolver isso?

 

Obrigado e um Abraço

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pelo que estudei do seu código você insere a nova linha aqui:

 

'se nao achou cria uma nova linha

				row = dt.NewRow()

				row("itemID") = Convert.ToDouble(CboBeneficios.SelectedItem.Value)
				row("BENE_NOME") = CboBeneficios.SelectedItem.Text.Trim
				row("REL_VALOR") = TxtBeneficioValor.Text

				'inclui a linha no datable
				dt.Rows.Add(row)

Neste momento se você olhar seu DataTable ja perder os dados antigos?

 

Abraços...

Compartilhar este post


Link para o post
Compartilhar em outros sites

No método IncluirBeneficios() você não esqueceu de jogar o DataSet de volta para a session?

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.