Recuperar valor do DataGridView

21/06/2010

0

Olá Pessoal,   apresento dados de uma tabela no DataGridView, mas estou ocultando a coluna do código do cliente, quando vou recuperar o Id do cliente pelo DataGrid, da um erro dizendo que a coluna não foi encontrada por ela está oculta.   Tem outra forma que eu possa recuperar o Id do cliente sem ter que exibir essa coluna no DataGridView?  
Thales Saraiva.

Thales Saraiva.

Responder

Post mais votado

22/06/2010

Se você precisar acessar os dados a partir do DataSet:

<code>
   
    string valor = dataGridView1.CurrentRow.Cells["NomeDaColuna"].Value.ToString();
   
    foreach (DataTable table in dataSet1.Tables)
    {
        foreach (DataRow row in table.Rows)
        {
            if (row.ItemArray[x].ToString() == valor)
            {
                id = row.ItemArray[y].ToString();
            }
        }
    }

</code>

1 - Tenha certeza que a coluna "NomeDaColuna" possui valor, pois poderá gerar uma Exception;

2 - Substituir "x" no IF pelo respectivo índice da coluna, na tabela (base zero);

3 - Substituir "y" pelo índice correspondente ao ID.

4 - Se o DataSet possuir apenas uma tabela, você pode eliminar o primeiro FOREACH e substituir o segundo por: ... in table.Rows por ...in dataSet1.Tables[0].Rows.

Em tempo: busquei uma aplicação onde utilizo DataGridView e possuo colunas não visíveis que consigo ler os dados normalmente. Não sei dizer se se trata de algum atributo do DataGridView, pois não estou tendo o mesmo problema.

Um abraço.

Nilson Souza

Nilson Souza
Responder

Mais Posts

21/06/2010

Pedro Maitan

Ao invés de você criar uma coluna código preencha o atributo DataKeyNames do GridView com o código, ex:

Responder

21/06/2010

Emerson Ferreira

Pelo que entendi se falas de windowsforms seria um datagridview.   Identificar ou acessar o valor de uma celula é permitido apenas em células ativas de propriedade visible = true. No meu caso contornei esta situação abilitando a coluna desejada, deslocando-a para a última posição da minha grid(ao lado do scroll vertical) e repassando a esta coluna o valor de 5(valor mínimo) para a propriedade Width.     De certa forma fica apresentável ao cliente e eficiente ao sistema.
Responder

21/06/2010

Thales Saraiva.

Pelo que entendi se falas de windowsforms seria um datagridview.   Identificar ou acessar o valor de uma celula é permitido apenas em células ativas de propriedade visible = true. No meu caso contornei esta situação abilitando a coluna desejada, deslocando-a para a última posição da minha grid(ao lado do scroll vertical) e repassando a esta coluna o valor de 5(valor mínimo) para a propriedade Width.     De certa forma fica apresentável ao cliente e eficiente ao sistema.
Responder

21/06/2010

Thales Saraiva.

Pelo que entendi se falas de windowsforms seria um datagridview.   Identificar ou acessar o valor de uma celula é permitido apenas em células ativas de propriedade visible = true. No meu caso contornei esta situação abilitando a coluna desejada, deslocando-a para a última posição da minha grid(ao lado do scroll vertical) e repassando a esta coluna o valor de 5(valor mínimo) para a propriedade Width.     De certa forma fica apresentável ao cliente e eficiente ao sistema.
Responder

21/06/2010

Thales Saraiva.

Pelo que entendi se falas de windowsforms seria um datagridview.   Identificar ou acessar o valor de uma celula é permitido apenas em células ativas de propriedade visible = true. No meu caso contornei esta situação abilitando a coluna desejada, deslocando-a para a última posição da minha grid(ao lado do scroll vertical) e repassando a esta coluna o valor de 5(valor mínimo) para a propriedade Width.     De certa forma fica apresentável ao cliente e eficiente ao sistema.
Realmente, esqueci de informar.. é windowsforms.. essa idea que vc deu é boa!!.. mas estou tentando achar uma solução tbm através do Data Source (Dataset, DataAdapter...) .. estou tentando alguma coisa assim: eu recupero o valor da linha do datagrid e com esse valor saber qual é o registro no Data Source.. ai atraves do Data Source recuperar o valor do campo que estou querendo..   Isso é possivel? Se não vou ficar com sua idea mesmo!
Responder

