2013-05-26 220 views
2

我一直在谷歌搜索和在這裏尋找答案,但我仍然不明白一個非常基本的東西 - 如何將DataTable轉換爲Observable集合?DataTable觀察集合

這是多遠,我已經得到了:

public ObservableCollection<Test> test; 

public class Test 
{ 
    public int id_test { get; set; } 
    public string name { get; set; } 
} 

主要..

DataTable TestTable = new DataTable(); 
TestTable.Columns.Add(new DataColumn("id_test", typeof(int))); 
TestTable.Columns.Add(new DataColumn("name", typeof(string))); 
DS.Tables.Add(TestTable); 


var test = new ObservableCollection<Test>(); 
     foreach(DataRow row in test_table.Rows) 
    { 
     var obj = new Test() 
    { 
     id_test = (int)row.ItemArray[0], 
     name = (string)row.ItemArray[1] 

    }; 
     test.Add(obj); 

我更新的代碼,它似乎是工作。

回答

3

你不想創建表中的每行一個新的集合,而是一個集合整個表(與集合中的一個對象在表中一行創建):

var test = new ObservableCollection<Test>(); 
foreach(var row in TestTable.Rows) 
{ 
    var obj = new Test() 
    { 
     id_test = (int)row["id_test"]; 
     name = (string)row["name"]; 
    }; 
    test.Add(obj); 
} 
+0

哦,我的,傻我,你是對的。但是你確定上面的代碼有效嗎?有一個很大的機會,我已經錯過了一些東西,但1)它不認識「名稱」的問題 –

+0

@boo_boo_bear我試圖使用相同的列和屬性名稱,你在你的問題 - - 也許有區別代碼在你的項目和你最初發布的內容?你得到什麼確切的錯誤? – Andy

+0

謝謝你的幫助。我更新了問題中的代碼,它正在工作。我知道我不應該在評論部分提出其他問題,但我不知道如何正確地綁定它。它不會向ComboBoxColumn添加任何內容 –

0

我對接受的解決方案有點問題。它不允許var類型的[]括號。

var test = new ObservableCollection<Test>(); 
foreach(DataRow row in TestTable.Rows) 
{ 
    test.Add(new Test() 
    { 
     id_test = (int)row["id_test"], 
     name = (string)row["name"], 
    }); 
}