2012-04-06 6 views
0

Я пытаюсь обновить значения в столбце, таком как следующее чтение кода кода из datatable. В настоящее время он обновляет только указанное значение столбца (строка) для первой строки, но не проходит через следующие строки и не обновляет их. Что я делаю не так? Пожалуйста посоветуй.Изменение или замена значений столбцов из 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

Похоже, вы только чтение значения dataDescstring раз.

Возможно, вы хотите прочитать его для каждой строки. Я не уверен.

Если да, то попробуйте эту версию:

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

1

У вас нет петли. Попробуйте это:

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

или если вы предпочитаете ...

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

whatch Также из - если «dataDesc» является недействительным для одной строки она получит значение предыдущей строки в вашей логике!

+0

Итак, как я могу предотвратить предыдущее значение Роу? @ n8wrl – ncoder

+0

rowIndex ++ всегда переходит к следующей строке. Ответ n8wrl правильный, я его поддержал. –

+0

put dr ["DataDesc"] = dataDesc; внутри вашего 'if not null' – n8wrl

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

Смежные вопросы