【发布时间】: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