![](/img/trans.png)
[英]Convert C# DataTable(ColumnName, ColumnType, ColumnValue) to csv and restore back
[英]getting the columnname and sum the values in datatable c#
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强制转换为其他类型。
您应该像@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"));
}
}
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"));
}
谢谢,这段代码可以正常工作而不会引起任何异常
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.