将 table 中的空值替换为 space

Replacing nulls in table with space

我们有一个 SQL table,它有一个包含多个 NULL 条目的成本列。

因此,在将此 table 绑定到网格视图之前,我想将其替换为 space。

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。

求推荐。

您不能将空白字符(类型 char)分配给类型 decimal 的列。分配 0 而不是空格可能对您有用。

从您的示例来看,列 AverageCost 似乎是一个小数字段。您将无法将此分配给 "space".

但是,您可以添加一个包含 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"]);
}

解决这个问题的唯一方法是确保您的列是 VarCharNVarChar 等。一个文本字段,而不是像您当前拥有的数字字段。修改列类型后,您就可以分配 space

但是,您尝试替换的 null 正是为这种情况设计的:

  • 有效数值(示例:5.00)
  • 有效数值(示例:0.00)

这两个实例实际上表示该值通过用户存在,其中包含对您有用的表示。第三个选择:

  • Null

这实际上表明用户没有修改所述值,这对你来说是一个指标。本质上,它是控制该字段状态的可行选项。如果您有一个文本字段,您将拥有:

  • 有效值(“5.00”)
  • 有效值(“”或与数字 0.00 相比)
  • null

所以问题是,为什么 space 比 null0.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; }
}

这将确保将正确的值放入您的文本字段,但显然缺点是您需要一个小数,您将始终必须解析它。希望这能为您澄清。