将 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"]);
}
解决这个问题的唯一方法是确保您的列是 VarChar
或 NVarChar
等。一个文本字段,而不是像您当前拥有的数字字段。修改列类型后,您就可以分配 space
。
但是,您尝试替换的 null
正是为这种情况设计的:
- 有效数值(示例:5.00)
- 有效数值(示例:0.00)
这两个实例实际上表示该值通过用户存在,其中包含对您有用的表示。第三个选择:
Null
这实际上表明用户没有修改所述值,这对你来说是一个指标。本质上,它是控制该字段状态的可行选项。如果您有一个文本字段,您将拥有:
- 有效值(“5.00”)
- 有效值(“”或与数字 0.00 相比)
null
所以问题是,为什么 space 比 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; }
}
这将确保将正确的值放入您的文本字段,但显然缺点是您需要一个小数,您将始终必须解析它。希望这能为您澄清。
我们有一个 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"]);
}
解决这个问题的唯一方法是确保您的列是 VarChar
或 NVarChar
等。一个文本字段,而不是像您当前拥有的数字字段。修改列类型后,您就可以分配 space
。
但是,您尝试替换的 null
正是为这种情况设计的:
- 有效数值(示例:5.00)
- 有效数值(示例:0.00)
这两个实例实际上表示该值通过用户存在,其中包含对您有用的表示。第三个选择:
Null
这实际上表明用户没有修改所述值,这对你来说是一个指标。本质上,它是控制该字段状态的可行选项。如果您有一个文本字段,您将拥有:
- 有效值(“5.00”)
- 有效值(“”或与数字 0.00 相比)
null
所以问题是,为什么 space 比 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; }
}
这将确保将正确的值放入您的文本字段,但显然缺点是您需要一个小数,您将始终必须解析它。希望这能为您澄清。