object []作为datagridview数据源

时间:2012-01-04 02:43:28

标签: c# data-binding object orm datagridview

我的Telerik OpenAccess ORM为我映射并执行存储过程,返回一个object []数组作为结果。

现在我想将这个结果绑定到我的datagridview,它有4列设置,但我很难做到这一点。

哪种方法最好?

2 个答案:

答案 0 :(得分:2)

不幸的是,DataGridView控件(与支持Windows窗体中数据绑定的其他控件一样)无法接受object[]作为其数据源。虽然它不会引发异常,但它无法通过反射发现属性/列,因为数组中的每个项都只是object类型。您需要将数组的元素复制到强类型列表中,或者替换为非通用集合,例如ArrayList(使用不同的逻辑来发现其元素的属性)并绑定到此新集合。

答案 1 :(得分:2)

DataGridView刚绑定到对象的属性。

因此,您可以转换对象[]以使您的datagridview可以读取。

            var datasource = from p in (object[])
                             select new
                             {
                                 Column1 = p.GetType().GetProperty("property1").GetValue(p, null),
                                 Column2 = p.GetType().GetProperty("property2").GetValue(p, null),
                                 Column3 = p.GetType().GetProperty("property3").GetValue(p, null),
                                 Column4 = p.GetType().GetProperty("property4").GetValue(p, null),
                             };


            dataGridView1.DataSource = datasource;

            dataGridView1.Columns[0].DataPropertyName = "Column1";

            dataGridView1.Columns[1].DataPropertyName = "Column2";

            dataGridView1.Columns[2].DataPropertyName = "Column3";

            dataGridView1.Columns[3].DataPropertyName = "Column4";