我们有一个SQL表,其成本列包含几个NULL条目。
因此,在将此表绑定到网格视图之前,我想用空格替换它。
foreach (DataRow row in ds.Tables[0].Rows)
{
if (row["AverageCost"] is System.DBNull)
{
row["AverageCost"] = Convert.ToDecimal("0.00"); // works
row["AverageCost"] = " "; // doesnt work
row["AverageCost"] = Convert.ToDecimal(" "); // doesnt work
}
}
我想让网格包含空字符串而不是0.00。
请建议。
答案 0 :(得分:2)
解决这个问题的唯一方法是确保您的列例如VarChar
或NVarChar
。文本字段,而不是您目前拥有的数字。修改列类型后,您就可以分配space
。
但是,您尝试替换的null
就是针对这种情况而设计的:
这两个实例实际上表示该值通过用户存在,其中包含一个有用的表示形式。第三种选择:
Null
这实际上表明用户没有修改所述值,这是一个指示器。从本质上讲,它是控制该领域状态的可行选择。如果您有文本字段,那么您将拥有:
null
所以问题是,为什么空间比null
或0.00
更适合?在大多数情况下,它将正确符合您的标准。
否则,要执行所述更改,您需要:
example.Tables[0].Columns.Add("...", typeof(string));
foreach(var row in example.Tables[0].Rows)
{
if(row["AverageCost"] != DBNull.Value)
row["AverageCostText"] = row["AverageCost"].ToString();
else { row["AverageCostText"] = String.Empty; }
}
这样可以确保在文本字段中放置正确的值,但显然缺点是你需要一个小数,你总是需要解析它。希望这能为你澄清。
答案 1 :(得分:1)
从您的示例中,似乎AverageCost列是十进制字段。您无法将其分配到"空间"。
但是,您可以添加一个新列,其中包含AverageCost的文本表示...
ds.Tables[0].Columns.Add("AverageCostText", typeof(String));
foreach (DataRow row in ds.Tables[0].Rows)
{
row["AverageCostText"] = (row["AverageCost"] == DBNull.Value) ? string.Empty : string.Format("{0}", row["AverageCost"]);
}
答案 2 :(得分:0)
您无法将空白字符(类型char
)分配给decimal
类型的列。分配0
而不是空格可能很有用。