0

データテーブルから読み取る次のコードブロックのような列の値を更新しようとしています。現在、最初の行の指定された列値(文字列)のみを更新しており、次の行を通過してそれらを更新していません。私は何が間違っているのですか?ご意見をお聞かせください。

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++;

    }
}
4

3 に答える 3

2

string値を1回だけ読み取っているようですdataDesc

おそらく、行ごとにそれを読むことを意味します。私はわかりません。

もしそうなら、このバージョンを試してみてください:

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++;

  }
}
于 2012-04-06T14:54:28.207 に答える
1

ループはありません。これを試して:

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

または必要に応じて...

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

また、「dataDesc」が1つの行に対してnullの場合、ロジック内の前の行の値を取得します。

于 2012-04-06T14:47:28.107 に答える
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;

            }

        }
    }
于 2012-04-06T14:48:32.650 に答える