2011-09-21 55 views
2

我有一個數據表,我試圖用每個循環和一個if語句來修改某些值,但是每當我嘗試使用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++; 
      } 
+0

我解決了這個,我用的每個配音建議結合這可能是罪魁禍首修剪()循環。 – MogulBomb

回答

0

對於初學者,變量x是多餘的。你可以簡單地參考:

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

這應該減少代碼中的一些混淆。

if語句中設置一個斷點,以查看在循環的每次迭代中GetValue(1).ToString()的實際值。您可能正在檢索錯誤的值。

0

請確保您正在初始化您的DataTable列,更重要的是確保您在索引= 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. 
     } 
    } 
+0

如果我從使用odbc連接/ sql的數據適配器填充數據表以獲取數據,我將如何初始化列? – MogulBomb

0

數組的值是多少?它真的是「IP」嗎?或者它是下列之一:「ip」,「ip」,「iP」?如果情況沒有關係,它可能對字符串上的.ToUpper()有幫助。

要回答你的第二個問題:如果你使用數據適配器,那麼你可以填充一個數據集,並拉出數據集中的第一個表。

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

C#是區分大小寫的,所以它是最有可能的是,實際值不大寫「IP」,或者可能包含空格等嘗試用string.Compare相比,使用重載版本,在那裏你可以基於區分大小寫錯誤。

順便說一句 - 有幾種方法來檢查值可能會更清潔一些。

首先,您可以使用DataTable公開的Select方法將行篩選爲僅索引爲1的列中值爲「IP」的行。您將需要使用列名稱,所以我將假設它被命名爲「列1」這個例子:

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(); 
} 

如手工E-食品所指出的,「X」變量提供:

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

或者,可以按如下方式使用LINQ聲明在你的例子中沒有功能。

0

原來我需要添加修剪(),它的工作。

foreach (DataRow row in dt.Rows) 
      { 
       string name = row.ItemArray.GetValue (2).ToString ().ToUpper().Trim(); 

       if (name == "IP") 
       { 
        row.BeginEdit(); 
        row [ "grd" ] = "-"; 
        row.EndEdit(); 
       } 
      }