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

时间:2011-09-21 02:28:37

标签: c# .net datatable foreach

我有一个数据表,我试图使用每个循环和一个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++;
            }

5 个答案:

答案 0 :(得分:0)

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

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

这应该可以减少代码中的一些混淆。

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

答案 1 :(得分:0)

确保您正在初始化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.
        }
  }

答案 2 :(得分:0)

阵列的价值是多少?它真的是“IP”吗?或者它是以下之一:“ip”,“Ip”,“iP”?如果案例无关紧要,可能会对字符串上的.ToUpper()有帮助。

回答第二个问题:如果您使用数据适配器,那么您只需填充数据集并拉出数据集中的第一个表。

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

答案 3 :(得分:0)

C#区分大小写,因此很可能实际值不是大写“IP”,或者可能包含空格等。尝试与string.Compare进行比较,使用重载版本,您可以在其中为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”变量在您的示例中不提供任何功能。

答案 4 :(得分:0)

原来我需要添加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();
                }
            }