none
Selecionar items no datagridview (?) RRS feed

  • 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";
                }
            }

    quinta-feira, 16 de janeiro de 2014 16:26

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.

    quinta-feira, 16 de janeiro de 2014 17:50
  • Pode me dar um exemplo de como fazer isso ?
    quinta-feira, 16 de janeiro de 2014 19:03
  • 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;

    quinta-feira, 16 de janeiro de 2014 19:10
  • 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();
                }
            }

    segunda-feira, 20 de janeiro de 2014 13:34