Inquiridor
Quantidade de linhas de DataGridView de outro form é igual a zero

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.
- Editado Porter Porter quarta-feira, 3 de janeiro de 2018 12:35
- Tipo Alterado Filipe B CastroModerator sexta-feira, 5 de janeiro de 2018 17:39
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 -
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;
-
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 -
-
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 -
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();
-
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 -
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);
}
}
- Editado Porter Porter quarta-feira, 3 de janeiro de 2018 18:17