c# - 使用数据表创建 ExpandoObject

标签 c# dynamic reflection properties

我是 C# 的新手,在 Stackoverflow.com 上遇到了很多问题,但没有找到满足我要求的解决方案。所以最后在这里发帖。

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

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

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

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

我已经完成了以下步骤

1.

[Serializable]
public class A
{   
  public A() 
  {   
  }  
}

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

执行上述for循环后,“expando”对象只包含数据表的最后一行。

你能帮我解决第 2 步到第 5 步吗?

最佳答案

据我了解,这段代码可能更符合您的需求。这应该为您将数据放入 expandoList 中。然后,您需要处理与 GridView 的绑定(bind)。

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

关于c# - 使用数据表创建 ExpandoObject,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45200579/

相关文章:

c - 哪个是解决这个算法难题的好算法?

python - 如何列出模块中的所有功能?

c# - 如何使 C# Create.Delegate 支持继承?

c# - 从 Azure Blob 存储和 ASP.NET Core 3 流式传输视频

c# - OSX 上的 Mono WCF 问题

c# - 在 ulong 和 long 变量之间强制添加

c# - Entity Framework 4 - 删除对象

javascript - React JS 动态数据获取

python - 在 Python 中使用 eval?

Javassist - 将标志传递给编译器