PREENCHER DATAGRIDVIEW COM DATASET DE FORMA RAPIDA
Carrego um DataGridView com um Dataset mas a operação demora muito por causa da grande quantidade de dados, existe alguma maneira de liberar a tela enquanto os dados são preenchidos???
cara consegui fazer o carregamento do datagrid via DATAREADER e deu certo aqui vai
Try
Dim cmd As New SqlCommand
Dim dr As SqlDataReader
Dim strSql As String
conexao.Open()
strSql = ([Ô]SELECT * FROM cliente[Ô])
cmd.CommandText = strSql
cmd.Connection = conexao
dr = cmd.ExecuteReader
[ô] varre as linhas...
While dr.Read()
[ô] monta o array de valores...
Dim values As Object() = New Object(dr.FieldCount - 1) {}
[ô] adiciona as colunas no grid...
If DataGridView1.Rows.Count = 0 Then
For i As Integer = 0 To dr.FieldCount - 1
DataGridView1.Columns.Add(dr.GetName(i), dr.GetName(i))
Next
End If
[ô] varre as colunas para preencher os valores...
For i As Integer = 0 To dr.FieldCount - 1
values(i) = dr.GetValue(i)
Next
[ô] adiciona no grid...
DataGridView1.Rows.Add(values)
End While
conexao.Close()
Catch ex As Exception
MsgBox(ex.ToString)
End Try
Try
Dim cmd As New SqlCommand
Dim dr As SqlDataReader
Dim strSql As String
conexao.Open()
strSql = ([Ô]SELECT * FROM cliente[Ô])
cmd.CommandText = strSql
cmd.Connection = conexao
dr = cmd.ExecuteReader
[ô] varre as linhas...
While dr.Read()
[ô] monta o array de valores...
Dim values As Object() = New Object(dr.FieldCount - 1) {}
[ô] adiciona as colunas no grid...
If DataGridView1.Rows.Count = 0 Then
For i As Integer = 0 To dr.FieldCount - 1
DataGridView1.Columns.Add(dr.GetName(i), dr.GetName(i))
Next
End If
[ô] varre as colunas para preencher os valores...
For i As Integer = 0 To dr.FieldCount - 1
values(i) = dr.GetValue(i)
Next
[ô] adiciona no grid...
DataGridView1.Rows.Add(values)
End While
conexao.Close()
Catch ex As Exception
MsgBox(ex.ToString)
End Try
Boa noite,
Bom primeiramente, veja se seu select não está trazendo campos desnecessários, se tiver um tráfego muito grande na rede, e tiver um servidor de qualidade, procure utilizar stored procedures.
Em relação ao travamento da tela, você deverá utilizar threads para que a tela não congele, nesse LINK tem como preencher um dataset de forma assicrona utilizando thread.
Bom primeiramente, veja se seu select não está trazendo campos desnecessários, se tiver um tráfego muito grande na rede, e tiver um servidor de qualidade, procure utilizar stored procedures.
Em relação ao travamento da tela, você deverá utilizar threads para que a tela não congele, nesse LINK tem como preencher um dataset de forma assicrona utilizando thread.
Você tem que ver primeiro se precisa mesmo de todos estes dados no Grid, se não tem alguma outra forma melhor de se fazer isso sem ser com um grid.
Se realmente precisar então você deve aprender a usar o modo virtual (propriedade VirtualMode = True) do grid, em que, simplificando, você diz para o grid quantos registros ele tem (propriedade RowCount) e ele vai te pedindo os dados dos registros conforme necessário (evento CellValueNeeded), então você carregaria apenas os registros que realmente precisa, porém caso precise editar diretamente o grid também teria que tratar nesse caso, e você não vai carregar os dados em um DataSet também pois em modo virtual ele não fica ligado a um DataSource
Se realmente precisar então você deve aprender a usar o modo virtual (propriedade VirtualMode = True) do grid, em que, simplificando, você diz para o grid quantos registros ele tem (propriedade RowCount) e ele vai te pedindo os dados dos registros conforme necessário (evento CellValueNeeded), então você carregaria apenas os registros que realmente precisa, porém caso precise editar diretamente o grid também teria que tratar nesse caso, e você não vai carregar os dados em um DataSet também pois em modo virtual ele não fica ligado a um DataSource
Tópico encerrado , respostas não são mais permitidas