c# - DataTable ItemArray 分配不起作用

标签 c# datatable datarow

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

我有一个 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 的 setter/getter 返回一个包含行的全部值的数组,修改它的元素不会对行值进行任何更改。

Gets or sets all the values for this row through an array.

因此您需要为其分配一个数组(使用 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;
    }
}

您可以使用 SetField DataRow 的方法代替:

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/

相关文章:

c# - 使用 C# 将文件添加到项目资源

c# - 如何在此 C# 程序中获取要打印的列名?

c# - WPF在代码中绑定(bind)TextBox和DataRow

php - 数据表ajax根据php中的条件更改行颜色

javascript - Jquery 数据表 : Filter/Search based on select box outside the table

c# - DataTable - foreach 行,第一行除外

c# - 将粘贴的文本转换为单行

c# - MvvmCross 未安装

c# - 在内容页 ASP.NET 中使用时,Javascript 不返回正确的值

javascript - 行选择 dataTable rails - 如何获取 id 的选定行列表