1

これは私には意味がありません:このコードを実行すると:

protected void viewStoryTime_OnRowDataBound(Object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        var obj = ((DataRowView)e.Row.DataItem)["ActivityDate"];
        if (DateTime.Parse(obj.ToString()) < DateTime.Now.StartOfWeek(DayOfWeek.Monday))
        {
            System.Diagnostics.Debug.WriteLine(e.Row.RowIndex);
        }
    }
}

私の出力は次のとおりです。

4

これを使用してセルをクリアしようとすると、次のようになります。

protected void viewStoryTime_OnRowDataBound(Object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        var obj = ((DataRowView)e.Row.DataItem)["ActivityDate"];
        if (DateTime.Parse(obj.ToString()) < DateTime.Now.StartOfWeek(DayOfWeek.Monday))
        {
            viewStoryTime.Rows[e.Row.RowIndex].Cells[3].Controls.Clear();
        }
    }
}

私は得る:

タイプ 'System.ArgumentOutOfRangeException' の初回例外が mscorlib.dll で発生しました

さらに、手動で 4 を入力すると、次の例外が発生します。

viewStoryTime.Rows[e.Row.RowIndex].Cells[3].Controls.Clear();

ただし、3を入力すると、必要な列の直前の列からコントロールが削除されます。

ここに画像の説明を入力

この例外が発生するのはなぜですか? また、どうすればよいですか?

4

1 に答える 1

1

試したすべてのことに基づいて、この例外が発生する唯一の方法はe.Row.RowIndex、範囲外になることです。

viewStoryTime.Rows[e.Row.RowIndex]...

ただし、単純にこれを行わない理由は不明です。

e.Row.Cells[3].Controls.Clear();

viewStoryTimeページがイベント ライフ サイクルのどこにあるかによっては、行にアクセスする際に問題が発生する可能性があります。

于 2013-07-11T19:08:45.467 に答える