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

C# 向现有DataTable添加数组计算生成的新列数据为空如何解决

问题根因

你代码的核心逻辑错误:新增Total Hours列后,没有给SQL查询返回的原有已有行的该列赋值,反而调用dtHOURS.NewRow()新增了一批额外空行,仅给这些新增行的Total Hours列赋值,所以你看到原有业务行的该列自然全部为空。

修正代码

直接修改原有行的Total Hours列值即可,不需要新增行,参考代码如下:

// 创建并添加Total Hours列
DataColumn TotalHoursCol = new DataColumn();
TotalHoursCol.DataType = typeof(System.Double);
TotalHoursCol.ColumnName = "Total Hours";
dtHOURS.Columns.Add(TotalHoursCol);

// 补充首行初始值,原逻辑从i=1开始漏掉了第0行
hours[0] = Convert.ToDouble(dtHOURS.Rows[0]["ACT_RUN_HRS"]);
dtHOURS.Rows[0]["Total Hours"] = hours[0];

// 循环计算剩余行的累计值,直接修改原有行
for (int i = 1; i < numberOfRecordsHours; i++)
{
    if (Convert.ToString(dtHOURS.Rows[i]["ID"]) == Convert.ToString(dtHOURS.Rows[i-1]["ID"]))
    { 
        hours[i] = Convert.ToDouble(dtHOURS.Rows[i]["ACT_RUN_HRS"]) + hours[i-1];
    }
    else
    {
        // 新工单首行初始值为当前行工时,原逻辑写0会丢失该行工时
        hours[i] = Convert.ToDouble(dtHOURS.Rows[i]["ACT_RUN_HRS"]);
    }
    // 直接给已有行赋值,不要调用NewRow新增行
    dtHOURS.Rows[i]["Total Hours"] = hours[i];
}

额外优化说明

  • 用typeof(System.Double)替代System.Type.GetType("System.Double"),运行效率更高,也避免字符串拼写错误
  • 修正了新工单首行工时清零的逻辑错误
  • 补充了首行的赋值逻辑,避免第一行的Total Hours为空

内容的提问来源于stack exchange,提问作者Neflix

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 07:36:07