DataTable dt = new DataTable();
dt.Columns.Add(new DataColumn("Date", typeof(String)));
dt.Columns.Add(new DataColumn("Time", typeof(String)));
dt.Columns.Add(new DataColumn("Function", typeof(String)));
dt.Columns.Add(new DataColumn("Log Level", typeof(String)));
dt.Columns.Add(new DataColumn("Message", typeof(String)));
当我查询 DataTable 时,请获取DataRows[]
DataRow[] result = dt.Select("Function ='" + strfunction + "'");
现在我想在 DataTable
中添加该结果dt.Rows.Add(result);
但我收到错误
输入数组比此表中的列数长。
答案 0 :(得分:0)
试试这个
foreach (DataRow row in result)
dt.Rows.Add(row);
答案 1 :(得分:0)
如何创建DataRow
循环并从DataTable
创建单独的foreach
,而不是直接将DataRow
添加到DataTable
,而是填写数据并将其添加到DataTable
。例如:
DataTable dt = new DataTable();
dt.Columns.Add(new DataColumn("Date", typeof(String)));
dt.Columns.Add(new DataColumn("Time", typeof(String)));
dt.Columns.Add(new DataColumn("Function", typeof(String)));
dt.Columns.Add(new DataColumn("Log Level", typeof(String)));
dt.Columns.Add(new DataColumn("Message", typeof(String)));
//Dummy data added
DataRow dr = dt.NewRow();
dr[0] = "aa";
dr[1] = "bb";
dr[2] = "cc";
dr[3] = "dd";
dr[4] = "ee";
dt.Rows.Add(dr);
string strfunction = "cc";
DataRow[] result = dt.Select("Function ='" + strfunction + "'");
//Initialize Datarow here. I am using the one which is defined above
dr = null;
foreach (var item in result)
{
dr = dt.NewRow();
dr[0] = item[0];
dr[1] = item[1];
dr[2] = item[2];
dr[3] = item[3];
dr[4] = item[4];
dt.Rows.Add(dr);
}
希望这有帮助。
答案 2 :(得分:0)
DataRowCollection.Add()
有两个重载:
Add(DatarRow row);
Add(params object[] values);
您当前使用的是Add(params object[] values);
,因为您传递的基类为object
的类的数组。所以你在同一个表中搜索,确实得到相同数量的列,但问题是;您希望数组的每个元素插入作为DataRow
,但只插入一行并且数组的每个元素DataRow[] result
已分配给columns
使用:
dt.Rows.Add(new object[] { "Date", "Time", "a", "Log Level", "Message" });
DataRow[] result = dt.Select("Function ='a'");
foreach (DataRow r in dt.Rows)
{
/* Log r or inpect */
}
我的测试中没有抛出异常,因为result
数组只有1个元素(作为搜索结果)。
如果我在result
中有超过5个元素;因为我不能在5列表中插入6个列值,所以会抛出异常。
正确的方法是interating
搜索结果数组并为每个数组元素添加一个新行;使用DataRow.ItemArray
属性
您可以尝试下面对我有用的内容:
DataRow[] result = dt.Select("Function ='" + strfunction + "'");
foreach (DataRow r in result)
{
dt.Rows.Add(r.ItemArray);
}