Fórum Salvar alterações do GridView #2658

09/02/2009

0

Olá conforme dito, formatei minha maquina e instalei o Visual Studi 2008. Funcionando 100%. Entao, fiz um GriedViwe correto da seguinte forma ...     Public Function Rota(ByVal TipoEmpresa As String, ByVal Mes As String, ByVal Ano As String) As System.Data.DataTable Dim objConexao As System.Data.SqlClient.SqlConnection = Nothing Dim objCommand As System.Data.SqlClient.SqlCommand = Nothing Dim objDtTable As System.Data.DataTable = Nothing Dim objAdapter As System.Data.SqlClient.SqlDataAdapter = Nothing 'Cria Conexao objConexao = New System.Data.SqlClient.SqlConnection(My.Settings.MargemConnectionString) objDtTable = New System.Data.DataTable("") 'Abre Conexao objConexao.Open() 'Comando a ser Executado + a Conexao objCommand = New System.Data.SqlClient.SqlCommand("SELECT * FROM RotaCliente WHERE TipoEmpresa = 'Cadam' AND MesReferencia = '" & Mes & "' AND AnoReferencia = ' " & Ano & " '", objConexao) 'Usando o Adaptador Para o comando objAdapter = New System.Data.SqlClient.SqlDataAdapter(objCommand) 'Preenchenco o DataTable com o Adaptador objAdapter.Fill(objDtTable) 'Fecha Conexao objConexao.Close() Return objDtTable End Function   Aí os dados sao exibidos no Grid normamelte assim: Dim selecionaRota As Margem.AcessoRelacionamentos.Relacinamentos = Nothing selecionaRota = New Margem.AcessoRelacionamentos.Relacinamentos DataGridView1.DataSource = selecionaRota.Rota(cmbTipoEmpresa.Text.ToString, cmbMes.Text.ToString, cmbAno.Text.ToString)   Ok ??? Agora a dúvida ...   Como que eu modifico um valor do grid e depois mando salvar ? qual seria a logica para isso ??
Felipe.

Felipe.

Responder

Posts

09/02/2009

Luiz Maia

Olá Felipe, Agora que você já tem os dados populados na sua GridView, você precisa ter uma coluna com um botão de edição, segue abaixo uma sugestão, repare nas duas ultimas colunas da Grid que possuem imagebuttons, uma para edição e outr para exclusão. <asp:GridView ID="gvDados" runat="server" AutoGenerateColumns="False" DataKeyNames="codfiscal" OnRowDataBound="gvDados_RowDataBound" AllowPaging="True" OnPageIndexChanging="gvDados_PageIndexChanging"> <Columns> <asp:BoundField DataField="numGtd" HeaderText="Número" /> <asp:BoundField DataField="nomDocum" HeaderText="Tipo" /> <asp:TemplateField HeaderText="Alterar" SortExpression="codGtd"> <ItemStyle HorizontalAlign="Center" /> <HeaderStyle HorizontalAlign="Center" Width="1px" /> <ItemTemplate> <asp:ImageButton ID="ibAlterar" runat="server" CausesValidation="False" ImageUrl="~/Images/btn_alterar.gif" OnCommand="Alterar" /> </ItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="Excluir" ShowHeader="False"> <ItemStyle HorizontalAlign="Center" /> <HeaderStyle HorizontalAlign="Center" Width="1px" /> <ItemTemplate> <asp:ImageButton ID="ibExcluir" runat="server" CausesValidation="False" ImageUrl="~/Images/btn_excluir.gif" OnClientClick="javascript:return ConfirmaExclusao('esta GTD');" OnCommand="Excluir" /> </ItemTemplate> </asp:TemplateField> </Columns> <PagerStyle Font-Bold="True" ForeColor="White" /> </asp:GridView>   No evento RowDataBound do GridView, vc coloca os commadsArguments para os itens que deseja editar:   protected void gvDados_RowDataBound(object sender, GridViewRowEventArgs e) { if (e.Row.RowType == DataControlRowType.DataRow) { string codItem = Convert.ToString(DataBinder.Eval(e.Row.DataItem, "codGtd")); ImageButton ibAlterar = e.Row.FindControl("ibAlterar") as ImageButton; ImageButton ibExcluir = e.Row.FindControl("ibExcluir") as ImageButton; ibExcluir.CommandArgument = codItem; ibAlterar.CommandArgument = codItem;} } E aqui você chama o método que precisa: protected void Alterar(object sender, CommandEventArgs e) { int codItem = Convert.ToInt32("0" + e.CommandArgument); EditarItem(codItem); }   Note que o metodo acima é invocado no GridView na coluna Alterar. Agora é só usar um Panel, por exemplo, e mandar as informações que vc deve recuperar na base para os controles dentro dele, já que vc já tem o ID do registro que deseja alterar. Pode usar a própria parte de cadastro.   Caso não entenda algum passo, me avise. Aguardo seu retorno.   Abraços Att Luiz Maia
Responder