22/06/2010

Netasper

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace DESKTOP
{
    public partial class Cor : Form
    {
        private List<Cor> g = new List<Cor>();
        public NEGOCIO.Cor cor;
        public NEGOCIO.Perfil perfil;

        private int linhaAtual = -1;

        private string codCor;
        private string nomCor;

        private void Cor_Load(object sender, EventArgs e)
        {
            cor = new NEGOCIO.Cor();
            perfil = new NEGOCIO.Perfil();

            int codUsuario = Convert.ToInt32(Global.CodUsuario);
            btExcluir.Visible = btNovo.Visible = btSalvar.Visible = (perfil.TipoPermissaoFormUsuario(codUsuario, NEGOCIO.Perfil.Perfis.PRODUTOS) == "E" || perfil.TipoPermissaoFormUsuario(codUsuario, NEGOCIO.Perfil.Perfis.ADMIN) == "E");
        }

        private void obtemDadosGrid()
        {
            codCor = dgvDados[0, linhaAtual].Value.ToString();
            nomCor = dgvDados[1, linhaAtual].Value.ToString();

            tbCodigo.Text = codCor;
            tbDescricao.Text = nomCor;

            btExcluir.Enabled = btAlterar.Enabled = true;
        }
        
        public Cor()
        {
            InitializeComponent();
        }

        private void Pesquisar()
        {
            tbDados.SelectedTab = tpExibicao;

            string strPalavraChave = tbPesquisa.Text;
            dgvDados.DataSource = cor.Buscar(0, strPalavraChave);

            lbQdtRegistros.Text = String.Format("Registros encontrados: ", cor.Buscar(0, strPalavraChave).Count.ToString());
            btExcluir.Enabled = btAlterar.Enabled = false;

            LimparTela();
        }

        private void btPesquisa_Click(object sender, EventArgs e)
        {
            Pesquisar();
        }

        private void btFechar_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void dgvDados_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            linhaAtual = int.Parse(e.RowIndex.ToString());
           
            if (linhaAtual >= 0)
                obtemDadosGrid();
        }

        private void btVoltar_Click(object sender, EventArgs e)
        {
            LimparTela();
            tbDados.SelectedTab = tpExibicao;
        }

        private void btExcluir_Click(object sender, EventArgs e)
        {
            string msg = String.Format("Tem certeza que deseja EXCLUIR o registro selecionado [código:] ?", codCor);
           
            if (codCor != "" && codCor != null && linhaAtual >= 0)
            {
                if (MessageBox.Show(msg, "Excluir", MessageBoxButtons.YesNo) == DialogResult.Yes)
                {
                    try
                    {
                        int qtdAfetado = cor.Acao("D", Convert.ToInt32(codCor));
                        Global.MensagemRegistroAfetado("D", qtdAfetado);
                    }
                    catch (Exception err)
                    {
                        Global.MensagemRegistroAfetado("D", -1, err.Message);
                    }
                }
            }

            Pesquisar();
        }

        private void btAlterar_Click(object sender, EventArgs e)
        {
            tbDados.SelectedTab = tpAcao;
        }

        private void btNovo_Click(object sender, EventArgs e)
        {
            LimparTela();
            tbDados.SelectedTab = tpAcao;
        }

        private void btSalvar_Click(object sender, EventArgs e)
        {
            int codigo = Convert.ToInt32("0" + tbCodigo.Text);
            string descricao = Convert.ToString("" + tbDescricao.Text);
            string acao = (codigo == 0 ? "I" : "U");

            if (descricao.Length > 0)
            {
                try
                {
                    int qtdAfetado = cor.Acao(acao, codigo, descricao);
                    Global.MensagemRegistroAfetado(acao, qtdAfetado);
                }
                catch (Exception err)
                {
                    Global.MensagemRegistroAfetado(acao, -1, err.Message);
                }
               
                Pesquisar();
            }
            else
            {
                MessageBox.Show("Preencha a DESCRIÇÃO da Cor.");
                tbDescricao.Focus();
            }
        }

        private void LimparTela()
        {
            linhaAtual = -1;
            codCor = "";
            nomCor = "";

            tbCodigo.Text = "";
            tbDescricao.Text = ""; 
        }
    }
}
 
Responder

23/06/2010

Thales Saraiva.

Olá Nilson,   Obrigado pela solução do problema... realmente funcionou!!!
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

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

Aceitar