Ich habe ein Datagrid, das alle 3 Sekunden aktualisiert und während der Aktualisierung geschieht Datatable wird jedes Mal unerwartet zurückgesetzt. Was ich tue, ist das Hinzufügen von Werten von einer Datentabelle zu einer anderen.Datatable wird unerwartet zurückgesetzt
Wenn jedoch 'DefaultView.ToTable' verwendet wird, werden die Daten gespeichert.
Grundsätzlich habe ich 2 Databases dtTopSQL und dtCurTopSQL.
dtTopSQL neue Daten erhalten und zu der Datentabelle dtCurTopSQL hinzufügen und ich möchte die Zeilen in dtCurTopSQL speichern;
// Initial Load the Datatable Structure
private void Main_Load(object sender, EventArgs e)
{
dtTopSQL.Columns.Add("SQL_ID", typeof(string));
dtTopSQL.Columns.Add("Count", typeof(Int16));
dtTopSQL.Columns.Add("CurTime", typeof(DateTime));
}
// Timer start refreshing the datagrid
private void timer_TimerTopSQL(object sender, EventArgs e)
{
dtTopSQL.Clear(); // Clear before the Fill
odaTopSQL = new OracleDataAdapter(getTopSQLString, oradb);
odaTopSQL.Fill(dtTopSQL);
getTopSQL();
}
// Merging datatable starts here.
public void getTopSQL()
{
for (int i = 0; i < dtTopSQL.Rows.Count; i++)
{
bool isDupe = false;
for (j = 0; j < dtCurTopSQL.Rows.Count; j++)
{
if (dtTopSQL.Rows[i][0].ToString() == dtCurTopSQL.Rows[j][0].ToString())
{
dtCurTopSQL.Rows[j][1] = int.Parse(dtCurTopSQL.Rows[j][1].ToString()) + int.Parse(dtTopSQL.Rows[i][1].ToString());
dtCurTopSQL.Rows[j][2] = CurDate;
isDupe = true;
break;
}
}
if (!isDupe)
{
dtCurTopSQL.ImportRow(dtTopSQL.Rows[i]);
dtCurTopSQL.Rows[j][2] = CurDate;
}
}
ugTopSQL.DataSource = dtCurTopSQL; // Bind the merged Datatable.
}
obige Code funktioniert, wenn ich unten verwenden, bevor nur die Datenbindung;
dtCurTopSQL = dtCurTopSQL.DefaultView.ToTable();
Allerdings verstehe ich nicht warum? Ich möchte Daten speichern, ohne DefaultView.ToTable zu verwenden
Könnten Sie bitte erklären?
Danke für die Antwort. Es hat jedoch nicht funktioniert. –