2012-04-06 12 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

1

ループがありません。 「dataDesc」は1行分のnullの場合、それはあなたのロジックで前の行の値を取得します -

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

がまた出てwhatch ...

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

をしたり、好みの場合:これを試してみてください!

+0

は、どのように私は前の行の値を防ぐことができます。

もしそうなら、このバージョンを試してみてください? @ n8wrl – ncoder

+0

rowIndex ++は常に次の行に移動します。 n8wrlの答えは正しい、私はそれをupvotedしました。 –

+0

put dr ["DataDesc"] = dataDesc;あなたの中で '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ボルグ – ncoder

関連する問題