【问题标题】:dynamically specifying DataTable columns动态指定 DataTable 列
【发布时间】:2016-12-17 21:08:36
【问题描述】:

我有一个object[,] myObj。我也有string[] fieldTypes。我想将对象数组中的数据放入 DataTable。

我希望 DataTable 列的类型正确,即stringdatetimedouble 等。这就是 fieldTypes 数组的用武之地。

让我从一个基本的例子开始:

myObj 有 n 行和 3 列。 fieldTypes 将是一个长度为 3 的数组(即与 myObj 相同的列数)

让我们说我的

 fieldTypes = {'string', 'DateTime', 'double' }

有没有办法使用fieldTypes 设置我的DataTable 以拥有正确的列?

类似下面的东西(我知道我在下面写的不正确)

DateTable dt = new DataTable();
for(int i=0; i < fieldTypes.Length; i++)
{
   dt.Columns.Add(myColName, typeof(fieldTypes[i]));
}

然后我需要将值转换为myObj,以便将它们添加到我的DataTable。这可能吗?

【问题讨论】:

    标签: c# .net datatable casting


    【解决方案1】:

    您需要指定列名和类型。考虑到您已经将类型名称映射到类型。

    我会使用列规范类,例如:

    class ColSpec
    {
        public Type Type { get; set; }
        public string Name { get; set; }
    }
    

    锯齿状数组而不是多维数组,让您更轻松地添加行,无需强制转换。

    var colspecs = new ColSpec[] { 
        new ColSpec { Type = typeof(int), Name = "int" }, 
        new ColSpec { Type = typeof(string), Name = "string" } };
    var dt = new DataTable();
    dt.Columns.AddRange (colspecs.Select(x=> new DataColumn(x.Name, x.Type) ).ToArray()) ;
    // single row jagged array 
    object[][] myObj = new object[1][];
    // 2 colums per row
    myObj[0] = new object[2] {100, "string"};
    foreach (object[] objs in myObj)
        dt.Rows.Add(objs);
    

    【讨论】:

      猜你喜欢
      • 2021-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-26
      • 1970-01-01
      • 2014-12-22
      • 2012-05-17
      • 1970-01-01
      相关资源
      最近更新 更多