Laden...

DataRow nachträglich Spalte hinzufügen - Saubere Lösung?

Erstellt von Siedlerchr vor 13 Jahren Letzter Beitrag vor 13 Jahren 2.349 Views
S
Siedlerchr Themenstarter:in
178 Beiträge seit 2009
vor 13 Jahren
DataRow nachträglich Spalte hinzufügen - Saubere Lösung?

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

F
10.010 Beiträge seit 2004
vor 13 Jahren

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.

S
Siedlerchr Themenstarter:in
178 Beiträge seit 2009
vor 13 Jahren

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.

J
3.331 Beiträge seit 2006
vor 13 Jahren

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

S
Siedlerchr Themenstarter:in
178 Beiträge seit 2009
vor 13 Jahren

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