2012-04-06 7 views
0

Ich habe zwei Tabellen: A und B.C# JOIN und DataSet: Wie wird es funktionieren?

Tabelle A:

 
Id | Number 
1 | 2 
2 | 5 
3 | 1 

Tabelle B:

 
Id | Name 
2 | X 
5 | Y 
1 | Z 

Wenn ich Informationen aus der Datenbank zu erhalten, ich bevölkern Datensatz Ich verwende jedoch JOIN für A.Number = B.Name. So ergibt:

Ergebnis:

 
Id | Number | Name 
1 | 2  | X 
2 | 5  | Y 
3 | 1  | Z 

Ich habe eine Datagridview, das zeigt das Ergebnis, aber nur Id und Namen Spalten.

Eine Sache stört mich. Ich möchte Ergebnis .Name Wert im Datagridview ändern, aber ich will Tabelle A mit entsprechenden A .Anzahl Wert für die B .Name Wert aktualisiert werden. Tabelle A hat keine Name Spalte.

Deshalb möchte ich Dinge wie diese bekommen:

Tabelle A vor:

 
Id | Number 
1 | 2 

Anzahl 2 Akkorden auf 'X' Namen Wert.

ändern Namen in der Datagridview für 'Y', die '5' Anzahl entspricht ...

Tabelle A nach:

 
Id | Number 
1 | 5 
+0

Von einem relationalen Datenbankentwurfspunkt macht solches Verhalten keinen Sinn. Die Sache, die Sie hier beheben müssen, ist Ihr Datenbankentwurf, nicht der Code. –

+0

Warum denkst du das? Sagen wir, ich habe eine Tabelle, die Stadtbewohner (Id, Nachname, Stadt) und eine Tabelle mit Städten (Id, Name) enthält. Und so würde JOIN wie Residents.City = Cities.Id aussehen. Ziemlich allgemeines Design, korrigiere mich, wenn ich falsch liege. – Technical

+0

Sie sind richtig, aber Ihre Herangehensweise, um es zu handhaben ist wenig ungeschickt :). Da mein Kommentar zu groß war, habe ich ihn als Antwort gepostet. –

Antwort

0

kein Mitglied werden Verwenden Sie .

Sie möchten Tabelle A als Prinzipal mit einer Nachschlagespalte für Nummer anzeigen.

Sie erhalten eine Beziehung zwischen A und B benötigen und einem Datacolumn mit einem Expression property auf A

+0

Noch nicht in Beziehungen gegraben, danke für den Rat. – Technical

0

Ich gehe davon aus Id eine PK in beiden Tabellen. Indem Sie den Namen von 'X' in der Tabelle B ändern, ändern Sie den Wert Name, der mit Id = 2 verknüpft ist. Wenn Sie den zugehörigen Wert Id = 1 in der Tabelle A ändern möchten, müssen Sie den Wert Number auf 5 ändern, nicht auf Name.

Das Sie fragen ist eigentlich so etwas wie: "Ich möchte Number automatisch auf einige andere basierend auf einem Namen ändern (was nicht eindeutig ist), wenn es in der Tabelle B existiert". Thich ist ziemlich absurd für mich. Zum Beispiel, was ist der Wert wurde geändert, um den Artikel nicht in der Liste?

Das ist eine Art Tabelle A Liste mit einem DropDown für Number gefüllt mit Werten aus Tabelle B. Dann wählen die Benutzer den Wert aus der vordefinierten Liste und Sie aktualisieren die Tabelle A mit der korrekten Id.

+0

Ja, ich benutze Dropdown. Ich habe "Konten" Tabelle und "Firmen". Beziehung ist Account.Company = Companies.Id. In der DataGridView-Spalte "Firma" für die Dropdown-Liste "Konten" ist die Bezeichnung "Unternehmen" enthalten. – Technical

+0

Dann verstehe ich das nicht, scheint ein Problem zu sein. Veröffentlichen Sie den Codeteil, der Schwierigkeiten verursacht. –

+0

Das Problem ist, dass die Datenbank nicht mit dem entsprechenden Wert aktualisiert wird. Ich habe das richtige ValueMember und DisplayMember eingestellt. Ich ändere den Wert in DropDown, aber die Datenbank bleibt unverändert. Es gibt keinen Code, alles ist in DataSet gekapselt. – Technical

0

würde ich die Result.Name Spalt zu einer DataGridViewComboBoxColumn, Tabelle B ändern, um es Draht-up, und der Referenz-Wert-Client-Seite des Kombinations, bevor es zurück an die DB zur Speicherung sendet.

Hier sind die other columns types für DataGridView

  • DataGridViewTextBoxColumn
  • DataGridViewCheckBoxColumn
  • DataGridViewImageColumn
  • DataGridViewButtonColumn
  • DataGridViewLinkColumn
  • Gewohnheit: erben von DataGridViewColumn
+0

Danke, ich benutze bereits DataGridViewComboBoxColumn, die Daten aus Tabelle B nimmt. Die einzige Sache, die mich stört ist, wenn ich diesen Dropdown-Wert ändern, was wird in der Datenbank gespeichert werden? Tabelle B Werte oder Literal DataGridViewComboBoxColumn.Value? – Technical

+0

Wenn Sie die Bindung korrekt durchgeführt haben, sollten Tabelle B-Werte "DataGridViewComboBoxColumn.Value" sein. –

+0

Also habe ich die Spalte von A gesetzt, um DisplayMember = B.Name und ValueMember = B.Id. Ist es das, was du meinst? – Technical