e.Row.RowIndex抛出超出范围异常的参数

时间:2013-07-11 18:53:33

标签: c# asp.net gridview sqldatasource

这对我来说没有意义:如果我运行此代码:

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();
        }
    }
}

我明白了:

  

mscorlib.dll中出现'System.ArgumentOutOfRangeException'类型的第一次机会异常

此外,如果我手动输入4:

,我会收到此异常
viewStoryTime.Rows[e.Row.RowIndex].Cells[3].Controls.Clear();

如果我输入3但它会直接从列中移除控件:

enter image description here

为什么我会收到此异常,我该怎么办呢?

1 个答案:

答案 0 :(得分:1)

根据您尝试的所有内容,获得此异常的唯一方法是e.Row.RowIndex超出范围:

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

但是,我不清楚为什么你不这样做:

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

根据页面在事件生命周期中的位置,您可能会在访问viewStoryTime上的行时遇到问题。