DataTable ItemArray 分配不起作用
DataTable ItemArray Assignment Does Not Work
我确定这是微不足道的,但这是漫长的一天。
我有一个 DataTable
,其中一行有一个空单元格。我想找到包含空单元格的行,然后简单地为该单元格值分配一个字符串。
然而,当我在调试期间单步执行代码时,该值永远不会插入 table。我做错了什么???
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;
我发现要完成此操作,我必须创建一个全新的行,复制现有行的每个单元格的内容,然后将其添加回 table。
什么???
为什么简单的单元格分配在上面的代码中不起作用????
DataRow.ItemArray returns 的 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;
}
}
您可以改用 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)
}
}
请注意,我假设该字段是字符串类型。
刚遇到这个 post 遇到同样的问题。绕过 Mehrzad 提到的 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] = 当前时间;
我遇到了同样的问题。显然,您在分配值时不需要关键字 ItemArray。
所以不是
OwnersTable.Rows[i].ItemArray[9] = 当前时间;
你可以使用
OwnersTable.Rows[i][9] = 当前时间;
我确定这是微不足道的,但这是漫长的一天。
我有一个 DataTable
,其中一行有一个空单元格。我想找到包含空单元格的行,然后简单地为该单元格值分配一个字符串。
然而,当我在调试期间单步执行代码时,该值永远不会插入 table。我做错了什么???
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;
我发现要完成此操作,我必须创建一个全新的行,复制现有行的每个单元格的内容,然后将其添加回 table。
什么???
为什么简单的单元格分配在上面的代码中不起作用????
DataRow.ItemArray returns 的 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;
}
}
您可以改用 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)
}
}
请注意,我假设该字段是字符串类型。
刚遇到这个 post 遇到同样的问题。绕过 Mehrzad 提到的 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] = 当前时间;
我遇到了同样的问题。显然,您在分配值时不需要关键字 ItemArray。
所以不是 OwnersTable.Rows[i].ItemArray[9] = 当前时间;
你可以使用 OwnersTable.Rows[i][9] = 当前时间;