Hallo,
in meiner Anwendung hab ich eine DataGridView, die mit einer DataTable verbunden ist.
Beim Ändern der Größe der DataTable versuche ich eine neue Tabelle zu erzeugen und dann die alten Werte der Tabelle in die neue zu kopieren
neueTabelle.Rows[k].ItemArray[l] = alteTabelle.Rows[k].ItemArray[l];
Diese nimmt jedoch die Werte nicht an. Woran kann das liegen ??
Gibt es dafür keine einfachere Lösung ??
Gruß Horst
DataTable neueTabelle = alteTabelle.Clone();
//System.Data.DataTable.Clone();
Jörg
Hallo Jörg,
wenn aber die neue Tabelle weniger oder mehr Reihen bzw. Spalten wie die alte hat, funktioniert dies doch nicht.
Ich hab schon versucht die alten Daten mit neueTabelle.Load( alteTabelle.CreateDateReader()) zu übernehmen, aber dann werden die Daten nur hinten angehängt.
Ich bräuchte aber eine neue Datatable, die die entsprechenden Werte der alten Datatable an derselben Stelle enthält.Wobei man hier noch beachten muss, ob die neue Tabelle grösser (alte Tabellewerte können komplett übernommen werden) oder kleiner (es werden eben nur die Werte übernommen, die in die neue Tabellenstruktur reinpassen) ist.
Gruß Horst
Zugriff auf einzelne Werte:
dataTable.Rows[index][spaltenIndex]
Ich hab das Problem gelöst.
Musste vor dem Verändern der Werte
neueTabelle.AcceptChanges()
setzen (dann wird der Status der Reihe auf unchanged gesetzt).
Vorher stand er auf Added (hatte die DataRow erst kur vorher erzeugt und hinzugefügt) und da blieb er auch. Deswegen hat er meine Zuweisungen nicht übernommen.
Also:
neueTabelle.AcceptChanges(); //RowState = unchanged
neueTabelle.Rows[k].ItemArray[l] = alteTabelle.Rows[k].ItemArray[l]; // RowState = Modified
und schon funktioniert es
DataRow[] rows = new DataRow[dataSet_OLD.Tables[0].Rows.Count];
dataSet_OLD_OLD.Tables[0].Rows.CopyTo(rows, 0);
foreach (DataRow row in rows)
{
dataSet_New.Tables[0].Rows.Add(row.ItemArray);
}
If you can't make it, fake it.