迭代数据表并使用if语句修改值

本文关键字:语句 修改 if 数据表 迭代 | 更新日期: 2023-09-27 18:09:05

我有一个数据表,我试图使用一个for每个循环和一个if语句来修改某些值,但是每当我尝试使用if语句时,什么都不会发生。如果我删除If语句它显然会改变每一行

我做错了什么?我在ItemArray.GetValue()上尝试了不同的值,仍然没有运气。

            int x = 0;
            foreach ( DataRow myRow in dt.Rows )
            {
                if (dt.Rows [x].ItemArray.GetValue(1).ToString()=="IP")
                {
                    myRow.BeginEdit ( );
                    myRow [ "grd" ] = " ";
                    myRow.EndEdit ( );
                }
                x++;
            }

迭代数据表并使用if语句修改值

对于初学者来说,变量x是多余的。你可以参考:

if (myRow.ItemArray.GetValue(1).ToString()=="IP")

这样可以减少代码中的一些混乱。

if语句上放置一个断点,以查看每次循环迭代中GetValue(1).ToString()的实际值。您可能正在检索错误的值。

确保正在初始化DataTable列,更重要的是确保在index = 1处插入值。我运行了下面的代码,计算"if"语句没有任何问题。我还删除了您正在使用的计数器,因为在这个特定的循环中不需要它,因为您可以直接访问每行的ItemArray。

  DataTable table = new DataTable();
  table.Columns.Add("ID");    //Allows for storage at GetValue(0)
  table.Columns.Add("NAME");  //Allows for storage at GetValue(1)
  //GetValue(0) will return 128|256; GetValue(1) will return IP | OP.
  table.Rows.Add(new object[] {"128", "IP"});  
  table.Rows.Add(new object[] {"256", "OP"});
  foreach(DataRow row in table.Rows)
  {
        string name = row.ItemArray.GetValue(1).ToString();
        if(name == "IP")
        {
             Console.WriteLine("IP was found");
             //Of course do your edits here.
        }
  }

数组的值是什么?这真的是"IP"吗?还是下面的其中一个:"ip", "ip", "ip" ?如果大小写无关紧要,对字符串使用. toupper()可能会有所帮助。

回答你的第二个问题:如果你使用数据适配器,那么你可以只填写一个数据集,并取出数据集中的第一个表。

DataSet ds = new DataSet();
dataAdapter.fill(ds);
DataTable myTable = ds.Tables[0];

c#是区分大小写的,所以很可能实际值不是大写的"IP",或者可能包含空格等。尝试与字符串进行比较。比较,使用重载版本,其中可以基于false区分大小写。

顺便说一句,有几种检查值的方法可以更简洁一些。

首先,您可以使用DataTable公开的Select方法将行筛选为仅在索引1处的列中值为"IP"的行。您将需要使用列名,因此我假设在本例中列名为"Column1":

foreach ( DataRow myRow in dt.Rows.Select("Column1 = 'IP'") )
{
    myRow.BeginEdit();
    myRow["grd"] = " ";
    myRow.EndEdit();
}

或者,您可以使用LINQ语句,如下所示:

foreach (DataRow myRow in dt.Rows.Cast<System.Data.DataRow>().Where(r => string.Compare(r[1].ToString(), "IP", true) == 0)
{
    myRow.BeginEdit();
    myRow["grd"] = " ";
    myRow.EndEdit();
}

正如Hand-E-Food所指出的,"x"变量在您的示例中没有提供任何功能。

原来我需要添加trim(),它工作。

    foreach ( DataRow row in dt.Rows )
            {
                string name = row.ItemArray.GetValue ( 2 ).ToString ( ).ToUpper().Trim();
                if ( name == "IP" )
                {
                    row.BeginEdit();
                    row [ "grd" ] = "-";
                    row.EndEdit();
                }
            }