none
Quantidade de linhas de DataGridView de outro form é igual a zero RRS feed

  • Discussão Geral

  • Olá pessoal,

    Estou tentando apagar todas as linhas do DataGridView1, que está em outro form, mas pelo Debugador, verifiquei que a linha dataGridView1.RowCount, está com 0 (zero), porque a quantidade aparece zero se o DataGridView1 possui linhas ?

    form2 f1 = new form2();
    for (int i = 0; i < f1.dataGridView1.RowCount; i++)
    {
          f1.dataGridView1.Rows[i].DataGridView.Columns.Clear();
    }

    Windows Form, C#, MySQL

    Obrigado.


    quarta-feira, 3 de janeiro de 2018 12:24

Todas as Respostas

  • Olá Porter Porter

    Para esse tipo validação use sempre: Rows.Count

    Exemplo: dataGridView1.Rows.Count

    Mais para limpar toda sua grid eu usaria apenas:

    dataGridView1.DataSource = null; 

    Abraços!

     

    Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!

    Rafael Almeida
    Microsoft Developer .NET
    Microsoft Certified Professional
    Development Leader at JAMSOFT Informática
    Email: ralms@ralms.net
    Blog -  GitHub  -  LinkedIn -  Twitter

    quarta-feira, 3 de janeiro de 2018 12:41
  • Olá Rafael, obrigado por responder, esse comando que você passou, funciona se estiver no mesmo form, mas se o DataGridView1 estiver em outro form não acontece nada, estou fazendo assim:

    form2 f1 = new form2();

    f1.DataGridView1.DataSource = null;

    quarta-feira, 3 de janeiro de 2018 13:05
  • Exatamente!

    Você não irá conseguir realmente fazer isso, o DataGridView1 que está em outro form não é acessível, ele é um objeto privado, sendo assim apenas o dono do form terá acesso em outras palavras o form2.

    Outra coisa com isso aqui, não existe exetamente nada ainda na grid.

    form2 f1 = new form2();
    f1.DataGridView1.DataSource = null;


    Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!

    Rafael Almeida
    Microsoft Developer .NET
    Microsoft Certified Professional
    Development Leader at JAMSOFT Informática
    Email: ralms@ralms.net
    Blog -  GitHub  -  LinkedIn -  Twitter

    quarta-feira, 3 de janeiro de 2018 13:14
  • Entendi, achei que apenas mudando a propriedade Modifiers do DataGridView1 para Public, bastaria para acessa-lo, o que tenho que fazer para acessa-lo, teria como você me passar um exemplo ou indicar um tutorial ?

    Obrigado.

    quarta-feira, 3 de janeiro de 2018 13:41
  • Entendi, achei que apenas mudando a propriedade Modifiers do DataGridView1 para Public, bastaria para acessa-lo, o que tenho que fazer para acessa-lo, teria como você me passar um exemplo ou indicar um tutorial ?

    Obrigado.

    Sim com isso você tem o objeto disponível. Eu estava acreditando que você não tinha modificado essa propriedade.

    Deixando o Modifiers como public você de fato terá acesso ao objeto, a questão é que você estava fazendo isso:

    form2 f1 = new form2();
    for (int i = 0; i < f1.dataGridView1.RowCount; i++)
    {
          f1.dataGridView1.Rows[i].DataGridView.Columns.Clear();
    }

    E isso não funciona por que o objeto não foi carregado ainda, a não ser que existe algum método no construtor do form2 para carregar informações do banco.

    Se existir use então o:

    f1.dataGridView1.Rows.Clear();


                
                


    Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!

    Rafael Almeida
    Microsoft Developer .NET
    Microsoft Certified Professional
    Development Leader at JAMSOFT Informática
    Email: ralms@ralms.net
    Blog -  GitHub  -  LinkedIn -  Twitter

    quarta-feira, 3 de janeiro de 2018 14:04
  • No form2, tem um metodo chamado atualizaGrid, este método é executado no Load do form2, o

    método eu consigo executar normalmente, mas não acontece nada com a rotina abaixo.

    form2 f1 = new form2();

    f1.atualizaGrid();

    f1.dataGridView1.Rows.Clear();

    quarta-feira, 3 de janeiro de 2018 16:07
  • Certo, você está usando o atualizaGrid no Load do form como informado.

    Qual a necessidade de atualizar o DataGridView e logo depois limpar os registros?

    Por que no evento Load você carregar certo?

    Mais antes de carregar você está fazendo f1.atualizaGrid() que carrega os dados e logo abaixo limpa, não estou entendendo sua lógica, pode detalhar a necessidade?

    E se possível poste o código do form2 aqui, assim fica mais fácil para lhe auxiliar.


    Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!

    Rafael Almeida
    Microsoft Developer .NET
    Microsoft Certified Professional
    Development Leader at JAMSOFT Informática
    Email: ralms@ralms.net
    Blog -  GitHub  -  LinkedIn -  Twitter

    quarta-feira, 3 de janeiro de 2018 17:28
  • A intenção é apenas atualizar o Grid que está no form2, limpar o Grid no Form1, é apenas um teste para verificar se estava tendo acesso ao DatagridView1 do form2, se executar f1.show, funciona corretamente, mas ficam vários forms abertos, eu quero atualizar o grid do form2 que já está aberto, entendeu.

    form2 f1 =  new form2();
    f1.atualizaGrid();

    No form2, estou carregando o datagridview assim:

    namespace agenda
    {

        public partial class form2 : Form
        {

            int contador = 0;
            int contagemLembrete = 0;

            private List<DatasBD> _Datas;
            private List<DatasBD> _Nomes;
            private List<DatasBD> _idcliente;

            public form2()
            {
                InitializeComponent();
                _Datas = new List<DatasBD>();
                _Nomes = new List<DatasBD>();
                _idcliente = new List<DatasBD>();
            }

            string codigo;
            string dataInicial, dataFinal;

    private void form2_Load(object sender, EventArgs e)
            {

                atualizaGrid();

             }

    public void atualizaGrid() 
            {
                DataSet dts = new DataSet();
                try
                {
                    int linhaselecionada = 0;
                    if (dataGridView1.CurrentRow != null)
                    {
                        linhaselecionada = dataGridView1.CurrentRow.Index;
                    }
                    string sql = "select status, nomecli, where CODVEN = " + frmLogin.codusu  " ;

                    MySql.Data.MySqlClient.MySqlDataAdapter datap = new MySqlDataAdapter(sql, Program.conn);
                    datap.Fill(dts, "Contatos");
                    dataGridView1.DataSource = dts.Tables["Contatos"];

                    if (dts.Tables["CONTATOS"].Rows.Count == 0)
                    {
                        try
                        {
                            dataGridView1.CurrentCell = dataGridView1.Rows[linhaselecionada].Cells[1];
                        }
                        catch
                        {
                        }
                    }
                    // SE TABELA NAO ESTIVER VAZIA
                    if (dts.Tables["CONTATOS"].Rows.Count > 0)
                    {
                        try
                        {
                            dataGridView1.CurrentCell = dataGridView1.Rows[linhaselecionada].Cells[1];
                        }
                        catch
                        {
                            if (linhaselecionada > 0)
                            {
                                linhaselecionada--;
                                dataGridView1.CurrentCell = dataGridView1.Rows[linhaselecionada].Cells[1];
                            }
                        }
                    }
                }
                catch
                {
                    MessageBox.Show("Código do usuário não informado " + frmLogin.codusu);
                }
            }



    quarta-feira, 3 de janeiro de 2018 18:12