Usuário com melhor resposta
Datagridview limitar visualização de linhas.

Pergunta
-
Respostas
-
Boa noite,
Acredito que entendi e se não me falha a memória eu dei uma dica de como duplicar as linhas em outro "DataGridView".
Quanto ao método apresentado anteriormente eu realizei diversos testes e não apresentou erro, pode ser que você esqueceu de renomear todos os DataGridView pois é fácil confundir por ter dois componentes, nas em fim....
Fabio, você não poderia fazer isso na hora de preencher o DataGridView2 ?
Se você utilizou o exemplo que passei, poderia fazer assim:
int index = 0; foreach (DataGridViewRow row in this.dataGridView1.Rows) { int qtde = Convert.ToInt32(row.Cells[1].Value); for (int i = 0; i < qtde; i++) { string tipo = row.Cells[3].Value.ToString(); this.dataGridView2.Rows.Add(row.Cells[0].Value, row.Cells[1].Value, row.Cells[2].Value, row.Cells[3].Value); if (i > 0 && (tipo.Equals("N/I") || tipo.Equals("Auto"))) dataGridView2.Rows[index].Visible = false; index++; } }
Att,
Se a resposta contribuiu com seu aprendizado por favor marque como util, se solucionou seu problema marque como resposta.
- Marcado como Resposta fabio_costa0311 quinta-feira, 28 de abril de 2016 13:08
Todas as Respostas
-
Bom dia,
Fabio, você pode aplicar o filtro quando for fazer a consulta no banco. Ou seja a consulta retorna os registros que você quer mostrar.
Mas caso você deseja ocultar a linha do DataGridView, você pode percorrer as linhas e ocultar as desejadas, como no exemplo:
foreach (DataGridViewRow row in this.dataGridView1.Rows) { //Filtro na coluna 0 if (row.Cells[0].Value.ToString().Equals("filtroDesejadoNaColuna1")) { dataGridView1.CurrentCell = null; dataGridView1.Rows[row.Index].Visible = false; } }
Espero ter ajudado.
Att,
Se a resposta contribuiu com seu aprendizado por favor marque como util, se solucionou seu problema marque como resposta.
-
-
-
Este datagridview recebe mais de uma linha para o mesmo registro.
exemplo: produtos que podem ter um identificador unico com um serial. e outo produto que não tenha esse identificador. esse datagrid carrega esse dois produtos. multiplicando as linhas pela quantidade de produtos recebidos. da forma que criei o datagrid esta recebedo 10 linhas, sendo 5 da calçaA e 5 da calçaB mas a calçaB este "serial" é N/a dai o filtro para mostrar 5 linhas da calçaA e 1 linha da calçaB .
CalçaA | 12,90 | *serial 123455
CalçaA | 12,90 | *serial 53434
CalçaA | 12,90 | *serial 63636
CalçaA | 12,90 | *serial 73873
CalçaA | 12,90 | *serial 9393
CalçaB | 17,90 | N/a
-
Boa tarde,
Fábio segue o exemplo que acredito que vai resolver seu problema. O método abaixo o culta as linhas duplicadas, mas se você quiser remover as linhas, só tirar o comentário "dataGridView.Rows.Remove(row)" e comentar as duas linhas abaixo:
private void OcultarLinhasDuplicadas() { for (int currentRow = 0; currentRow < dataGridView.Rows.Count - 1; currentRow++) { DataGridViewRow rowToCompare = dataGridView.Rows[currentRow]; for (int otherRow = currentRow + 1; otherRow < dataGridView.Rows.Count; otherRow++) { DataGridViewRow row = dataGridView.Rows[otherRow]; bool duplicateRow = true; for (int cellIndex = 0; cellIndex < row.Cells.Count; cellIndex++) { if (!rowToCompare.Cells[cellIndex].Value.Equals(row.Cells[cellIndex].Value)) { duplicateRow = false; break; } } if (duplicateRow) { //dataGridView.Rows.Remove(row); dataGridView.CurrentCell = null; dataGridView.Rows[row.Index].Visible = false; } } } }
Espero ter ajudado.
Att,
Se a resposta contribuiu com seu aprendizado por favor marque como util, se solucionou seu problema marque como resposta.
-
Oi silvaney,
este trecho esta dando erro referencia de objeto não definida para uma instancia do objeto
if (!rowToCompare.Cells[cellIndex].Value.Equals(row.Cells[cellIndex].Value))
Apesar, de achar que não esclareci bem meu problema.
Vou postar assim que acredito que fique fique facil.
No datagridview é como eu carrego os dados, ai o usuario seleciona no combobox o qual o tipo desse produto, N/I (não informado) , Serial , Automatico. quando ele termina de informar passo esse dados para outro datagridview (dt1)
que recebe multiplicando os registros pela quantidade então calçaA tem 2 (campo Qtd) o datagridview1 recebe duas linhas do mesmo produto. só que este produto recebeu N/I então ele não precisa mostrar 2 linhas somente 1.
calçaB foi setado com serial dai no campo1 o usurio iria colocar o serial de cada peça. esse eu preciso que carregue as 4 linhas pq os seriais serão diferentes. CamisaA é o mesmo caso de calçaA só preciso que apareça 1 linha. não preciso excluir nenhuma linha do datagriview1 somente ocultar a quantidade de linhas > 1 da condição == N/I e Automatico.
Obrigado pela ajuda, e peço desculpas se te fiz entender errado, meu problema.
Att Fabio.
-
Boa noite,
Acredito que entendi e se não me falha a memória eu dei uma dica de como duplicar as linhas em outro "DataGridView".
Quanto ao método apresentado anteriormente eu realizei diversos testes e não apresentou erro, pode ser que você esqueceu de renomear todos os DataGridView pois é fácil confundir por ter dois componentes, nas em fim....
Fabio, você não poderia fazer isso na hora de preencher o DataGridView2 ?
Se você utilizou o exemplo que passei, poderia fazer assim:
int index = 0; foreach (DataGridViewRow row in this.dataGridView1.Rows) { int qtde = Convert.ToInt32(row.Cells[1].Value); for (int i = 0; i < qtde; i++) { string tipo = row.Cells[3].Value.ToString(); this.dataGridView2.Rows.Add(row.Cells[0].Value, row.Cells[1].Value, row.Cells[2].Value, row.Cells[3].Value); if (i > 0 && (tipo.Equals("N/I") || tipo.Equals("Auto"))) dataGridView2.Rows[index].Visible = false; index++; } }
Att,
Se a resposta contribuiu com seu aprendizado por favor marque como util, se solucionou seu problema marque como resposta.
- Marcado como Resposta fabio_costa0311 quinta-feira, 28 de abril de 2016 13:08
-
-
-
-