DataTable ItemArray分配不起作用

问题描述 投票:1回答:2

我确信这是微不足道的,但这是漫长的一天。

我有一个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;

我发现要完成这个我必须创建一个全新的行,复制现有行的每个单元格的内容,然后将其添加回表格。什么??? 为什么简单的单元格赋值不能在上面的代码中工作?

c# datatable datarow
2个回答
2
投票

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) 
    }
}

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


0
投票

在遇到同样的问题之后刚刚遇到过这篇文章。更直接的方法是绕过Merzad提到的ItemArray问题,在使用row.ItemArray [columnIndex]的地方使用row [columnIndex]测试和分配值。行的直接索引器不引用行的数据的副本。代码变成:

for (int i = 0; i < OwnersTable.Rows.Count; i++)

if(OwnersTable.Rows [i] [9] .ToString()==“”)OwnersTable.Rows [i] [9] = currentTime;

© www.soinside.com 2019 - 2024. All rights reserved.