Autor Beitrag
CHLINDE
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Mi 24.09.08 20:11 
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
private bool DataGridFuellen(string strDatenbankPfad, string strTabellenName)
        {
            try
            {
                OleDbConnection Datenbankverbindung = DatenbankVerbindungOeffnen(strDatenbankPfad);

                OleDbCommand Befehl = new OleDbCommand();
                OleDbDataAdapter DatenAdapter = new OleDbDataAdapter(Befehl);
                DataTable Tabelle = new DataTable();

                Befehl.CommandText = "SELECT * FROM " + treeView_Tabellen.SelectedNode.Text;
                Befehl.Connection = Datenbankverbindung;
                Tabelle.Locale = System.Globalization.CultureInfo.InvariantCulture;
                DatenAdapter.Fill(Tabelle);

                dataGridView_TabellenInhalt.DataSource = Tabelle;

                Datenbankverbindung.Close();
                return true;
            }
            catch (Exception E)
            {
                MessageBox.Show("Beim Füllen des DataGrid ist ein Fehler aufgetreten: " + E.Message, "Fehler", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return false;
            }
        }


Ich fülle so ein DataGrid aus einer DataTable.
Bei großen Tabellen dauert es sehr lange, bis die Daten im Datagrid verfügbar sind. Wie kann ich die verbleibenede Zeit mithilfe eines Progressbars darstellen?
JüTho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: Do 25.09.08 09:52 
Der beste Rat lautet: vergiss es.

Zunächst müsstest Du die Anzahl der Datensätze abfragen mit SELECT COUNT(*), was eine doppelte Abfrage bedeuten würde. Dann müsste das Lesen in einen eigenen Thread bzw. BackgroundWorker ausgelagert werden, und dort müsste das Ereignis DataTable.RowChanged o.ä. mit PerformStep o.ä. verbunden werden.

Allenfalls könntest Du ProgressBarStyle.Marquee berücksichtigen. Aber das Auslagern in einen BackgroundWorker ist auf jeden Fall sinnvoll.

Gruß Jürgen