SID_SILVA 0 Denunciar post Postado Abril 24, 2009 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
quintelab 91 Denunciar post Postado Abril 25, 2009 Poste o código que utilizou para alimentar seu DataTable e para inserir novos itens. Abraços... Compartilhar este post Link para o post Compartilhar em outros sites
SID_SILVA 0 Denunciar post Postado Abril 27, 2009 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
quintelab 91 Denunciar post Postado Abril 27, 2009 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
Oenning 0 Denunciar post Postado Abril 28, 2009 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
SID_SILVA 0 Denunciar post Postado Abril 28, 2009 Obrigado por sua ajuda amigos quintelab e Oenning. Eu irei verificar. Obrigado e um Abraco Compartilhar este post Link para o post Compartilhar em outros sites