c# - 更新数据表中的单元格

标签 c# .net datatable dataset datarow

我正在编写一个小应用程序来对我拥有的 CSV 文件中的某些单元格进行一些处理。我已经弄清楚如何使用我在网上找到的库读写 CSV 文件,但我遇到了麻烦:该库将 CSV 文件解析为 DataTable,但是,当我尝试更改表格的单元格时,它不会保存表中的更改!

下面是有问题的代码。我已将流程分成多个变量,并重命名了一些内容,以便更轻松地调试此问题。

代码

循环内部:

string debug1 = readIn.Rows[i].ItemArray[numColumnToCopyTo].ToString();
string debug2 = readIn.Rows[i].ItemArray[numColumnToCopyTo].ToString().Trim();
string debug3 = readIn.Rows[i].ItemArray[numColumnToCopyFrom].ToString().Trim();
string towrite = debug2 + ", " + debug3;
readIn.Rows[i].ItemArray[numColumnToCopyTo] = (object)towrite;

循环后:

readIn.AcceptChanges();

当我调试我的代码时,我看到 towrite 的格式正确并且一切正常,只是该行没有更新:为什么它不工作?我觉得我在这里犯了一个简单的错误:上次我使用 DataTables 时(很久以前),我遇到了类似的问题。

如果您想知道我为什么要在 towrite 中添加另一个逗号,那是因为我将街道地址字段与邮政编码字段组合在一起 - 我希望这不会搞砸任何事情。

我的代码有点乱,因为我只是想编辑一个文件来做一个小的修复,很抱歉。

最佳答案

编辑单个列值的最简单方法是使用 DataRow.Item索引器属性:

readIn.Rows[i][numColumnToCopyTo] = (object)towrite;

这没有很好的记录,但是 DataRow.ItemArrayget 访问器返回基础数据的副本。这是实现,由 Reflector 提供:

public object[] get_ItemArray() {
    int defaultRecord = this.GetDefaultRecord();
    object[] objArray = new object[this._columns.Count];
    for (int i = 0; i < objArray.Length; i++) {
        DataColumn column = this._columns[i];
        objArray[i] = column[defaultRecord];
    }
    return objArray;
}

有一个笨拙的替代方法来编辑列值:获取一行的 ItemArray,修改这些值,然后修改该行以使用更新后的数组:

object[] values = readIn.Rows[i].ItemArray;
values[numColumnToCopyTo] = (object)towrite;
readIn.Rows.ItemArray = values;

关于c# - 更新数据表中的单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2448510/

相关文章:

c# - 如何在代码隐藏中绑定(bind)命令以在 WPF 中查看?

c# - 有什么办法可以在 c# 中制作某种 "aggregated"CancellationTokenSource 吗?

c# - 为什么将方法移入基类后,性能会缓慢下降?

r - 有没有一种快速的方法将数据表变成数据表列表?

jsf - Primefaces 数据表,过滤本地化枚举值

asp.net-mvc - Mvc 中的 DataTable 模型绑定(bind)

c# - 通过意图 URI 启动我的桌面应用程序

c# - 将任何日期时间值转换为 UTC

asp.net - 如何从 Asp.Net 那样的堆栈跟踪中获取 "Source Error"?

c# - 检测 AppData\LocalLow 的位置