| 

.NET C# Java Javascript Exception

2
Hallo zusammen,
irgendwie scheine ich wohl mittlerweile auf'n Schlauch zu stehen (hoffentlich bekomme ich jetzt noch die Frage richtig gestellt...).

Problem:
Ich habe eine Haupttabelle mit einer Schlüsselspalte (ist aber im Code nicht als Primary Key definiert - kann aber als solcher angesehen werden).
Diese Haupttabelle soll jeweils um weitere Tabellen erweitert werden (also eigentlich sollen Spalten aus den anderen Tabellen "einfach" nur drangehängt werden), wobei die anderen Tabellen nur die Schlüsselspalte besitzen.
Gibt es einen "einfachen" Weg die Haupttabelle zu erweitern. Die Methoden Merge und/oder Union liefern mir hierbei nicht das gewünschte Ergebnis - oder ich habe es nicht korrekt hinbekommen.
Ist das überhaupt möglich, dass ich Spalten an einer bestehenden Tabelle anhängen kann?

Kleines Beispiel:
Spalten Haupttabelle: Spalte A | Spalte B | Schlüsselspalte
Spalte Tabelle Alpha: Wert A | Wert B | Schlüsselspalte
-> Hokus Pokus <-
=> Haupttabelle (erweitert): Spalte A | Spalte B | Schlüsselspalte | Wert A | Wert B
(sollte es keine Werte zur Schlüsselspalte geben wird ein Default-Wert verwendet).


Hoffe die Frage ist klar, ansonsten einfach nochmal nachfragen.
PS: Bitte keine Gegenfragen stellen von wegen, warum wurde es nicht so oder so gemacht... das ist der IST-Zustand, den ich nicht ändern kann - bitte habt dafür Verständnis :)
23.10.2012
tigerentchen 92 1 5
2 Antworten
2
Also ich befürchte, dass es hier keine einfache Hokus Pokus Methode gibt.
Allerdings ist es auch nicht sonderlich schwierig den DataTable zu erweitern.
Du kannst einfach mit Columns.Add die nötigen Spalten zu der Haupttabelle hinzufügen und dann alle Zeilen aktualisieren.
Hier mal ein Beispiel:
DataTable loTable1 = new DataTable();
DataTable loTable2 = new DataTable();
DataTable loResultTable = new DataTable();
DataRow loNewRow;

loTable1.Columns.Add("Spalte A", typeof(string));
loTable1.Columns.Add("Spalte B", typeof(string));
loTable1.Columns.Add("Schlüsselspalte", typeof(int));

loTable2.Columns.Add("Wert A", typeof(string));
loTable2.Columns.Add("Wert B", typeof(string));
loTable2.Columns.Add("Schlüsselspalte", typeof(int));

for (int i = 0; i < 6; i++)
{
loNewRow = loTable1.NewRow();
loNewRow["Spalte A"] = "Spalte A " + i.ToString();
loNewRow["Spalte B"] = "Spalte B " + i.ToString();
loNewRow["Schlüsselspalte"] = i;
loTable1.Rows.Add(loNewRow);
}

for (int i = 0; i < 5; i++)
{
loNewRow = loTable2.NewRow();
loNewRow["Wert A"] = "Wert A " + i.ToString();
loNewRow["Wert B"] = "Wert B " + i.ToString();
loNewRow["Schlüsselspalte"] = i;
loTable2.Rows.Add(loNewRow);
}

foreach (var loColum in loTable2.Columns.Cast<DataColumn>().Where(item => item.ColumnName != "Schlüsselspalte"))
loTable1.Columns.Add(loColum.ColumnName, loColum.DataType);

foreach (DataRow loRowTable2 in loTable2.Rows)
{
foreach (DataRow loRowTable1 in loTable1.Select("[Schlüsselspalte] = {0}".FormatWith(loRowTable2["Schlüsselspalte"])))
{
foreach (DataColumn loColumn in loTable2.Columns)
loRowTable1[loColumn.ColumnName] = loRowTable2[loColumn];
}
}


Das sollte helfen.
24.10.2012
PinBack 687 1 8
PinBack 687 1 8
PinBack... vielen Dank! Genau das, was ich gesucht habe! Sehr rafiniert wie du die Spalten aus den anderen Tabellen hinzufügst und dann über die Schachtelung die einzelnen Zeilen!
Vielen DANK -> Hier haben wir doch nun die "Hokus Pokus" Methode :-P
tigerentchen 25.10.2012
0
Du musst nur vorher die Spalten gleich benennen,

For i as Integer = 0 to DataTable1.Columns.Count - 1
DataTable2.Columns(i).ColumnName = DataTable1.Columns(i).ColumnName
Next

denn funktioniert auch:

DataTable1.Merge(DataTable2)

//Oder

For Each row As DataRow In DataTable2.Rows
DataTable1.ImportRow(row)
Next
08.11.2012
DerPunk 1,2k 1 7
Hi,ja wäre grundsätzlich erstmal korrekt nur ist bei mir das 2. DataTable - außer einer Spalte (Schlüsselspalte) - komplett verschieden.
Beispiel (frei erfunden):
DataTable 1: ID | Verkäufer | Verkaufszahlen
DataTable 2: ID | Herkunft
-> >Verbinden<
-> DataTable 1: ID | Verkäufer | Verkaufszahlen | Herkunft
-> Ob ich das zusammengefügte DataTable nochmal erweitern muss, kann man nicht immer vorhersehen...

Somit fällt der Ansatz, alle Spalten gleichzubenennen, raus
tigerentchen 08.11.2012

Stelle deine .net-Frage jetzt!
TOP TECHNOLOGIES CONSULTING GmbH