Gostei + 0

10/02/2009

Felipe.

Por favor me de a resposta em WINDOWS FORMS Tenho um formulario co um GridView alimentado pelo banco de dados SQL SERVER.   Abaixo tenho um botao, Excluir.   Ai no Evento Click do botao Excluir, preciso receber o Campo (id) da linha selecionada.   O id eh um campo do banco de dados, que também esta sendo exibido no Grid.   Como faço isso ?   Tentei isso mas nao deu ... vID = DataGridView1.Rows(e.RowIndex).Cells("id").value.ToString ta faldno que o e.RowIndex nao eh membro de of System Argnts  
Responder

Gostei + 0

10/02/2009

Luiz Maia

Olá Felipe,   Para Windows Forms, o processo é totalmente diferente, achei que queria para uma Aplicação Web, já que tinha me dito que era um GridView e não um DataFGridView, que são controles diferentes.   Fiz uma pequena aplicação e dei uns prints da mesma, segue abaixo com as devidas explicações:     Veja que criu uma coluna que chama editar, que possui um elemento DataGridViewLinkColmun, do qual eu setei o DataPropertyName com o ID do registro que quero selecionar.       Acima, veja que uso o evento CellContentClick para pegar o valor do ID do qual cliquei na coluna Editar.   Logo abaixo da grid, coloquei uma Label que jogo o valor da coluna/linha que cliquei.   Espero que ajude. Aguardo seu retorno.   Abraços Att Luiz Maia  
Responder

Gostei + 0

10/02/2009

Felipe.

Éntão eh quase Isso....   Na verda preciso passar de um form pro outro como esta na figura abaixo. Pois se clicar em Alterar, aí terei que carregar todos os dados novamente em um novo Form, por isso preciso que o ID seja passada para esse novo Form.   A mesma coisa acontece no caso do Excluir. Olha se vc consegue entender.
Responder

Gostei + 0

10/02/2009

Luiz Maia

Felipe, Então é exatamente o que te expliquei acima, só que no momento que eu jogo o valor para Label, ao inves de jogar para uma Label, vc vai chamar um evento que abri outro Form para a edição, passando como parametro o ID do regitro selecionado.   Caso queira, de uma olhada nesta video-aula, pode te esclarecer bastante coisa   https://www.devmedia.com.br/articles/viewcomp.asp?comp=5140 https://www.devmedia.com.br/articles/viewcomp.asp?comp=5222     Se vc nao tem acesso, por favor me avise que providencio para vc gratuitamente.     Att, Luiz Maia
Responder

Gostei + 0

11/02/2009

Felipe.

Entao se eu colocar o label no mesmo formulario da grid e acionar pelo evento CellClick eu até consegui assim oh.. Private Sub DataGridView1_CellContentClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellContentClick Label4.Text = DataGridView1.Rows(e.RowIndex).Cells("idRota").Value.ToString() End Sub Mas ... eu quero passar  "DataGridView1.Rows(e.RowIndex).Cells("idRota").Value.ToString()" para o forumulario que vai aparecer quando clicar no botao Excluir por exemplo. Dessa forma eu nao consegui.
Responder

Gostei + 0

11/02/2009

Felipe.

Acho que sei pq, olha so ... no evento  CellClick o parametro "e" eh assim ... Private Sub DataGridView1_CellContentClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellContentClick   e no evento click no botao o parametro "e" eh assim Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click Por isso nao consigo acessar o e.RowIndex).Cells("Nome").Value.ToString() no evento click no botao.   Como faça isso ? compreendeu ?
Responder

