【问题标题】:e.Row.RowIndex throwing Argument out of Range Exceptione.Row.RowIndex 抛出参数超出范围异常
【发布时间】:2013-07-11 18:53:33
【问题描述】:

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

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 但是它会直接从列中删除它应该的控件之前的控件:

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

【问题讨论】:

  • 如果你这样做会发生什么? :e.Row.Cells[3].Controls.Clear();
  • 这是一个参数异常,而不是索引超出范围异常。 viewStoryTime.Rows[e.Row.RowIndex].Cells[3]viewStoryTime.Rows[e.Row.RowIndex].Cells[3].Controls 的值是多少?你能提供堆栈跟踪吗?
  • 另外,我看不出你在哪里“手动输入 4”。
  • 你确定你的行中至少有 4 个单元格吗? (否则,Cells[3] 将生成 ArgumentOutOfRangeException)

标签: c# asp.net gridview sqldatasource


【解决方案1】:

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 2013-11-18
    • 1970-01-01
    • 2013-09-28
    • 2012-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多