Ich habe eine DataRow und einen DatTable.
Bevor ich die DataRow dem DataTable hinzufüge, will ich noch Werte für die Spalte ID ergänzen.
Ich habs jetzt so gelöst:
DataRow selectedContactRow
DataTable Kontakt_auswahl
string key = DB.GetTableKey("Kontakt");
Console.WriteLine(key);
testlist = selectedContactRow.ItemArray.ToList();
testlist.Add(key);
Console.WriteLine("Spalten {0} ", Kontakt_auswahl.Columns.Count);
Kontakt_auswahl.Rows.Add(testlist.ToArray());
Das funktioniert so auch, nur ich bin am überlegen ob das nicht vielleicht einfacher geht.
Gibt es da ne bessere Lösung als erst inne Liste zu kopieren und dann wieder in ein Array umzuwandeln?
Wäre super, wenn da jemand nen Tipp hat...
Gruß
Siedlerchr
Du solltest den ganzen Ansatz mal überdenken.
Dein Ansatz mit den ID's scheint mir aus vb3 Zeiten zu kommen ( da haben es viele so gemacht).
Was soll das denn wirklich werden?
Es gibt da evtl nen viel besseren Ansatz.
Also ich habe keine Möglichkeit gefunden das anders umzusetzen:
Das Problem ist folgendes: Ich habe eine DataGridViewSelectedRowCollection die ich mit foreach Schleifen auslese und dem DataTable adde:
foreach (DataGridViewRow selectedContacts in selectedRows)
{
string KontaktID = DB.GetTableKey("Kontakt");
Console.WriteLine(KontaktID);
DataRowView drv = (DataRowView)selectedContacts.DataBoundItem;
FillContact(drv.Row, KontaktID);
Und FillContact:
private void FillContact(DataRow selectedContactRow, string key )
{
Console.WriteLine(key);
testlist = selectedContactRow.ItemArray.ToList();
testlist.Add(key);
Console.WriteLine("Spalten {0} ", Kontakt_auswahl.Columns.Count);
Kontakt_auswahl.Rows.Add(testlist.ToArray());
}
Eine andere Möglichkeit die ich erst gesehen habe war diese:
DataRow dr = selectedContactRow;
Kontakt_auswahl.ImportRow(selectedContactRow);
dr["Kontakt_ID"] = key;
Nur hierbei ist das Problem das in der Collection keine Spalte ID vorhanden ist, denn die stammt ursprünglich aus einem DataGridView.
Nur hierbei ist das Problem das in der Collection keine Spalte ID vorhanden ist, denn die stammt ursprünglich aus einem DataGridView.
Wenn das wirklich so ist, dann hast du womöglich einen Grundsatz von .NET nicht verstanden: (Trenne Daten und Anzeige!
Wenn du Daten per Code bearbeiten willst, dann solltest du immer eine Datenmenge bearbeiten. Beim DataGridView steckt oft (nicht immer, nicht unbedingt) eine DataTable dahinter. Bearbeite diese, dann verschwinden eine Menge Probleme im Nirwana. Lediglich das Umwandeln von DataGridViewRow (nämlich aus den SelectedRows) nach DataRow sieht wegen mehrfacher Konvertierungen etwas umständlicher aus.
Wenn du in einer Datenzeile eine ID brauchst, dann benutze sie doch. Ob sie im DGV angezeigt wird oder nicht, ist (siehe oben) nebensächlich.
Jürgen
Danke für den Hinweis, der hat mir als Gedankenanstoß geholfen:
Ich adde schon dem ersten DataTable der die Grundlage des DGV ist eine Spalte "Kontakt_ID" hinzu.
Mir ist dann klar geworden, dass ich es damit relativ einfach umsetzen kann...
DataRow selectedContactRow
string key
selectedContactRow["Kontakt_ID"] = key;
Kontakt_auswahl.ImportRow(selectedContactRow);
Wenn das wirklich so ist, dann hast du womöglich einen Grundsatz von .NET nicht verstanden: Trenne Daten und Anzeige!
So hab ich das auch eigentlich gestaltet, das eionzige was das so ein bisschen durcheinander bringt ist die Sache, dass ich nicht anders an die SelectedRows drankomme bzw die gescheit weiterverarbeiten kann als über den Umweg in DataRow