【发布时间】:2013-06-24 16:31:07
【问题描述】:
我有一个数据表。我想要做的是更改数据表的列“X”的所有行的值。
例如:
如果行值为“TRUE”,则将其更改为“Yes” 否则改成“否”
【问题讨论】:
-
到目前为止尝试过什么?
-
不太复杂,但如果列“X”是布尔/位字段,您可能会遇到数据类型问题...
我有一个数据表。我想要做的是更改数据表的列“X”的所有行的值。
例如:
如果行值为“TRUE”,则将其更改为“Yes” 否则改成“否”
【问题讨论】:
一个简单的循环:
foreach(DataRow row in table.Rows)
{
string oldX = row.Field<String>("X");
string newX = "TRUE".Equals(oldX, StringComparison.OrdinalIgnoreCase) ? "Yes" : "No";
row.SetField("X", newX);
}
StringComparison.OrdinalIgnoreCase 启用不区分大小写的比较,如果您不希望“等于”为“是”,只需使用 == 运算符。
【讨论】:
Field 扩展方法是强类型的,它也支持可空类型,这就是我使用它的原因。如果类型不是字符串,它将引发异常。如果它是布尔列,则必须使用Field<bool>("X")。但是您需要使用不同的列来表示字符串或更改数据库查询以返回 varchar 而不是 bool(f.e. SELECT CASE WHEN X=1 THEN 'Yes' ELSE 'No' END AS X.
也许你可以试试这个
int columnNumber = 5; //Put your column X number here
for(int i = 0; i < yourDataTable.Rows.Count; i++)
{
if (yourDataTable.Rows[i][columnNumber].ToString() == "TRUE")
{ yourDataTable.Rows[i][columnNumber] = "Yes"; }
else
{ yourDataTable.Rows[i][columnNumber] = "No"; }
}
希望这会有所帮助...
【讨论】: