2 DataTables mit einander vergleichen?

rd4eva

Erfahrenes Mitglied
Selbstverständlich darfst du.

Aber frage bitte nicht ob du jemanden etwas fragen darfst sondern stell deine Frage einfach.
Du wirst schon sehen ob dir jemand antwortet.

Das hat sonst zu sehr Chat-Charakter.
 

Gotenks

Mitglied
okay sorry :///

So nun haben wir das mit den vergleichen der fehlenden ID's, jz müssen diese Datensätze mittels write XML in das datatable geschrieben werden und nach winform start mit readxml ausgelsehen werden, könntest du mir villeicht ein snippet dazu zeigen, den habe die doku gelsehen doch bei den code beispilen, komme ich nicht weiter :/

Wäre echt sehr dankbar
 

rd4eva

Erfahrenes Mitglied
Ist eigentlich ganz simpel.

Zum "speichern":
C#:
tableB.TableName = "TableB"; // TableName Eigenschaft muss gesetzt sein damit WriteXml funktioniert
            
// Entweder So (zur besseren Kontrolle über den Datei Modus
using (FileStream fs = File.Create("datatable.xml"))
	tableB.WriteXml(fs, XmlWriteMode.WriteSchema);

// Oder ganz einfach so
tableB.WriteXml("datatable.xml", XmlWriteMode.WriteSchema);

Und zum "laden"
C#:
DataTable tableC = new DataTable();
tableC.ReadXml("datatable.xml");
 

Gotenks

Mitglied
WOW^^

Danke sehr :)

aber warum benutzt du beim Read XML ein drittes DataTable = Table C ?
Kann man dort nicht schon ein bestehenten benutzen?

DANKE
 

rd4eva

Erfahrenes Mitglied
Das hat eigentlich keinen bestimmten Grund du kannst natürlich auch eine bestehende DataTable verwenden.
Du musst dir nur klar sein das alle Zeilen der XML-Datei importiert werden ohne Rücksicht auf Duplikate o.ä..

D.h. Wenn du z.B. eine DataTable mit 10 Zeilen hast, diese per WriteXML speicherst und danach per ReadXML wieder füllst hat die DataTable am Ende 20 Zeilen.
 

Gotenks

Mitglied
Ahh okay danke.

Aber bei dem Array, was du gebastelt hast, würde es nicht zu duplikaten kommen oder?
Da du ja jedes mal fehlende/neue datensätze hinzufügst und somit auch der xml write auch nur die fehlenden/neuen datensätze speichert ? // also um diese beiden probleme müssen wir uns noch nciht kümmern, habe gerade so einiges ausprobiert und alles so snagezeigt, wie ich das wollte keine doppelt datensätze etc... er überschreibt immer die xml datei und das gut ^^

Zudem siehst du ja das ich eine checkbox column habe, wei kann cih das machen, das er neu hinzugefügte datensätze direkt auswählt(selektiert)

LG

Edit:
C#:
for (int i = diff2.Length - 1; i >= 0; i--)
	temp_DT.ImportRow(diff2[i]);
wie muss ich das ändern damit er die ID von klein zu groß macht, momentan macht er groß zu klein, also beginnt mit groß...^^^^



ps.: als was arbeitest du? :D :D :D
 
Zuletzt bearbeitet:

rd4eva

Erfahrenes Mitglied
Aber bei dem Array, was du gebastelt hast, würde es nicht zu duplikaten kommen oder?
Da du ja jedes mal fehlende/neue datensätze hinzufügst und somit auch der xml write auch nur die fehlenden/neuen datensätze speichert ?
Nein da sollten keine Duplikate vorkommen, da wie gesagt nur die Zeilen zurück gegeben werden die in DataTable A aber nicht in DataTable B vorhanden sind.

Zudem siehst du ja das ich eine checkbox column habe, wei kann cih das machen, das er neu hinzugefügte datensätze direkt auswählt(selektiert)
Das kommt jetzt darauf an was du mit "neu hinzugefügte" meinst.
Grundsätzlich setzt du die Checkbox auf checked indem du die Zelle ansprichst und die Value-Eigenschaft auf true setzt.
C#:
int rowIndex = 0, cellIndex = 0;
dataGridView1.Rows[rowIndex].Cells[cellIndex].Value = true;

wie muss ich das ändern damit er die ID von klein zu groß macht, momentan macht er groß zu klein, also beginnt mit groß...
Das liegt daran das meine for-Schleife Rückwärts zählt.
Also entweder du lässt sie Vorwärts laufen
C#:
for (int i = 0; i < diff2.Length; i++)
   temp_DT.ImportRow(diff2[i]);
Oder du verwendest die Sort() Methode des DataGridView
C#:
dataGridView1.Sort(dataGridView1.Columns[1], System.ComponentModel.ListSortDirection.Ascending);

ps.: als was arbeitest du?
Falls du nach meinem Titel fragst : IT-Systemadministrator
Falls du nach meinen Aufgabengebieten fragst: Die Liste ist etwas länger ;)
 

Gotenks

Mitglied
Nein da sollten keine Duplikate vorkommen, da wie gesagt nur die Zeilen zurück gegeben werden die in DataTable A aber nicht in DataTable B vorhanden sind.

Denn ich habe mir gerade überlegt, diese LINQ anweisung, gibt ja ein Array wieder, mit den Datensätzen die in A vor kommen und nicht in B. Doch die Datensätze die vorher eingefügt worden zeigt er nicht mehr an.
Und mit der anweisung:
C#:
temp_DT.WriteXml("datatable.xml", XmlWriteMode.WriteSchema);
überschreibt er die datei die vorher gespeichert wurde und beim nächsten Programmstart zeigt er die Datensätze an die nur bei dem letzten button-klick neu hinzugefügt wurden.

Das kommt jetzt darauf an was du mit "neu hinzugefügte" meinst.
Grundsätzlich setzt du die Checkbox auf checked indem du die Zelle ansprichst und die Value-Eigenschaft auf true setzt.
ich meine damit, sobald ich auf button klicke werden ja einige Datensätze der Datatable hinzugefügt und bei über 1000 datensätzen findet man schwer die datensätze die neu sind, da wollte ich halt das er die "neuen" direkt auswählt.

LG
 
Zuletzt bearbeitet:

rd4eva

Erfahrenes Mitglied
ich meine damit, sobald ich auf button klicke werden ja einige Datensätze der Datatable hinzugefügt und bei über 1000 datensätzen findet man schwer die datensätze die neu sind, da wollte ich halt das er die "neuen" direkt auswählt.
Leider kann man einer DataGridViewCheckBoxColumn kein Default Value zuweisen.
Du könntest über das RowsAdded Event des DataGridView gehen
C#:
dataGridView1.RowsAdded += dataGridView1_RowsAdded;

void dataGridView1_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e)
        {
            for (int i = e.RowIndex; i < e.RowIndex + e.RowCount; i++)
                dataGridView1.Rows[i].Cells[0].Value = true;
        }