Inquiridor
Selecionar items no datagridview (?)

Pergunta
-
Boa tarde,
Utilizo um datagridview para exibir os cadastros registrados, e quando clico no botão alterar, ele capta os valores para que possa ser modificado. O quê está havendo é que ele só está captando a primeira coluna, quando clico na segunda coluna, ele obtêm o valor da primeira! Me ajudem!
private void ObterDados() { Usuario = dgvFuncionarios[1, dbLinhaAtual].Value.ToString(); Senha = dgvFuncionarios[2, dbLinhaAtual].Value.ToString(); }
private void IniciarAcesso() { ds = new DataSet(); dbConnection = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Application.StartupPath + @"\Data\" + dbBase); try { dbConnection.Open(); } catch (System.Exception e) { MessageBox.Show(e.Message.ToString()); } if (dbConnection.State == ConnectionState.Open) { da = new OleDbDataAdapter("SELECT * FROM tbFuncionarios", dbConnection); da.Fill(ds,"tbFuncionarios"); dgvFuncionarios.DataSource = ds; dgvFuncionarios.DataMember = "tbFuncionarios"; } }
Todas as Respostas
-
Guilherme você nao está passando o número da linha fixo?
Dê uma verificada nisso, é bem provável que esse seja o seu problema.
Normalmente ao se clicar em uma linha do gridView se atribui um evento onde ele irá contem o rowIndex, que se trata do índice da linha clicada.
Abraço.
-
-
Um jeito mais facil seria vc alterar a propriedade de seu datagrid chamada :
SelectionMode = FullRowSelect no modo Designer
No código vc faria isso :
//ler a coluna 0 supondo que seja string string coluna0 = (string)suagrid.SelectedCells[0].Value; //coluna 1 string coluna1 = (string)suagrid.SelectedCells[1].Value; //coluna 2 supondo seja int int coluna2 = (int)suagrid.SelectedCells[2].Value;
-
Guilherme quando o usuário seleciona o registro você vai editar apenas a célula que ele selecionou ou todos os dados da linha?
Se for célula a célula seria mais prático talvez para o usuário poder editar diretamente no grid, você neste caso poderia fazer uso do BindingSource bindando com sua classe "Funcionario" por exemplo e passando para o bindingsource uma lista desta classe, e o grid teria como datasource o bindingsource que seria o mesmo que você usuaria para salvar as alterações quando o usuário clicasse em um botão salvar por exemplo.
public class Funcionario { public int ID { get; set; } public string Nome { get; set; } public string Senha { get; set; } public void Salvar() { //Caso você tenha um método que salve os dados do funcionario } }
BindingSource bs = new BindingSource(); private void PreencheGrid() { List<Funcionario> lstFuncionarios = new List<Funcionario>(); for (int i = 1; i <= 100; i++) { lstFuncionarios.Add(new Funcionario() { ID = i, Nome = "Nome " + i.ToString(), Senha = "Senha " + i.ToString() }); } //Bs é a o bindingsource adicionado no formulário que está vinculado com o grid. bs.DataSource = lstFuncionarios; bs.ResetBindings(false); } void btnSalvar_Click(object sender, EventArgs e) { foreach (Funcionario f in (List<Funcionario>)bs.DataSource) { f.Salvar(); } }