动态指定DataTable列

时间:2016-08-11 08:26:57

标签: c# .net datatable casting

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

我希望DataTable列的类型正确,即stringdatetimedouble等。这是fieldTypes数组的来源。< / p>

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

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

我们说

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

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

下面的内容(我知道下面写的内容不正确)

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

然后我需要在myObj中投放值,以便将它们添加到我的DataTable。这可能吗?

1 个答案:

答案 0 :(得分:0)

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

我使用列规范类,如:

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