Gostei + 0

11/02/2009

Luiz Maia

Felipe, Então sua dúvida é como "Trafegar parametros entre formularios", certo? Aguardo Luiz Maia
Responder

Gostei + 0

11/02/2009

Felipe.

correto ...
Responder

Gostei + 0

11/02/2009

Luiz Maia

Felipe,   Por favor me explique o fluxo do processo. Veja se entendi:   Vc popula a grid com os dados da base Vc escolhe um registro para ser excluido (mas como? tem um botao? checkbox? o seleciona a linha?) Caso seja um botao, tem um botao para cada registro? Quando clicar no botao, vc chama outro Form passando o ID do registro clicado? Aguardo Luiz Maia
Responder

Gostei + 0

11/02/2009

Felipe.

  Vc popula a grid com os dados da base SIM Vc escolhe um registro para ser excluido (mas como? tem um botao? checkbox? o seleciona a linha?) eu clico na Linha que quero Alterar/Excluir. Caso seja um botao, tem um botao para cada registro? Nao, o botao fica em baixo do gridview, aí quero que quando eu selecionar um registro do grid, e apertar o botao Excluir, o ID seja passado para o novo form que vai aparecer Quando clicar no botao, vc chama outro Form passando o ID do registro clicado? SIM, chamo outro FORM.  A dúvida eh exatamente essa, receber o ID (nesse novo form'), do grid do form anterior ...   Como demostrei na imagem que te mandei ...
Responder

Gostei + 0

11/02/2009

Luiz Maia

Felipe,   Segue a solução para passagem de parametros:   No form 1:   using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace WindowsApplication1 { public partial class Form1 : Form { public int codId; public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { // TODO: This line of code loads data into the 'dataSet1.SMSE016D' table. You can move, or remove it, as needed. this.sMSE016DTableAdapter.Fill(this.dataSet1.SMSE016D); } private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e) { label1.Text = dataGridView1[0, e.RowIndex].Value.ToString(); codId = Convert.ToInt32(dataGridView1[0, e.RowIndex].Value); } private void button1_Click(object sender, EventArgs e) { Form2 f2 = new Form2(codId); f2.ShowDialog(); }   e no form 2: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace WindowsApplication1 { public partial class Form2 : Form { public Form2(int codID) { InitializeComponent(); label1.Text = codID.ToString(); } } } Abraços Att Luiz Maia
Responder

Gostei + 0

11/02/2009

Felipe.

vc usou uma variavel Global neh ???   Eh a unica forma de passar parametros ?? Pois eu tava pensando que teria alguma forma, de ser parecido como era no ASP. onde vc cloca o url.asp?para=1&param2=2&para3=3 .... e pra receber seria   vParam1 = Request.Form("param1")   Isso era no ASP neh, sei que no VB.NET eh diferente ...  mas com essa lógica acima existe alguma maneira ??  
Responder

Gostei + 0

11/02/2009

Luiz Maia

Felipe,   É impossivel usar via querystring como no ASP 3 e tb no ASPX, pois estamos falando de aplicação windows, se fosse uma aplicação web, teria condições sim.   Outra forma de fazer é vc usar propriedades, ou seja vc tera que criar uma classe e jogar o valor para esta classe usando get e set, assim vc faz a instancia da classe nos Forms e recupera o valor, mas o exemplo que te dei é o mais aconselhavel e usado tb, pois vc tem apenas que passar na chamada do metodo do outro Form que vc deseja usar.   Abraços   Luiz Maia
Responder

Gostei + 0

11/02/2009

Felipe.

Sei que só serveria no ASP.NET, só exemplifiquei pra saber em que ponto quero chegar. Então, quanto a criação da classe e o instaciamento não seria o problema, muito menos na chamada. O problema eh que nao sei como usar essas propriedades... Pode medar um exmplo simples ???   Tipo Assim   FormOrigem: FormOrigem.Set("nomeParametro")=idDoGridView   FormDestino x = FormDestino.Get("nomeParametro")   creio que seja algo parecido com isso neh ??? Pode me ajudar  ?!    
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar