使用DataTable的Compute函数时,如果没有符合条件的数据,将返回null值, 如果是多条结果的数据不处理null值,将得不到正确的结果,无法绑定到gridview 中,旧代码如下:
//计算父节点的数量
DataRow[] rows = null;
rows = dt.Select("Convert(PARENTID, 'System.String') = '-1'");
// 循环赋值
foreach (DataRow row in rows)
{
dt.Rows[dt.Rows.IndexOf(row)][1] = System.Convert.ToDecimal(dt.Compute("sum(sl)", "PARENTID=" + row["DirID"]));
}
如果dt.Compute("sum(sl)", "PARENTID=" + row["DirID"])存在没有符合条件的数据,则 System.Convert.ToDecimal(dt.Compute("sum(sl)", "PARENTID=" + row["DirID"]))转换将失败,导致无法绑定时gridview,故改进后的代码如下:
//计算父节点的数量
DataRow[] rows = null;
rows = dt.Select("Convert(PARENTID, 'System.String') = '-1'");
// 循环赋值
foreach (DataRow row in rows)
{
if (dt.Compute("sum(sl)", "PARENTID=" + row["DirID"] ) != DBNull.Value)
{
dt.Rows[dt.Rows.IndexOf(row)][1] = System.Convert.ToDecimal(dt.Compute("sum(sl)", "PARENTID=" + row["DirID"]));
}
else
{
dt.Rows[dt.Rows.IndexOf(row)][1] =0;
}
}
这样就可以正常绑定到gridview了