我有一个问题,有以下例外:
索引超出范围
我有一个GridView,每行都有一个复选框。当我在下拉列表中选择和项目时,根据ListItem值执行某些操作。
protected void actionSelect_SelectedIndexChanged(object sender, EventArgs e)
{
GridView gv = Project_GridView;
DropDownList ddl = (DropDownList)sender;
int SelectValue = Convert.ToInt32(ddl.SelectedValue);
UpdateOp(gv, SelectValue);
dl_actionSelect.SelectedIndex = 0;
DataBind();
}
此代码运行:
private void UpdateOp(GridView gv, int SelectValue)
{
foreach (GridViewRow row in gv.Rows)
{
CheckBox check = (CheckBox)row.FindControl("CB_ActionSelect");
if (check.Checked)
{
int rowIndex = row.RowIndex;
DataBind();
if (!(DBNull.Value == gv.DataKeys[row.RowIndex].Value)) //This line throws the exception
{
int original_id = Convert.ToInt32(gv.DataKeys[row.RowIndex].Value);
//Op_Update
uWeb.Data.ProjLines.Op_Update(SelectValue, original_id);
}
}
}
}
循环循环行并找到检查的。但是,当选择多个复选框时,我会得到:
参数OutofRangeException:索引不超出范围
奇怪的是,它似乎是可以成功运行的随机数量。1个检查总是有效的,2 是随机的,有时它有时效果不佳。具有控制ID的东西?
GridView:
<asp:GridView ID="Project_GridView" runat="server" SkinID="ProdView"
AutoGenerateColumns="False" DataKeyNames="ROWNUMBER" CssClass="gvv"
DataSourceID="Project_ObjectDataSource" OnRowDataBound="Project_GridView_RowDataBound"
AllowSorting="true" Width="100%" AlternatingRowStyle-BackColor="LightGray">
<Columns>
<asp:TemplateField HeaderText="" ItemStyle-Width="4%">
<ItemTemplate>
<asp:CheckBox id="CB_ActionSelect" Text="" runat="server"/>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
您应该这样得到它:
string Id = gv.DataKeys[row.RowIndex %= gv.PageSize][0].ToString();
因为,当GridView的索引从行计数增加时,报告的错误发生。