2013-05-26 2 views
2

Я искал ответы на запросы здесь, но я до сих пор не понимаю очень простой вещи - Как преобразовать DataTable в Observable Collection?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"], 
    }); 
} 
Смежные вопросы