DataTable 到可观察的集合

Posted

技术标签:

【中文标题】DataTable 到可观察的集合【英文标题】:DataTable to observable collection 【发布时间】:2013-05-21 12:13:03 【问题描述】:

我一直在谷歌上搜索并在这里寻找答案,但我仍然无法理解一个非常基本的东西 - 如何将 DataTable 转换为 Observable Collection?

这是我已经走了多远:

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);

我更新了代码,它似乎可以工作了。

【问题讨论】:

【参考方案1】:

您不想为表中的每一行创建一个新集合,而是为整个表创建一个集合(集合中的一个对象为表中的一行创建):

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);

【讨论】:

哦,我的傻瓜,你是对的。但是你确定上面的代码有效吗?我很有可能错过了一些东西,但是 1)它不能识别“名字”的问题 @boo_boo_bear 我尝试使用与您在问题中所做的相同的列和属性名称 - 也许您的项目中的代码与您最初发布的代码之间存在差异?你得到了什么确切的错误? 感谢您的帮助。我更新了问题中的代码,它正在工作。我知道我不应该在评论部分问其他问题,但我不知道如何正确绑定它。它不会向 ComboBoxColumn 中添加任何内容 @boo_boo_bear yw :) 如果遇到其他问题,您可以随时提出其他问题。 new Test()中第一个变量赋值后的分号必须是逗号,第二个变量赋值后的分号需要去掉。【参考方案2】:

我对接受的解决方案有一点疑问。它不允许在类型 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"],
     );
 

【讨论】:

去掉新Test声明中最后一个变量赋值后的逗号。

以上是关于DataTable 到可观察的集合的主要内容,如果未能解决你的问题,请参考以下文章

将更改发布到可观察对象的集合

将图像从隔离存储加载到可观察集合不起作用

刷新 WPF Datagrid 未绑定到可观察集合?

在 Xamarin c# 中滚动到可观察集合中的选定项目

对DataTable进行分组

如何在一个可观察的查找和移动项目到集合的顶部