我的一个页面上有一个非常简单的GridView,我的.aspx页面上有以下标记:
<asp:GridView ID="gvNews" runat="server" AutoGenerateColumns="false" AllowPaging="true"
AllowSorting="true" DataKeyNames="NewsID,VersionStamp" OnPageIndexChanging="gvNews_PageIndexChanging"
OnRowCreated="gvNews_RowCreated">
<Columns>
<asp:BoundField HeaderText="News Title" DataField="NewsTitle"
SortExpression="NewsTitle" ReadOnly="true" />
<asp:BoundField HeaderText="News Content" DataField="NewsContent"
SortExpression="NewsContent" ReadOnly="true" />
<asp:BoundField HeaderText="Posted Date" DataField="InsertedDate"
SortExpression="InsertedDate" ReadOnly="True" />
<asp:BoundField HeaderText="InsertedBy" DataField="InsertedBy" />
<asp:TemplateField>
<ItemTemplate>
<asp:LinkButton ID="lbEdit" runat="server" Text="Edit" CommandName="Select" />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
以下是我的.cs页面上的代码:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
LoadGrid();
}
}
private void LoadGrid()
{
gvNews.DataSource = GetNews();
gvNews.DataBind();
}
protected void gvNews_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
}
protected void gvNews_RowCreated(object sender, GridViewRowEventArgs e)
{
e.Row.Cells[3].Visible = false;
}
在RowCreated事件中,我试图隐藏gridview中的InsertedBy列。当AllowPaging设置为flase时,此代码可以正常工作。但是当AllowPaging设置为true时,我在RowCreated事件处理程序中收到以下错误:
指定的参数超出了有效值的范围。 参数名称:index
这种行为可能是什么原因?
答案 0 :(得分:0)
根据您发布的内容,您在RowCreated事件中的硬编码值为3似乎就是问题所在。在页面上启用跟踪,看看你得到了什么。 BTW寻呼机next-&gt; prev链接也会导致回发,而在PageLoad你只是加载网格,如果它不是回传,当你试图去下一页并且创建的行被触发时。
答案 1 :(得分:0)
您需要编写如下代码:
protected void gvNews_RowCreated(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
e.Row.Cells[3].Visible = false;
}
}
使用GridView,可能会创建不同类型的行,并且它们将具有不同数量的单元格,但RowCreated事件将针对所有行触发,因此在这种情况下,您需要将逻辑限制为仅数据行。