Usuário com melhor resposta
Dados GridView no textBox

Pergunta
-
Sempre trabalhei com programação c# desktop, e agora estou tentando aprender um pouco de asp.net.
Ao carregar o grid do banco de dados, como posso popular os textbox, quando selecionar uma linha no grid?
Para faze isso em Desktop eu usava o cellEnter do datagridview, mas em asp, não tem
Meu Código
public class Classes { public int id { get; set; } public String Nome { get; set; } public String Idade { get; set; } } public class Conecta { //cria a conexão com o banco de dados //Não esquecer de colocar public na frente do OleDbConnection public OleDbConnection cn = new OleDbConnection(); public string status = ""; //Abrir conexão public void conectar() { try { string provedor = "Provider=Microsoft.ACE.OLEDB.12.0"; // string banco = @"Data Source=C:\Users\Engenharia\Desktop\Banco.accdb"; string banco = @"Data Source=C:\Users\Gelson\Desktop\Banco.accdb"; cn.ConnectionString = provedor + ";" + banco; cn.Open(); status = "Conexão aberta"; } catch (Exception ex) { throw ex; } } //Fechar conexão public void desconectar() { cn.Close(); status = "Conexão fechada"; } } //Listar Dados no DataGridView public IList<Classes> Listar() { IList<Classes> lista = new List<Classes>(); string query = ""; c.conectar(); query += " SELECT id,nome,idade FROM "; query += " teste ORDER BY id"; OleDbCommand cd = new OleDbCommand(); cd.Connection = c.cn; cd.CommandText = query; OleDbDataReader dr = cd.ExecuteReader(); try { while (dr.Read()) { string strId = dr["id"].ToString(); string strNome = dr["nome"].ToString(); string strIdade = dr["idade"].ToString(); Classes obj = new Classes(); obj.id = Convert.ToInt32(strId); obj.Nome = strNome; obj.Idade = strIdade; lista.Add(obj); } } catch (Exception ex) { throw ex; } finally { if (c.cn.State == ConnectionState.Open) c.desconectar(); } return lista; }//fim
- Editado gelson_ventura quarta-feira, 15 de abril de 2015 23:18
Respostas
-
Uma das soluções que pode resolver seu problema é ativar a propriedade no seu grid AutoGenerateSelectButton deixar true, e no evento SelectedIndexChanged você captura a linha selecionada e assim preenche os seus TextBox.
Uma imagem vale mais do que mil palavras, mas ocupa 3 mil vezes mais espaço em disco
- Sugerido como Resposta Eduardo.RomeroModerator sexta-feira, 17 de abril de 2015 13:35
- Marcado como Resposta Eduardo.RomeroModerator sexta-feira, 17 de abril de 2015 13:35
Todas as Respostas
-
Uma das soluções que pode resolver seu problema é ativar a propriedade no seu grid AutoGenerateSelectButton deixar true, e no evento SelectedIndexChanged você captura a linha selecionada e assim preenche os seus TextBox.
Uma imagem vale mais do que mil palavras, mas ocupa 3 mil vezes mais espaço em disco
- Sugerido como Resposta Eduardo.RomeroModerator sexta-feira, 17 de abril de 2015 13:35
- Marcado como Resposta Eduardo.RomeroModerator sexta-feira, 17 de abril de 2015 13:35
-
Sempre trabalhei com programação c# desktop, e agora estou tentando aprender um pouco de asp.net.
Ao carregar o grid do banco de dados, como posso popular os textbox, quando selecionar uma linha no grid?
Para faze isso em Desktop eu usava o cellEnter do datagridview, mas em asp, não tem
Meu Código
public class Classes { public int id { get; set; } public String Nome { get; set; } public String Idade { get; set; } } public class Conecta { //cria a conexão com o banco de dados //Não esquecer de colocar public na frente do OleDbConnection public OleDbConnection cn = new OleDbConnection(); public string status = ""; //Abrir conexão public void conectar() { try { string provedor = "Provider=Microsoft.ACE.OLEDB.12.0"; // string banco = @"Data Source=C:\Users\Engenharia\Desktop\Banco.accdb"; string banco = @"Data Source=C:\Users\Gelson\Desktop\Banco.accdb"; cn.ConnectionString = provedor + ";" + banco; cn.Open(); status = "Conexão aberta"; } catch (Exception ex) { throw ex; } } //Fechar conexão public void desconectar() { cn.Close(); status = "Conexão fechada"; } } //Listar Dados no DataGridView public IList<Classes> Listar() { IList<Classes> lista = new List<Classes>(); string query = ""; c.conectar(); query += " SELECT id,nome,idade FROM "; query += " teste ORDER BY id"; OleDbCommand cd = new OleDbCommand(); cd.Connection = c.cn; cd.CommandText = query; OleDbDataReader dr = cd.ExecuteReader(); try { while (dr.Read()) { string strId = dr["id"].ToString(); string strNome = dr["nome"].ToString(); string strIdade = dr["idade"].ToString(); Classes obj = new Classes(); obj.id = Convert.ToInt32(strId); obj.Nome = strNome; obj.Idade = strIdade; lista.Add(obj); } } catch (Exception ex) { throw ex; } finally { if (c.cn.State == ConnectionState.Open) c.desconectar(); } return lista; }//fim
-
Bertoncini, Alexsandro obrigado
Funcionou, mas é pouco eficaz pra mim, pois tem que clicar em selecionar e toda hora que clicar em selecionar tem que recarregar a pagina. Teria que ser algo como "selecionar com o mouse e aparecer nos textbox, aperto a tecla para baixo, muda a linha do grid e também muda os valores dos textboxs".
Fiz da seguinte forma o código
protected void GridView1_SelectedIndexChanged(object sender, EventArgs e) { GridViewRow row = GridView1.SelectedRow; txtID.Text = row.Cells[1].Text; txtNome.Text = row.Cells[2].Text; txtIdade.Text = row.Cells[3].Text; }
- Editado gelson_ventura quinta-feira, 16 de abril de 2015 15:09
-
Raniel Nogueira, vc poderia dar um exemplo simples?
-
Sim Realmente é uma forma de resolver o problema de maneira simples.
E como nosso amigo Raniel mencionou, pode ser feito com JQuery, ou angularjs+ajax.
Faz algum tempo que não trabalho com web, então não sei se vou conseguir ajudar tanto.
Com o Ajax já vi selecionar com o click e preencher os text box não é complicado de fazer tal fato, porém click e depois com as setas passar pelos valores não se se é possivel.
Encontrei esse link com jQuery no evento RowSelected ao mudar a cor você pode fazer ele preencher seus TextBox juntos.
Outro link que encontrei utilizando o GridView com JQuery
Uma imagem vale mais do que mil palavras, mas ocupa 3 mil vezes mais espaço em disco