2012-04-06 50 views
0

我正在嘗試更新列中的值,如下面的代碼塊從數據表中讀取。目前,它只更新第一行的指定列值(字符串),而不更新下一行並更新它們。我究竟做錯了什麼?請指教。修改或替換從DataTable中讀取列值

public void UpdateDescription(DataTable dataTable) 
{ 
    if (dataTable != null && dataTable.Rows.Count > 0) 
    { 
     DataRow dr = dataTable.Rows[0]; 
     string dataDesc = string.Empty; 
     int rowIndex = 0; 
     dataDesc = dr["DataDesc"].ToString(); 

     if (rowIndex < dataTable.Rows.Count) 
     { 
      dr = dataTable.Rows[rowIndex]; 

      if (!dr.IsNull("DataDesc")) 
      { 
       if (dataDesc.Contains("STATE")) 
       { 
        dataDesc = dataDesc.Replace("STATE", "").Trim(); 
       } 

       if (dataDesc.Contains("HELLO ALL")) 
       { 
        dataDesc = dataDesc.Replace("HELLO ALL", "").Trim(); 
       } 

       if (dataDesc.Contains("(")) 
       { 
        dataDesc = dataDesc.Remove(dataDesc.IndexOf("(")).Trim(); 
       } 
      } 
      dr["DataDesc"] = dataDesc; 
     } 

     rowIndex++; 

    } 
} 

回答

2

它看起來像你只閱讀stringdataDesc一次。

也許你的意思是讀它的每一行。我不確定。

如果是的話,試試這個版本:

public void UpdateDescription(DataTable dataTable) { 
    if ((dataTable != null) && (0 < dataTable.Rows.Count)) { 
    int rowIndex = 0; 
    //DataRow dr = journalTable.Rows[0]; // What was this line for? "journalTable" is not defined here. 

    if (rowIndex < dataTable.Rows.Count) { 
     DataRow dr = dataTable.Rows[rowIndex]; 

     if (!dr.IsNull("DataDesc")) { 
     string dataDesc = dr["DataDesc"].ToString(); 
     if (dataDesc.Contains("STATE")) { 
      dataDesc = dataDesc.Replace("STATE", "").Trim(); 
     } 

     if (dataDesc.Contains("HELLO ALL")) { 
      dataDesc = dataDesc.Replace("HELLO ALL", "").Trim(); 
     } 

     if (dataDesc.Contains("(")) { 
      dataDesc = dataDesc.Remove(dataDesc.IndexOf("(")).Trim(); 
     } 
     dr["DataDesc"] = dataDesc; 
     } 
    } 

    rowIndex++; 

    } 
} 
+0

謝謝@ jp2code – ncoder 2012-04-06 15:34:46

1

你沒有循環。試試這個:

while (rowIndex < dataTable.Rows.Count) 
{ 
    dr = dataTable.Rows[rowIndex]; 
    ... 
    dr["DataDesc"] = dataDesc; 
    rowIndex++; 
} 

或者如果你喜歡...

for (int rowIndex = 0; rowIndex < dataTable.Rows.Count; ++rowIndex) 
... 

此外豔記了 - 如果「dataDesc」是空一行它會在你的邏輯得到上一行的價值!

+0

所以,我怎樣才能防止上一行的價值? @n8wrl – ncoder 2012-04-06 14:51:49

+0

rowIndex ++總是進入下一行。 n8wrl的回答是正確的,我已經投了贊成票。 – 2012-04-06 14:55:25

+0

put dr [「DataDesc」] = dataDesc;在你的'如果不是null' – n8wrl 2012-04-06 14:55:33

1

您需要循環數據表中的行。您只是在此行中指定一行,數字爲0:

DataRow dr = journalTable.Rows [0];

下面的代碼應該爲你工作:

 public void UpdateDescription(DataTable dataTable) 
    { 
     if (dataTable != null && dataTable.Rows.Count > 0) 
     { 
      foreach (DataRow dr in dataTable.Rows) 
      { 
       String dataDesc = dr["DataDesc"].ToString(); 

       if (!dr.IsNull("DataDesc")) 
       { 
        if (dataDesc.Contains("STATE")) 
        { 
         dataDesc = dataDesc.Replace("STATE", "").Trim(); 
        } 

        if (dataDesc.Contains("HELLO ALL")) 
        { 
         dataDesc = dataDesc.Replace("HELLO ALL", "").Trim(); 
        } 

        if (dataDesc.Contains("(")) 
        { 
         dataDesc = dataDesc.Remove(dataDesc.IndexOf("(")).Trim(); 
        } 
       } 
       dr["DataDesc"] = dataDesc; 

      } 


     } 
    } 
+0

謝謝@Stephen Borg – ncoder 2012-04-06 15:36:18