【问题标题】:C# Datatable Compute on Index instead of Name?C# Datatable 计算索引而不是名称?
【发布时间】:2011-03-10 16:04:03
【问题描述】:

我在 ASP.NET / C# 中使用 Datatable,并希望使用 Compute 方法对每一列求和,有没有一种基于列索引而不是列名的方法,所以我可以将它放在for 循环如下:

for (int i = 0; i < dt.Columns.Count; i++)
        {
            GridView1.FooterRow.Cells[i].Text = dt.Compute("SUM(i)", "").ToString();
        }

这对我的应用程序并不太重要,因为我将在其他地方使用列名数组,因此我可以使用该数组来构造带有名称的 SUM。

【问题讨论】:

  • 不确定是否可以直接按索引求和。你可以改用"SUM(" + dt.Columns[i].ColumnName + ")" 吗?
  • @paolo 您应该将其发布为答案。看起来不支持索引,所以你的建议就是我要发布的内容。
  • @Ahmad MattP 的问题是是否支持按索引求和,因此,如果您发现证据表明它们,则不要继续发布您的答案。随意重用我评论中的建议,我不介意:)
  • @paolo,效果很好。谢谢。

标签: c# datatable


【解决方案1】:

DataTable.Compute 使用的表达式似乎不支持按索引引用列。事实上,DataColumn.Expression property 的 MSDN 文档强调了列名的使用:

创建表达式时,请使用 要引用的 ColumnName 属性 列。

您可以在循环中使用 ColumnName property 来引用当前列的名称,正如 cmets 中针对您的问题所建议的 @paolo。这看起来像:

for (int i = 0; i < dt.Columns.Count; i++)
{
    string expression = "SUM(" + dt.Columns[i].ColumnName + ")";
    GridView1.FooterRow.Cells[i].Text = dt.Compute(expression, "").ToString();
}

【讨论】:

  • 列名是数字怎么办?
  • @D-Jones 你试过上面的方法吗? ColumnName 属性总是返回一个字符串,所以即使实际名称是一个数字,类型也会是一个类似"42" 的字符串,所以我想它仍然可以工作。
  • 计算方法还是比较难理解。这超出了这个问题的范围,但我所做的是用大括号限定名称,即“SUM([0])”
猜你喜欢
  • 2013-04-17
  • 1970-01-01
  • 1970-01-01
  • 2021-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-08
  • 1970-01-01
相关资源
最近更新 更多