Posts
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
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
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
É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.
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
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.
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 ?
Felipe,
Então sua dúvida é como "Trafegar parametros entre formularios", certo?
Aguardo
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
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 ...
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
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¶m2=2¶3=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 ??
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
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 ?!