动态指定DataTable列

本文关键字:DataTable 动态 | 更新日期: 2023-09-27 18:01:58

我有一个object[,] myObj。还有string[] fieldTypes。我想从我的对象数组中获取数据到一个数据表。

我希望数据表列虽然是正确的类型,即string, datetime, double等。这就是fieldTypes数组的用武之地。

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

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

我们设my

 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中。这可能吗?

动态指定DataTable列

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

我将使用像

这样的列规范类:
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);