2012-04-06 66 views
0

我有兩個表:A和B.C#JOIN和DataSet:它將如何工作?

表A

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

表B

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

當我從數據庫中獲取信息,我填充數據集。但是,我在A.Number = B.Name上使用JOIN。這樣造成:

結果

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

我有顯示結果一個DataGridView,但只有標識名稱列。

有一件事困擾我。我想改變結果請將.Name值在DataGridView,但我想表格中的給各一個。數值更新爲請將.Name值。 表A不具有名稱列。

所以我想這樣的事情:

表A前:

 
Id | Number 
1 | 2 

2至符合 'X' 名稱值。

變化在DataGridView爲 'Y' 的相符,以 '5' 名稱 ...

表A後

 
Id | Number 
1 | 5 
+0

從關係數據庫設計的角度來看,這樣的行爲沒有意義。這裏要解決的是你的數據庫設計,而不是代碼。 – 2012-04-06 08:24:32

+0

你爲什麼這麼認爲?比如說,我有一個包含城市居民(Id,姓氏,城市)的表格和一個包含城市(Id,Name)的表格。所以JOIN看起來像Residents.City = Cities.Id。很常見的設計,糾正我,如果我錯了。 – Technical 2012-04-06 09:13:59

+0

你是對的,但你的處理方法是笨拙的:)。由於我的評論很大,我發佈了它作爲答案。 – 2012-04-06 09:30:31

回答

0

不要使用加入。

您希望將表A作爲主體顯示爲Number的查找列。

你需要有Expression property上的一個

+0

尚未挖掘關係,謝謝你的建議。 – Technical 2012-04-06 09:30:27

0

A和B以及DataColumn的之間的關係,我認爲Id是兩個表中的一個PK。通過更改B表中的'X'的名稱,可以更改NameId = 2相關聯的值。如果要在表A中更改Id = 1的關聯值,則需要將其值Number更改爲5,而不是Name本身。

那你問居然是這樣的:「我想,如果它在表B存在Number自動更改爲其他一些基於一個名稱(這是不是唯一的)」。這對我來說很荒唐。例如,什麼是價值被更改爲不在列表中的項目?

你需要的是某種表A列表與DropDown爲Number填充表B值。然後用戶將從預定義列表中選擇值,然後使用正確的Id更新表A

+0

是的,我使用下拉菜單。我有「賬戶」表和「公司」。關係是Account.Company = Companies.Id。在DataGridView中,「帳戶」的「公司」列是下拉列表,填入「公司」表中的名稱。 – Technical 2012-04-06 09:37:40

+0

然後我不明白這似乎是一個問題。發佈導致困難的代碼部分。 – 2012-04-06 15:11:22

+0

問題是它不會用相應的值更新數據庫。我設置了適當的ValueMember和DisplayMember。我在DropDown中更改了值,但數據庫保持不變。沒有代碼,它全部封裝在DataSet中。 – Technical 2012-04-06 16:21:29

0

我會將Result.Name列更改爲DataGridViewComboBoxColumn,然後將表B連接到它,並在將它發送回數據庫存儲之前引用組合的值客戶端。

這裏是other columns typesDataGridView

  • DataGridViewTextBoxColumn
  • DataGridViewCheckBoxColumn
  • DataGridViewImageColumn
  • DataGridViewButtonColumn
  • DataGridViewLinkColumn
  • 自定義:繼承自DataGridViewColumn
+0

謝謝,我已經使用DataGridViewComboBoxColumn從表B中獲取數據。唯一困擾我的是如果我更改該下拉值,將要保存到數據庫的是什麼?表B值或文字DataGridViewComboBoxColumn.Value? – Technical 2012-04-06 09:44:08

+0

如果你已經正確地完成了綁定,表B的值應該是'DataGridViewComboBoxColumn.Value'。 – 2012-04-06 10:03:47

+0

因此,我將A列設置爲DisplayMember = B.Name和ValueMember = B.Id.這是你的意思嗎? – Technical 2012-04-06 10:07:46