2010-08-04 82 views
1

我在.NET(2.0版)中使用表適配器和數據集。從表適配器填充相關數據集

我有兩個表是這樣的:

Table1 
------ 
... 
TypeId 

Table2 
------ 
Id 
Name 

其中Table1.TypeId鏈接到Table2.Id。

我強烈地使用嚮導所以現在我可以做這樣的事情產生的這些類型:

Table1Adapter adapter = new Table1Adapter(); 
Table1DataSet data = adapter.GetData(); 

foreach(Table1Row row in data) { ... } 
// Can now iterate through and display the data 

這一切工作正常。但是現在我也想要Table2的數據。我注意到在行中生成的字段Table2Row看起來很理想,但它被設置爲null。如何正確填充此數據集?

回答

1

Typed-Dataset中的每個DataTable都有自己的TableAdapter。因此,對於數據集中的每個DataTable,您必須執行相同的步驟。

沒有任何api允許您對整個類型化數據集進行自動填充,或者在支持此類型的數據集中不生成此類代碼。這樣做也很困難,因爲TableAdapter沒有可以讓你這樣做的公共基類。

如果您確實需要這樣做,您必須維護一組DataTable類型名稱和TableAdapter類型名稱,並遍歷集合以執行數據集填充。

所以我建議以'硬代碼'的方式爲每個表填充數據集。

+0

好的,以及將這些數據合併到我的父數據表中的最佳方法是什麼? – DanDan 2010-08-04 09:27:18

+0

創建每個TableAdapter的實例並填充數據集。您不會一次填充整個數據集,您必須逐個填寫。 – 2010-08-04 09:34:11

+0

所以如果我有兩個適配器和兩個數據集,我該如何執行關係?我真的想做一些像row.typerow.Name – DanDan 2010-08-04 09:40:34

0

實際上有一個名爲`MSDataShape'的Microsoft Data Provider,它提供了這個功能。上次檢查時,它被標記爲折舊,我不知道當前狀態和未來計劃是什麼,或者是什麼替代它。

這裏有一個單一的「SQL命令」,即會返回,我相信,一個DataSet有兩個很好的相關DataTable -s的例子:

SHAPE {select * from customers} 
    APPEND ({select * from orders} AS rsOrders 
      RELATE customerid TO customerid) 

潛在替代來看看是精心設計的FOR XML查詢,但我沒有玩過。

編輯: 我認爲this SO answer正是使用XML。