0

グリッドビューをループして、すべてのアイテムを一度に保存しようとしています。ただし、ドロップダウンリストとテキストボックスから値を取得する際に問題があります。毎回このエラーが発生します:

ArgumentOutOfRangeException was caught. Specified argument was out of the range of valid values.

私が使用しているコードは次のとおりです。

foreach (GridViewRow gvr in gvInvalidOrgs.Rows)
{
   try
    {
     org_code = Convert.ToInt32(gvr.Cells[0].Text);
     division = ((DropDownList)gvr.Cells[1].Controls[0]).SelectedValue;
     org_description = (((TextBox)gvr.Cells[2].Controls[0]).Text);
    }
    ...
}

それが重要な場合、テキストボックスとドロップダウンリストの両方が行バインドで動的に作成されます。

ティア

4

1 に答える 1

1

例外がスローされた行を正確に知らなければ、同等の精度で診断することは困難ですが、コントロールを持たないセルでコントロールを探している可能性があります。

これはどのように起こりますか?でコントロールを作成しているため、RowDataBoundすべてのポストバックでグリッドをバインドしないと (お勧めしません)、動的に追加されたコントロールはポストバックで再作成されません。ポストされたデータにはそれらのコントロールの値が含まれ、ViewState にはそれらのコントロールのデータが含まれますが、ポストバックごとにそれらのコントロールを再作成しないと、値にアクセスしようとしたときにそれらのコントロールは存在しません。

ただし、コントロールを再作成するために再バインドする必要はありません。Schmelter 氏がコメントで述べているように、コントロールの作成を からイベント ハンドラーに移動するとRowDataBoundRowCreatedポストバックでグリッド行が再作成されたときに作成されます。

于 2012-10-09T21:26:14.133 に答える