GRID COM MUITOS REGISTROS
Segundo que tenho uma rotina pra colorir as celulas do grid só que se nem carregar imagina essa rotina passando em 100 mil registros:
Dim x As Integer = 0
For x = 0 To grdRecebimentoPcp.Rows.Count - 1
If Me.grdRecebimentoPcp.Rows(x).Cells(3).Value.ToString.Contains([Ô]ROD[Ô]) Then
Me.grdRecebimentoPcp.Rows(x).Cells(3).Style.BackColor = Color.DarkGray
Me.grdRecebimentoPcp.Rows(x).Cells(3).Style.Font = New Font(grdRecebimentoPcp.Font, FontStyle.Bold)
End If
If Me.grdRecebimentoPcp.Rows(x).Cells(3).Value.ToString.Contains([Ô]PNU[Ô]) Then
Me.grdRecebimentoPcp.Rows(x).Cells(3).Style.BackColor = Color.Black
Me.grdRecebimentoPcp.Rows(x).Cells(3).Style.ForeColor = Color.White
Me.grdRecebimentoPcp.Rows(x).Cells(3).Style.Font = New Font(grdRecebimentoPcp.Font, FontStyle.Bold)
End If
If Me.grdRecebimentoPcp.Rows(x).Cells(3).Value.ToString.Contains([Ô]ELT[Ô]) Then
Me.grdRecebimentoPcp.Rows(x).Cells(3).Style.BackColor = Color.LawnGreen
Me.grdRecebimentoPcp.Rows(x).Cells(3).Style.ForeColor = Color.Black
Me.grdRecebimentoPcp.Rows(x).Cells(3).Style.Font = New Font(grdRecebimentoPcp.Font, FontStyle.Bold)
End If
If Me.grdRecebimentoPcp.Rows(x).Cells(3).Value.ToString.Contains([Ô]BIC[Ô]) Then
Me.grdRecebimentoPcp.Rows(x).Cells(3).Style.BackColor = Color.Gold
Me.grdRecebimentoPcp.Rows(x).Cells(3).Style.ForeColor = Color.Black
Me.grdRecebimentoPcp.Rows(x).Cells(3).Style.Font = New Font(grdRecebimentoPcp.Font, FontStyle.Bold)
End If
If Me.grdRecebimentoPcp.Rows(x).Cells(3).Value.ToString.Contains([Ô]FIO[Ô]) Then
Me.grdRecebimentoPcp.Rows(x).Cells(3).Style.BackColor = Color.Yellow
Me.grdRecebimentoPcp.Rows(x).Cells(3).Style.ForeColor = Color.Black
Me.grdRecebimentoPcp.Rows(x).Cells(3).Style.Font = New Font(grdRecebimentoPcp.Font, FontStyle.Bold)
End If
If Me.grdRecebimentoPcp.Rows(x).Cells(3).Value.ToString.Contains([Ô]BRI[Ô]) Then
Me.grdRecebimentoPcp.Rows(x).Cells(3).Style.BackColor = Color.SkyBlue
Me.grdRecebimentoPcp.Rows(x).Cells(3).Style.ForeColor = Color.Black
Me.grdRecebimentoPcp.Rows(x).Cells(3).Style.Font = New Font(grdRecebimentoPcp.Font, FontStyle.Bold)
End If
If Me.grdRecebimentoPcp.Rows(x).Cells(3).Value.ToString.Contains([Ô]EPI[Ô]) Then
Me.grdRecebimentoPcp.Rows(x).Cells(3).Style.BackColor = Color.Red
Me.grdRecebimentoPcp.Rows(x).Cells(3).Style.ForeColor = Color.Black
Me.grdRecebimentoPcp.Rows(x).Cells(3).Style.Font = New Font(grdRecebimentoPcp.Font, FontStyle.Bold)
End If
If Me.grdRecebimentoPcp.Rows(x).Cells(3).Value.ToString.Contains([Ô]ESP[Ô]) Then
Me.grdRecebimentoPcp.Rows(x).Cells(3).Style.BackColor = Color.Tomato
Me.grdRecebimentoPcp.Rows(x).Cells(3).Style.ForeColor = Color.Black
Me.grdRecebimentoPcp.Rows(x).Cells(3).Style.Font = New Font(grdRecebimentoPcp.Font, FontStyle.Bold)
End If
If Me.grdRecebimentoPcp.Rows(x).Cells(3).Value.ToString.Contains([Ô]QUI[Ô]) Then
Me.grdRecebimentoPcp.Rows(x).Cells(3).Style.BackColor = Color.LightBlue
Me.grdRecebimentoPcp.Rows(x).Cells(3).Style.ForeColor = Color.Black
Me.grdRecebimentoPcp.Rows(x).Cells(3).Style.Font = New Font(grdRecebimentoPcp.Font, FontStyle.Bold)
End If
If Me.grdRecebimentoPcp.Rows(x).Cells(3).Value.ToString.Contains([Ô]MIC[Ô]) Then
Me.grdRecebimentoPcp.Rows(x).Cells(3).Style.BackColor = Color.Purple
Me.grdRecebimentoPcp.Rows(x).Cells(3).Style.ForeColor = Color.Black
Me.grdRecebimentoPcp.Rows(x).Cells(3).Style.Font = New Font(grdRecebimentoPcp.Font, FontStyle.Bold)
End If
Next
Dim y As Integer = 0
For y = 0 To grdRecebimentoPcp.Rows.Count - 1
If Me.grdRecebimentoPcp.Rows(y).Cells(15).Value.ToString.Contains([Ô]SIM[Ô]) Then
Me.grdRecebimentoPcp.Rows(y).Cells(15).Style.BackColor = Color.MediumSeaGreen
Me.grdRecebimentoPcp.Rows(y).Cells(15).Style.ForeColor = Color.Black
Me.grdRecebimentoPcp.Rows(y).Cells(15).Style.Font = New Font(grdRecebimentoPcp.Font, FontStyle.Bold)
End If
If Me.grdRecebimentoPcp.Rows(y).Cells(15).Value.ToString.Contains([Ô]NÃO[Ô]) Then
Me.grdRecebimentoPcp.Rows(y).Cells(15).Style.BackColor = Color.OrangeRed
Me.grdRecebimentoPcp.Rows(y).Cells(15).Style.ForeColor = Color.Black
Me.grdRecebimentoPcp.Rows(y).Cells(15).Style.Font = New Font(grdRecebimentoPcp.Font, FontStyle.Bold)
End If
Next
Meu select está assim:
Como faço pra carregar os 100 mil registros e executar os For[ô]s pra colorir o grid e as celulas?
Try
objConexao.Open()
strSql = [Ô]select * FROM cad_form101 ORDER BY codigo[Ô]
Dim cmd As MySqlCommand = New MySqlCommand(strSql, objConexao)
Dim da As MySqlDataAdapter = New MySqlDataAdapter(cmd)
Dim dt As DataTable = New DataTable
da.Fill(dt)
grdRecebimentopcp.DataSource = dt
[ô] ConfigGrid()
Catch ex As Exception
MessageBox.Show(ex.ToString)
Finally
objConexao.Close()
End Try
Queria que meu grid ficasse tipo loading carregando e fosse adicionando as linhas conforme vai carregando e não travasse.
Use o evento do Grid...
private void dataGridView1_RowDefaultCellStyleChanged(object sender, DataGridViewRowEventArgs e)
{
}
Estava fuçando em uma [Ô]MSFlexGrid[Ô] e no site do Macoratti, dentro do sub-tÃtulo:
==================================================
Nota: Limites de exibição de células nos controles de grid
http://www.macoratti.net/vb6_msfg.htm
==================================================
Aprendi que o número MÃXIMO de registros equivale a 350 mil DIVIDIDO pelo número de colunas, então coloquei o seguinte [Ô]IF[Ô] para que apareça uma mensagem amigável para o usuário:
If msgResumo.Rows >= (350000 / msgResumo.Cols) Then
MsgBox [Ô]O número de registros superou [Ô] & FormatNumber(350000 / msgResumo.Cols, 0) & [Ô].[Ô] & vbCrLf & [Ô]Não é possÃvel colocar mais registros na grade.[Ô], vbOKOnly + vbCritical
[ô]Exit Do
End If
[][ô]s,
Tunusat.
Private Sub grdRecebimentoPcp_RowDefaultCellStyleChanged(sender As Object, e As DataGridViewRowEventArgs) Handles grdRecebimentoPcp.RowDefaultCellStyleChanged
For Each dgvr As DataGridViewRow In grdRecebimentoPcp.Rows
If dgvr.Cells(3).Value.ToString.Contains([Ô]ROD[Ô]) Then
dgvr.DefaultCellStyle.ForeColor = Color.Red
End If
Next
End Sub
Como eu disparo? porque ele carrega o meu grid mas nao dispara a rotina, e o For Each não seria a mesma velocidade que utilizar o For?
Sobre carregar 100 mil registros, preciso sim, pois em uma auditoria preciso mostrar os registros do inicio ao fim, porém para os funcionários irá aparecer somente os registros do mês, más seria interessante uma pesquisa por [Ô]todos[Ô] também..
Citação::
MESTRE,
Estava fuçando em uma [Ô]MSFlexGrid[Ô] e no site do Macoratti, dentro do sub-tÃtulo:
==================================================
Nota: Limites de exibição de células nos controles de grid
http://www.macoratti.net/vb6_msfg.htm
==================================================
Aprendi que o número MÃXIMO de registros equivale a 350 mil DIVIDIDO pelo número de colunas, então coloquei o seguinte [Ô]IF[Ô] para que apareça uma mensagem amigável para o usuário:If msgResumo.Rows >= (350000 / msgResumo.Cols) Then
MsgBox [Ô]O número de registros superou [Ô] & FormatNumber(350000 / msgResumo.Cols, 0) & [Ô].[Ô] & vbCrLf & [Ô]Não é possÃvel colocar mais registros na grade.[Ô], vbOKOnly + vbCritical
Exit Do
End If
[][ô]s,
Tunusat.
Tunusat na verdade to com o VB.NET e utilizando o Grid nativo, entendi o que quis dizer porém eu preciso carregar os 100 mil registros cara, numa auditoria vai que o auditor queira ver a sequencia de registros.. queria colocar como se fosse um loading enquanto vai carregando os registros e também solucionar o problema dos [Ô]For[ô]s[Ô] para trocar as cores do grid.
Uma solução seria, ao invés de gerar uma grid, gerar um arquivo texto [Ô].CVS[Ô] ou um arquivo do novo excel [Ô].XLSX[Ô] (NÃO dá para fazer no antigo Excel [Ô].XLS[Ô] pois ele só suporta +/- 64 mil e poucos). Talvez um [Ô].PDF[Ô] (Adobe Portable Document File).
Acho muito difÃcil uma única pessoa ler um grid absurdo de grande destes ... E se colocar como obrigatório alguns filtros antes de montar a grid? Exemplo: Data Inicial e data final. Isto restringiria o número de linhas...
[][ô]s,
Tunusat.
vou carregar então só os do mes e ja era.. só que to no problema do For ainda..
como fazer pra colorir o grid de uma maneira mais rápida??
Bom ... concordo com o [Ô]F001E[Ô].
Veja se sua grid tem esta propriedade [ô]DataGridView.AlternatingRowsDefaultCellStyle[ô]:
========================================================
[Ô]... Se o que pretendes é colorir linha sim, linha não, podes fazê-lo automaticamente através da propriedade [ô]AlternatingRowsDefaultCellStyle[ô] ...[Ô]
http://www.portugal-a-programar.pt/topic/47281-vbnet-colorir-datagridview/
========================================================
Propriedade DataGridView.AlternatingRowsDefaultCellStyle
https://msdn.microsoft.com/pt-br/library/system.windows.forms.datagridview.alternatingrowsdefaultcellstyle(v=vs.110).aspx
[ô] Defina a cor de fundo para todas as linhas e para linhas alternadas.
[ô] O valor para linhas alternadas substitui o valor para todas as linhas.
dataGridView1.RowsDefaultCellStyle.BackColor = Color.LightGray
dataGridView1.AlternatingRowsDefaultCellStyle.BackColor = Color.DarkGray
========================================================
How to apply alternating row pattern to only one datagridview column
http://stackoverflow.com/questions/19743429/how-to-apply-alternating-row-pattern-to-only-one-datagridview-column
========================================================
AlternatingRowsDefaultCellStyle Property (GcMultiRow)
http://helpcentral.componentone.com/NetHelp/MultiRow/GrapeCity.Win.MultiRow~GrapeCity.Win.MultiRow.GcMultiRow~AlternatingRowsDefaultCellStyle.html
========================================================
Colorir DATAGRIDVIEW VB.NET
https://social.msdn.microsoft.com/Forums/pt-BR/292b4e08-d130-41e5-a0ef-4f7c11a22050/colorir-datagridview-vbnet
========================================================
[][ô]s,
Tunusat.
Quando não tem outra forma e se precisa exibir muitos registros em um grid a forma correta é usando o VirtualMode dele, onde você diz para ele quantas linhas existem e em vez de carregar todos os dados de uma vez você trata o evento CellValueNeeded para passar o valor para o grid da linha que ele está pedindo, porém é muito mais complexo de implementar pois você precisa ir carregando os dados aos poucos e ir fazendo um cache deles manualmente, seria algo parecido com fazer uma paginação dos dados.
Eu não possuo nenhum exemplo disso, até porque isso também deve incluir fazer a paginação por SQL no banco de dados e isso muda de um banco para outro, se não me engano o MySQL usa o comando LIMIT para isso.
Citação::
Se é para auditoria o ideal acho que seria gerar um relatório, não faz sentido exibir tantos registros em um grid, e mesmo em uma auditoria duvido que alguém vá conferir 100 mil registros um por um.
Quando não tem outra forma e se precisa exibir muitos registros em um grid a forma correta é usando o VirtualMode dele, onde você diz para ele quantas linhas existem e em vez de carregar todos os dados de uma vez você trata o evento CellValueNeeded para passar o valor para o grid da linha que ele está pedindo, porém é muito mais complexo de implementar pois você precisa ir carregando os dados aos poucos e ir fazendo um cache deles manualmente, seria algo parecido com fazer uma paginação dos dados.
Eu não possuo nenhum exemplo disso, até porque isso também deve incluir fazer a paginação por SQL no banco de dados e isso muda de um banco para outro, se não me engano o MySQL usa o comando LIMIT para isso.
Entendi muita complexidade, melhor eu carregar mesmo os do Mês apenas e pro auditor eu vou elaborar um relatório pra auditoria de 1000 páginas bem gostosinho direto via Sql Query pros auditores auditor é chato demais começa a querer achar [Ô]pelo em ovo[Ô]...
Citação::
MESTRE,
Bom ... concordo com o [Ô]F001E[Ô].
Veja se sua grid tem esta propriedade [ô]DataGridView.AlternatingRowsDefaultCellStyle[ô]:
========================================================
[Ô]... Se o que pretendes é colorir linha sim, linha não, podes fazê-lo automaticamente através da propriedade [ô]AlternatingRowsDefaultCellStyle[ô] ...[Ô]
http://www.portugal-a-programar.pt/topic/47281-vbnet-colorir-datagridview/
========================================================
Propriedade DataGridView.AlternatingRowsDefaultCellStyle
https://msdn.microsoft.com/pt-br/library/system.windows.forms.datagridview.alternatingrowsdefaultcellstyle(v=vs.110).aspx[ô] Defina a cor de fundo para todas as linhas e para linhas alternadas.
[ô] O valor para linhas alternadas substitui o valor para todas as linhas.
dataGridView1.RowsDefaultCellStyle.BackColor = Color.LightGray
dataGridView1.AlternatingRowsDefaultCellStyle.BackColor = Color.DarkGray
========================================================
How to apply alternating row pattern to only one datagridview column
http://stackoverflow.com/questions/19743429/how-to-apply-alternating-row-pattern-to-only-one-datagridview-column
========================================================
AlternatingRowsDefaultCellStyle Property (GcMultiRow)
http://helpcentral.componentone.com/NetHelp/MultiRow/GrapeCity.Win.MultiRow~GrapeCity.Win.MultiRow.GcMultiRow~AlternatingRowsDefaultCellStyle.html
========================================================
Colorir DATAGRIDVIEW VB.NET
https://social.msdn.microsoft.com/Forums/pt-BR/292b4e08-d130-41e5-a0ef-4f7c11a22050/colorir-datagridview-vbnet
========================================================
[][ô]s,
Tunusat.
Então TUNUSAT eu consegui utilizando os For acima, porém ele demora um pouquinho, um desses exemplos tem for também, porém não pode ser o Alternating pois teria que mudar a cor de celulas especificas em todas as linhas e não alternando linha sim,linha não.. mas fica meu agradecimento pois eu desconhecia o alternating..
Porém meu problema é que não consigo disparar o evento DefaultStyleChanged abaixo, no caso utilizando For Each seria mais rapido do que os For[ô]s que eu utilizei la no topo? quero ter o melhor desempenho possÃvel:
Private Sub grdRecebimentoPcp_RowDefaultCellStyleChanged(sender As Object, e As DataGridViewRowEventArgs) Handles grdRecebimentoPcp.RowDefaultCellStyleChanged
For Each dgvr As DataGridViewRow In grdRecebimentoPcp.Rows
If dgvr.Cells(3).Value.ToString.Contains([Ô]ROD[Ô]) Then
dgvr.DefaultCellStyle.ForeColor = Color.Red
End If
Next
End Sub