Loading-Icon beim DataGridView

09/06/2009 - 08:18 von Rafael G. | Report spam
Hallo NG,

ich habe eine .NET WinForms-Anwendung, wo ich für die Anzeige meiner
Ergebnisse aus einem SQL-Server ein DataGridView verwende. Nun kann es
u.U., je nach Netzwerkauslastung bzw. Anzahl der Treffer ein paar
Sekunden dauern, bis das DataGridView geladen ist.
Nun war meine Idee, in der Zeit, wo die Daten noch nicht gefüllt sind,
ein Loading-Gif einzublenden. Ich würde einfach das Panel mit dem
Datagridview in den Hintergrund packen und ein Panel mit einer PicturBox
mit einem Loading-Gif nach vorne holen wollen.
Mein Problem ist, dass das Holen der Daten und Füllen des DataGridViews
in einem separaten Thread laufen müsste, damit die Animation meines
Loading-Gif ablaufen kann. Wie sollte ich hier vorgehen?


vg
Rafael
 

Lesen sie die antworten

#1 Frank Dzaebel
09/06/2009 - 20:33 | Warnen spam
Hallo Rafael,

ich habe eine .NET WinForms-Anwendung, wo ich für die Anzeige meiner
Ergebnisse aus einem SQL-Server ein DataGridView verwende. Nun kann es
u.U., je nach Netzwerkauslastung bzw. Anzahl der Treffer ein paar
Sekunden dauern, bis das DataGridView geladen ist.
Nun war meine Idee, in der Zeit, wo die Daten noch nicht gefüllt sind,
ein Loading-Gif einzublenden.



ok, folgendes als vereinfachtes Beispiel:

Eine PictureBox mit einem AnimatedGif füllen.
(z.B. ein typisches Ajax Loading Gif)
Dieses auf die TopLeftCell des DataGridView
ziehen, und rMaus-inDenVordergrund. Eine Tabelle
aus dem Datenquellenfenster in die Form ziehen.
Dann (zum Beispiel bei einer NorthWind-DB) :

private void Form1_Load(object sender, EventArgs e)
{
this.Show(); Application.DoEvents();
customersDataGridView.DataSource = null;
this.DatenLadenBeendet += new EventHandler(Form1_DatenLadenBeendet);
new Thread(new ThreadStart(DatenLaden)).Start();
}

void Form1_DatenLadenBeendet(object sender, EventArgs e)
{
pictureBox1.Visible = false;
customersDataGridView.DataSource = northwindDataSet.Customers;
}

event EventHandler DatenLadenBeendet;

void DatenLaden()
{
Thread.Sleep(3000); // nur als Beispiel für künstliche Verlàngerung
this.customersTableAdapter.Fill(this.northwindDataSet.Customers);
Invoke(DatenLadenBeendet, null, EventArgs.Empty);
}
__________

Weitere Hintergründe, Details und Links:

[Bearbeiten von Steuerelementen aus Threads]
http://dzaebel.net/ControlInvoke.htm


ciao Frank
Dipl.Inf. Frank Dzaebel [MCP/MVP C#]
http://Dzaebel.NET

Ähnliche fragen