我敢肯定这是微不足道的,但这已经是漫长的一天。

我有一个DataTable,其中一行有一个空单元格。我想找到具有空单元格的行,并简单地为该单元格值分配一个字符串。

但是,当我在调试过程中单步执行代码时,该值永远不会插入表中。我究竟做错了什么???

currentTime = DateTime.Now.ToString();

for (int i = 0; i < OwnersTable.Rows.Count; i++)
    if (OwnersTable.Rows[i].ItemArray[9].ToString() == "")
        OwnersTable.Rows[i].ItemArray[9] = currentTime;


我发现要完成此操作,我必须创建一个全新的行,将现有行的每个单元格的内容复制过来,然后将其添加回表中。
什么???
为什么简单的单元格分配在上面的代码中不起作用????

最佳答案

DataRow.ItemArray的getter返回一个包含行的整个值的数组,修改其元素不会对行值进行任何更改。


  通过数组获取或设置该行的所有值。


因此,您需要为其分配一个数组(使用setter),但是我不建议这样做:

currentTime = DateTime.Now.ToString();

for (int i = 0; i < OwnersTable.Rows.Count; i++) {
    object[] items = OwnersTable.Rows[i].ItemArray;
    if (items[9].ToString() == string.Empty) {
        items[9] = currentTime
        OwnersTable.Rows[i].ItemArray = items;
    }
}


您可以改用DataRow的SetField方法:

currentTime = DateTime.Now.ToString();
foreach (DataRow row in OwnersTable.Rows) {
    string value = row.Field<string>(9);
    if (string.IsNullOrEmpty(value)) {
        row.SetField<string>(9, currentTime)
    }
}


请注意,我假设该字段是字符串类型。

关于c# - DataTable ItemArray分配不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30089523/

10-12 12:37
查看更多