Toon posts:

[VB.NET] Datagrid Fill te traag

Pagina: 1
Acties:
  • 155 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Hallo,

Tijdens het laden van data uit mijn acces database naar een datagrid loopt mijn form altijd vast. Hoe kan ik dit het beste oplossen? Tijdens het vullen een Loading-form laten zien gaat ook niet goed, omdat alle forms gewoon vast lopen.


Public Function FillGrid(ByVal Sqlstring As String)

Dim OleDbConn As OleDbConnection = New OleDbConnection(ConnString)
OleDbConn.Open()

Dim MyDataSet As DataSet = New DataSet()
Dim MyOleDataAdapter As OleDbDataAdapter = New OleDbDataAdapter()
Try

MyOleDataAdapter.SelectCommand = New OleDbCommand(Sqlstring, OleDbConn)
MyOleDataAdapter.Fill(MyDataSet)
Me.dataGIC.DataSource = MyDataSet.Tables(0)

MyOleDataAdapter.Dispose()
MyDataSet.Dispose()
OleDbConn.Close()
OleDbConn.Dispose()
Catch err As System.Exception
End Try

End Function

  • compufreak88
  • Registratie: November 2001
  • Laatst online: 02-05 17:51
Zie mijn reply @ eprogrammeur.nl ;)

Komt er op neer dat je het beste een BackGroundWorker kunt gebruiken.

[ Voor 50% gewijzigd door compufreak88 op 30-03-2007 16:04 ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 00:54
Kijk eens naar de backgroundworker. Haal je data in de achtergrond op, en vul je Grid als die backgroundworker z'n taak gedaan heeft.

https://fgheysels.github.io/


Verwijderd

Topicstarter
Ok bedankt.

Verwijderd

Topicstarter
Imports System.Data
Imports System.Data.OleDb


Public Class Form1


Private Sub BackgroundWorker1_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork

Dim Sqlstring As String
Sqlstring = "Select top 10 * from data"
Me.datagic.DataSource = Nothing
Dim OleDbConn As OleDbConnection = New OleDbConnection(ConnString)
OleDbConn.Open()

Dim MyDataSet As DataSet = New DataSet()
Dim MyOleDataAdapter As OleDbDataAdapter = New OleDbDataAdapter()
Try
MyOleDataAdapter.SelectCommand = New OleDbCommand(Sqlstring, OleDbConn)
MyOleDataAdapter.Fill(MyDataSet)
Me.datagic.DataSource = MyDataSet.Tables(0)
MyOleDataAdapter.Dispose()
MyDataSet.Dispose()
OleDbConn.Close()
OleDbConn.Dispose()

Catch err As System.Exception
End Try
End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
BackgroundWorker1.RunWorkerAsync()
End Sub

Private Sub BackgroundWorker1_RunWorkerCompleted(ByVal sender As System.Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles BackgroundWorker1.RunWorkerCompleted

MsgBox("Done")

End Sub

End Class


ga ik zo de goede richting op? Mijn datagrid blijft vastlopen na het laden van de data..

  • whoami
  • Registratie: December 2000
  • Laatst online: 00:54
Wil je even code-tags gebruiken om je code te formatteren, en je enkel beperken tot het posten van de relevante code ?

Daarnaast vind ik het ook wel een beetje vies dat je excepties opeet als ze optreden. Nu weet je niet eens als er een fout gebeurt.

Wat bedoel je trouwens met 'm'n datagrid blijft vastlopen' na het laden van de data ? Je bent wel zeker dat de gegevens ingeladen worden ? Je gegevens worden zeker opgehaald ?
Waarom vul je je datagrid niet in de RunWorkerCompleted ipv een MsgBox te tonen ?
Maw, laat je Backgroundworker de data ophalen, en eens de data opgehaald is, toon je in de 'Completed' je data in je grid.

https://fgheysels.github.io/


  • EfBe
  • Registratie: Januari 2000
  • Niet online
Hoeveel data prop je in die grid? Meer dan 1000 rows? Dan zou ik toch echt gaan filteren.

Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com


  • WasBak
  • Registratie: September 2000
  • Niet online
EfBe schreef op vrijdag 30 maart 2007 @ 19:25:
Hoeveel data prop je in die grid? Meer dan 1000 rows? Dan zou ik toch echt gaan filteren.
top 10. ;)

Zet eens een breakpoint en begin met debuggen, kijk dan eens of je dataset ook echt gevuld is. En controlleer je connectie.

Verwijderd

Topicstarter
Ik heb het zeg maar opgelost door gewoon bij dowork e.Result = MyDataSet.Tables(0) te zetten
en dan bij RunWorkerCompleted heb ik de datagrid gevult..tis maar een begin, maar komt goed..data laat nu veel sneller, eerst 20 seconden om hele data te laden, nu 5 seconde ofzo

Verwijderd

Topicstarter
Hmm hij was te traag omdat ik na het laden elke column naam verander:
.Columns(0).HeaderText = "blabla" ..hoe kan ik dit het best oplossen hij blijft namelijk traag..ik had gelezen dat je niks kan aanpassen aan je gui in de work fase..als ik het in de workercompleted doe dan blijft ie gewoon zo traag, hoe kan ik dit oplossen? dat hij gelijk de columnnaam van acces ophaalt..ik heb namelijk voor elke veld een naam en een caption..

  • MacWolf
  • Registratie: Januari 2004
  • Laatst online: 06-09-2024
Verwijderd schreef op vrijdag 30 maart 2007 @ 21:58:
Hmm hij was te traag omdat ik na het laden elke column naam verander:
.Columns(0).HeaderText = "blabla" ..hoe kan ik dit het best oplossen hij blijft namelijk traag..ik had gelezen dat je niks kan aanpassen aan je gui in de work fase..als ik het in de workercompleted doe dan blijft ie gewoon zo traag, hoe kan ik dit oplossen? dat hij gelijk de columnnaam van acces ophaalt..ik heb namelijk voor elke veld een naam en een caption..
Ik weet zo uit mijn hoofd niet 100% zeker of het werkt, maar je kan proberen een FillSchema te doen voor de 'gewone' Fill, wellicht worden dan de kolomnamen van Access overgenomen en wellicht is dat sneller.

Weet niet zeker of de GUI dan gelijk wordt vernieuwd met juiste kolomnamen (zou denken van niet, lijkt me te gebeuren op het moment dat je het grid bind aan de data), dus wellicht moet je nog een handeling achteraf doen, bijv. DataGrid.Columns(0).Caption = DataSet.DataTable(0).Columns(0).Caption o.i.d.

[ Voor 6% gewijzigd door MacWolf op 31-03-2007 15:32 ]

Microsoft Windows: A thirty-two bit extension and graphical shell to a sixteen-bit patch to an eight-bit operating system originally coded for a four-bit microprocessor which was written by a two-bit company that can't stand one bit of competition.

Pagina: 1