动态指定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
中。这可能吗?
您需要指定列名和类型。考虑到您已经将类型名称映射到类型。
我将使用像
这样的列规范类: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);