【问题标题】:C# - Change value of all rows of a specific colum of a DataTable [closed]C# - 更改数据表特定列的所有行的值[关闭]
【发布时间】:2013-06-24 16:31:07
【问题描述】:

我有一个数据表。我想要做的是更改数据表的列“X”的所有行的值。

例如:

如果行值为“TRUE”,则将其更改为“Yes” 否则改成“否”

【问题讨论】:

  • 到目前为止尝试过什么?
  • 不太复杂,但如果列“X”是布尔/位字段,您可能会遇到数据类型问题...

标签: c# datatable datarow


【解决方案1】:

一个简单的循环:

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 启用不区分大小写的比较,如果您不希望“等于”为“是”,只需使用 == 运算符。

【讨论】:

  • +1 用于建议 StringComparison.OrdinalIgnoreCase
  • 如果 row.Field("X") 不是字符串而是布尔值(即 X 列是位/布尔值)怎么办?将字段设置为“是”或“否”会导致问题吗?
  • @Ric:Field 扩展方法是强类型的,它也支持可空类型,这就是我使用它的原因。如果类型不是字符串,它将引发异常。如果它是布尔列,则必须使用Field&lt;bool&gt;("X")。但是您需要使用不同的列来表示字符串或更改数据库查询以返回 varchar 而不是 bool(f.e. SELECT CASE WHEN X=1 THEN 'Yes' ELSE 'No' END AS X.
  • 这正是我的意思。如果 X 列是布尔值并且被强制转换为字符串,那么 InvalidCastException 将被抛出。我要指出的是,也许应该将一个新列带入结果集中或更改您提到的查询。不错!
【解决方案2】:

也许你可以试试这个

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"; }
}

希望这会有所帮助...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-10
    • 1970-01-01
    • 2014-10-03
    • 1970-01-01
    • 2020-12-13
    • 1970-01-01
    • 1970-01-01
    • 2014-03-10
    相关资源
    最近更新 更多