Autor Beitrag
Talemantros
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 444
Erhaltene Danke: 2

Win7 Proff 64bit
C# (VS2013)
BeitragVerfasst: Do 30.04.15 11:41 
Hi,
es tut mir leid, dass ich atm wieder so viel habe.

Ich habe eine DataGridView mit möglichen Daten und über einen Button, sollen die Werte in ein anderes DataGridview geschrieben werden, welches dann als Auswahl später an eine Methode übergeben werden soll.

Nun Darf in der DataGridview kein Wert doppelt sein.
Beide DataGridViews werden über eine BindingSource gefüllt und die erste Spalte ist eine eindeutige ID.

Wie kann ich den nun sicherstellen, dass das 2te DataGridView kein doppelten wert enthält.

Ich hatte es mal so probiert beim Hinzufügen
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
            foreach (DataGridViewRow row in dgvUebersicht.SelectedRows)
            {
                oktId = (long)((DataRowView)bsUebersicht.Current).Row[0];
                if (bsRechnung.Find("oktabinergrundid", oktId) != 0)
                {
                    dt.ImportRow((row.DataBoundItem as DataRowView).Row);                    
                }
            }


Aber dies funktioniert nicht richtig, da der erste Eintrag ja Index 0 hat.

Danke

Gruß
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Do 30.04.15 11:49 
Da sind wir wieder bei Trennung von Aufgaben ;) Das es ein DataGridView ist sollte herzlich egal sein.

Die Datenmenge hinter dem DataGridView ist das auch eine DataTable? Und wenn ja hat die das gleiche Schema?
Dann kannst du die DataTables einfach mergen. Rows mit einem PK der schon in der DataTable ist werden dabei ausgelassen(sonst wäre das ja eine Constraint Verletzung).
Talemantros Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 444
Erhaltene Danke: 2

Win7 Proff 64bit
C# (VS2013)
BeitragVerfasst: Do 30.04.15 13:27 
Ah Ok :-(
Das wird wohl das nächste große Projekt.
Ich hatte bisher immer die UI und dahinter die LOGIK, die dann über eine Klasse Datenbankabfragen geliefert hat.
Wenn ich das so grob richtig verstehe (auch wenn ich mir noch nicht vorstellen kann wie es geht) wäre dies dann "falsch".
Muss dann nur irgendwie mal verstehen, was in der UI eigentlich noch drin sein darf. Schaue mir da mal den Link aus dem anderen Post heute Abend an.

Ja, die Datenmenge hinter dem DGV ist ein DataTable und in diesem Beispiel wäre das Schema gleich.
Ich schaue mir das mit dem mergen mal an. Bin gespannt.

Und dann werde ich mir wohl viel zu den Schichten durchlesen.
Für dieses Projekt würde ich vermutlich jetzt nicht alles nachbessern, aber dann "besser" weiter machen.

Gruß
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Do 30.04.15 13:42 
Zitat:
Wenn ich das so grob richtig verstehe (auch wenn ich mir noch nicht vorstellen kann wie es geht) wäre dies dann "falsch".


In einer schwarz-weiß Welt würde ich sagen es ist falsch. Um es etwas abgeschwächter auszudrücken es ist weit weniger gut.

Zitat:
Muss dann nur irgendwie mal verstehen, was in der UI eigentlich noch drin sein darf


Daten entgegennehmen in anzeigbare Elemente füllen und umgekehrt. Formatieren der Daten ist erstmal (es gibt natürlich noch mehr Muster die man berücksichtigen könnte ;) ) auch ok.
Wenn deine UI eine Aktion ausführt z.B; einen Button Klick ausführt sollte der EventHandler auf der Form nur die Daten die zur Bearbeitung der Aktion nötig sind sammeln und an einer Methode einer tieferliegenden Schicht weitergeben und denn Return dieser Schicht wieder anzeigen.
Talemantros Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 444
Erhaltene Danke: 2

Win7 Proff 64bit
C# (VS2013)
BeitragVerfasst: Fr 01.05.15 10:54 
Guten Morgen,
danke schon mal für die Antwort.
Schaue mir jetzt mal an, ob das mit dem Mergen für mich funktioniert bzw. ich es umsetzen kann.

Gruß
Daniel

EDIT:
Also glaube dies ist nicht das was ich gesucht habe. So kann ichzwar 2 DataTables zusammen führen, aber ich will ja nur die selektierten Rows aus dem einen Datatable dem anderen zufügen und dies ohne doppelte Werte.

Ich versuche noch mal zu suchen. Wenn jemand noch eine Idee hat nehme ich die gern entgegen
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Fr 01.05.15 12:45 
Zitat:
Also glaube dies ist nicht das was ich gesucht habe. So kann ichzwar 2 DataTables zusammen führen, aber ich will ja nur die selektierten Rows aus dem einen Datatable dem anderen zufügen und dies ohne doppelte Werte.


Und das bedeutet doch einfach das deine selektierten Rows in eine DataTable gehören. Diese DataTable kannst du dann mit dem Ziel mergen.
Talemantros Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 444
Erhaltene Danke: 2

Win7 Proff 64bit
C# (VS2013)
BeitragVerfasst: Fr 01.05.15 13:51 
Manchmal könnte ich echt verzweifeln an so "kleinem" Mist.

Hatte da nicht drüber nachgedacht.
Habe es nun umgebaut aber es läuft leider noch nicht.

ausblenden C#-Quelltext
1:
2:
3:
4:
            foreach (DataGridViewRow row in dgvUebersicht.SelectedRows)
                dt.ImportRow((row.DataBoundItem as DataRowView).Row);

            dtRechnung.Merge(dt);


Er führt trotzdem in der Rechnung noch doppelte auf obwohl es eine ID gibt, die eindeutig ist.
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Fr 01.05.15 14:41 
Dann ist vielleicht die PrimaryKey Info nicht vorhanden. DataTable hat eine PrimaryKey Property die du mal kontrollieren solltest beim debuggen. Und im Zweifel wenn da was falsches oder nichts drin steht passend setzen.
Talemantros Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 444
Erhaltene Danke: 2

Win7 Proff 64bit
C# (VS2013)
BeitragVerfasst: Fr 01.05.15 15:30 
Ich mag nicht mehr :-(
Jetzt hatte ich das mit dem Key eingebaut und dann waren die eingefügten Zeilen leer.

Habe es wieder zurück gebastelt und die Zeilen bleiben leer.

Kein Plan was ich da wieder gemacht habe und Frustration macht sich breit :-(

EDIT:
Gut den Fehler, dass die Zeilen leer sind, habe ich nunwieder im Griff und bin wieder bei dem PrimaryKey

dtRechnung ist hierbei das empfangene DataTable welches keine doppelten beinhalten darf

ausblenden C#-Quelltext
1:
2:
3:
            dtRechnung = (bsUebersicht.DataSource as DataTable).Clone();
            DataColumn[] column = new DataColumn[0];
            dtRechnung.PrimaryKey = column;


Trotzdem fügt er sie hinzu.

EDIT2:

Ich habe es und höre nun auf für heute :-(

ausblenden C#-Quelltext
1:
2:
            dtRechnung = (bsUebersicht.DataSource as DataTable).Clone();
            dtRechnung.PrimaryKey = new DataColumn[] { dtRechnung.Columns["oktabinergrundid"] };
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Fr 01.05.15 16:13 
Zitat:
Ich habe es und höre nun auf für heute :-(


Warum ein langes Gesicht ist doch gut wenn man den Tag mit einem Erfolg abschließt 8)
Talemantros Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 444
Erhaltene Danke: 2

Win7 Proff 64bit
C# (VS2013)
BeitragVerfasst: Fr 01.05.15 16:40 
Stimmt schon :-)
Wieder was dazu gelernt.

Ist halt nur viel Input momentan. Neue Arbeitsstelle. Dies hier nebenbei ohne dass es mir was bringt, außer was zu lernen.
HAbe mir vllt etwas viel vorgenommen, aber wenn ich es mal angefangen habe mache ich es auch zu Ende.

Und an so Tagen wo gefühlt nichts geht, kann es schon mal nerven mit dem Kleinkram :-)

Morgen versuche ich mich dann an der Neuberechnung des Gesamtpreises nach Eingabe des Einzelpreises.

Vielen Dank auf jeden Fall für eure Zeit, die ihr opfert um Leuten wie mir zu helfen und Wissen weiter zu geben.
Ist echt nicht selbst verständlich.

VG