获取列名并对数据表c#

时间:2017-11-18 03:09:42

标签: c# datatable columnname

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"));
}

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

2 个答案:

答案 0 :(得分:0)

你应该像@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"));
     } 
 }

答案 1 :(得分:0)

            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"));

         }

谢谢,这段代码无需任何异常