数据表添加数据行时出现错误[]

时间:2014-02-18 08:30:31

标签: c# 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)));

当我查询 DataTable 时,请获取DataRows[]

DataRow[] result = dt.Select("Function ='" + strfunction + "'");

现在我想在 DataTable

中添加该结果
dt.Rows.Add(result);

但我收到错误

  

输入数组比此表中的列数长。

3 个答案:

答案 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);
}