使用Datatable创建ExpandoObject

Nar*_*ren 1 c# reflection properties dynamic

我是C#的新手,在Stackoverflow.com上经历了很多问题,并没有找到符合我要求的解决方案.所以最后在这里张贴.

我的要求是从数据表列名创建动态属性,并将值设置为数据表中的动态属性.最后将数据绑定到gridview.

所以我决定按照以下步骤来实现这个功能(如果我错了,请纠正我)

我的数据表包含26行和10列数据

  1. 创建一个A类
  2. 从数据表(列名称)向A添加动态属性
  3. 将值设置为A的属性
  4. 将A类列入A列表
  5. 将A列表绑定到GridView

我已经完成了以下步骤

1.

[Serializable]
public class A
{   
  public A() 
  {   
  }  
}
Run Code Online (Sandbox Code Playgroud)

2和3.

DataTable dt = getData();

dynamic expando = new ExpandoObject();

foreach (DataRow row in dt.Rows)
{
   foreach (DataColumn col in dt.Columns)
   {
     var expandoDict = expando as IDictionary<String, Object>;

     if (expandoDict.ContainsKey(col.ToString()))
       expandoDict[col.ToString()] = row[col.ColumnName].ToString();
     else
       expandoDict.Add(col.ToString(), row[col.ColumnName].ToString());
   }
}
Run Code Online (Sandbox Code Playgroud)

执行上面的for循环后,"expando"对象只包含最后一行数据表.

你能帮我解决一下如何修复第2步到第5步的问题.

use*_*444 6

据我所知,这段代码可能更符合您的要求.这应该将数据放入expandoList中.然后,您需要处理与GridView的绑定.

DataTable dt = getData();

List<dynamic> expandoList = new List<dynamic>();

foreach (DataRow row in dt.Rows)
{
    //create a new ExpandoObject() at each row
    var expandoDict = new ExpandoObject() as IDictionary<String, Object>;
    foreach (DataColumn col in dt.Columns)
    {
        //put every column of this row into the new dictionary
        expandoDict.Add(col.ToString(), row[col.ColumnName].ToString());
    }

    //add this "row" to the list
    expandoList.Add(expandoDict);
}
Run Code Online (Sandbox Code Playgroud)