C#中DataRow赋值不生效问题:如何修改DataTable指定列值
问题分析与解决方案
嘿,你碰到的这个问题其实是对DataRow.ItemArray的特性理解有误导致的,咱们一步步理清楚:
为什么你的赋值不生效?
DataRow.ItemArray返回的是当前行数据的副本数组,不是直接指向行内原始数据的引用。所以你修改row.ItemArray[17]的时候,只是改动了这个临时副本里的元素,原DataRow中的数据根本没被更新,自然看不到效果。
正确的解决方法有两种:
方法1:直接通过DataRow索引赋值(最推荐)
这是操作DataRow数据最直接的方式,直接修改行内指定列,改动会实时同步到原数据中:
foreach (DataRow row in dtSource.Rows) { if (row[17].ToString().Length > 32) { row[17] = "text"; } }
如果知道列名的话,用列名代替索引会让代码可读性更好:
row["你的目标列名"] = "text";
方法2:更新ItemArray副本后重新赋值给行
如果你一定要用ItemArray的方式,记得修改完副本数组后,要把它重新赋值回row.ItemArray,这样才能同步到原行:
foreach (DataRow row in dtSource.Rows) { if (row.ItemArray[17].ToString().Length > 32) { object[] tempArray = row.ItemArray; tempArray[17] = "text"; row.ItemArray = tempArray; // 将修改后的数组重新赋值给行 } }
验证修改是否生效
你可以在循环结束后加一段代码确认结果:
foreach (DataRow row in dtSource.Rows) { Console.WriteLine($"第18列值:{row[17]},长度:{row[17].ToString().Length}"); }
内容的提问来源于stack exchange,提问作者Vinodh Muthusamy
相关产品推荐
相关产品推荐

