You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:45:06