【问题标题】:getting the columnname and sum the values in datatable c#获取列名并对数据表c#中的值求和
【发布时间】:2017-11-18 03:09:42
【问题描述】:
for (int i = 9; i < dt.Columns.Count; i++)
{
    string dtcolumn = dt.Columns[i].ColumnName.ToString();

    dt.Rows[dt.Rows.Count - 1][i] = Convert.ToInt32(dt.Compute("SUM( " + dtcolumn + " )", "  " + dtcolumn + " > 0"));
}

当列值不为空时它正在工作。但有时抛出 invalidcastexception 并显示 Object 不能从 DBNull 转换为其他类型。如何避免 invalidcastexception

【问题讨论】:

  • 您的代码没有问题,至少您发布的部分没有问题。您需要告诉我们如何重现您的问题。
  • 你可以试试dt.Compute("SUM(IsNull([" + dtcolumn + "], 0))"msdn.microsoft.com/en-us/library/…

标签: c# datatable columnname


【解决方案1】:

您应该像@sajeetharan 所说的那样添加一个空检查,但他提到的空检查可能不起作用,因为这是 ADO.NET。您应该使用 DBNull 检查 null。

类似的东西

for (int i = 9; i < dt.Columns.Count; i++)
{
    if(!DBNull.Value.Equals(dt.Columns[i].ColumnName))
    {
        string dtcolumn = dt.Columns[i].ColumnName.ToString();
        dt.Rows[dt.Rows.Count - 1][i] = Convert.ToInt32(dt.Compute("SUM( " + dtcolumn + " )", "  " + dtcolumn + " > 0"));
     } 
 }

【讨论】:

  • 不需要DBNull来检查列名是否为空。
  • OP 明确表示他遇到了Object cannot be cast from DBNull to other types 错误。
  • 是的,OP 确实说过,但您的回答并未解决该问题。您正在使用 DBNull 检查列名是否为空 - 这不是检查它的方法。您不需要 DBNull。即使该列不存在,错误也会完全不同,它将与未找到列有关。
  • 但我在 OP 提供的 sn-p 中没有找到任何其他类型的转换。还有什么其他陈述导致了这个问题?
  • 查看我对 OPs 问题的评论。
【解决方案2】:
            for (int j = 0; j < dt.Rows.Count; j++)
            {
                for (int k = 9; k < dt.Columns.Count; k++)
                {
                    if (dt.Rows[j][k].ToString() == "")
                    {
                        dt.Rows[j][k] = "0";
                    }
                }
            }


     for (int i = 9; i < dt.Columns.Count; i++)
        {
        string dtcolumn = dt.Columns[i].ColumnName.ToString();
        dt.Rows[dt.Rows.Count - 1][i] = Convert.ToInt32(dt.Compute("SUM( " + dtcolumn + " )", "1 > 0"));

         }

谢谢,这段代码没有任何异常

【讨论】:

  • 仅用于过滤目的。而不是 1>0 你可以使用 string.empty 或 columnname > 5 或任何过滤器msdn.microsoft.com/en-us/library/…
  • 我知道它是一个过滤器,但 1 总是大于 0,那你有什么用?
  • 我的目标是不过滤任何东西,所以我在那里设置了一个不会影响我的数据表的积极条件
  • 但这如何回答您的问题?这如何消除您面临的异常?
  • 通过硬编码 1 > 0 它的工作...如果我把一个列名 > 5 我仍然面临异常...
猜你喜欢
  • 2017-11-16
  • 2019-07-27
  • 2019-10-08
  • 1970-01-01
  • 1970-01-01
  • 2015-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多