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
相关产品推荐
相关产品推荐

