c# - 如果编辑行返回错误,则更改 GridView 上的页面
问题描述
我知道stackoverflow中存在这个问题。但我的似乎不同。我看不出有什么问题。但它有时会在运行时在gridview上更改页面时发生。
如果在 Gridview 的第一页上工作,我在 gridview 中的编辑行上没有错误。如果更改 Gridview 的页面并尝试编辑任何行返回错误。
我正在尝试将数据逐行添加到 datagridview 这是我的代码,它说:
“索引超出范围。必须为非负数且小于集合参数名称的大小:索引”
这是什么意思?我的代码有什么问题吗?
线路错误:
GridView g2 = (GridView)gvProducts.Rows[rowindex].FindControl("GridView2");
这是我的代码:有人可以看看并告诉我会发生什么吗?
protected void gvProducts_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName != "Page")
{
int rowindex = Convert.ToInt32(e.CommandArgument.ToString());
GridView g2 = (GridView)gvProducts.Rows[rowindex].FindControl("GridView2");
if (e.CommandName == "Details")
{
int customerId = (int)this.gvProducts.DataKeys[rowindex]["sID"];
gvProducts.Rows[rowindex].FindControl("btn_Show").Visible = false;
sql = @String.Format(" SELECT * FROM `doTable` ");
sql += String.Format(" WHERE ");
sql += String.Format(" sID IN ('{0}') ", customerId);
g2.DataSource = GetData(sql);
g2.DataBind();
g2.Visible = true;
}
else
{
g2.Visible = false;
gvProducts.Rows[rowindex].FindControl("btn_Show").Visible = true;
}
}
}
protected void Paginate(object sender, CommandEventArgs e)
{
int intCurIndex = gvProducts.PageIndex;
switch (e.CommandArgument.ToString().ToLower())
{
case "First":
gvProducts.PageIndex = 0;
break;
case "Prev":
gvProducts.PageIndex = intCurIndex - 1;
break;
case "Next":
gvProducts.PageIndex = intCurIndex + 1;
break;
case "Last":
gvProducts.PageIndex = gvProducts.PageCount - 1;
break;
}
gvProducts.DataBind();
}
<PagerTemplate>
<asp:ImageButton ID="ImageButton1" runat="server" ImageUrl="/aspnet/img/bot_back.gif"
CommandArgument="First" CommandName="Page" />
<asp:ImageButton ID="ImageButton2" runat="server" ImageUrl="/aspnet/img/bot_back2.gif"
CommandArgument="Prev" CommandName="Page" />
Page
<asp:DropDownList ID="ddlPages" runat="server" AutoPostBack="True" CssClass="ddl_Class"
OnSelectedIndexChanged="DDLPages_SelectedIndexChanged">
</asp:DropDownList>
of
<asp:Label ID="lblPageCount" runat="server"></asp:Label>
<asp:ImageButton ID="ImageButton3" runat="server" ImageUrl="/aspnet/img/bot_next.gif"
CommandArgument="Next" CommandName="Page" />
<asp:ImageButton ID="ImageButton4" runat="server" ImageUrl="/aspnet/img/bot_next2.gif"
CommandArgument="Last" CommandName="Page" />
</PagerTemplate>
编辑#01
<asp:TemplateField HeaderText="" ItemStyle-HorizontalAlign="Center">
<ItemTemplate>
<asp:ImageButton ID="btn_Show" runat="server"
CommandName="Details"
CommandArgument='<%#Container.DataItemIndex%>' />
</ItemTemplate>
</asp:TemplateField>
解决方案
你需要替换这个:
<asp:TemplateField HeaderText="" ItemStyle-HorizontalAlign="Center">
<ItemTemplate>
<asp:ImageButton ID="btn_Show" runat="server"
CommandName="Details"
CommandArgument='<%#Container.DataItemIndex%>' />
</ItemTemplate>
</asp:TemplateField>
和 :
<asp:TemplateField HeaderText="" ItemStyle-HorizontalAlign="Center">
<ItemTemplate>
<asp:ImageButton ID="btn_Show" runat="server"
CommandName="Details"
CommandArgument='<%# DataBinder.Eval(Container, "RowIndex") %>'/>
</ItemTemplate>
</asp:TemplateField>
推荐阅读
- node.js - 如何代理(或定义中间件)以阻止/允许我的 React 组件中的某些方法调用?
- vue.js - 复杂对象的对象反应性
- flutter - Flutter:如何获取设备屏幕 DPI 值
- python-3.x - 为什么函数不被调用一次?(Python:Tkinter,Matplotlib)
- c - 如何修复 realloc():C 中的下一个大小无效
- ruby - 在ruby中右键单击context_click,我无法选择“保存图像”选项
- azure-devops - 我们可以使用变量替换来更改任何文件类型,而不仅仅是 JSON 或 XML
- angular - 带有动态清晰度选项卡的角度表单在添加选项卡后获得 ExpressionChangedAfterItHasBeenCheckedError
- python - 两个url不同的一个可选参数映射到flask restful中的相同资源
- java - getForEntity 返回 null