У меня проблема с исключением ниже:
Индекс вне диапазона
У меня есть GridView, где в каждой строке есть CheckBox.Когда я выбираю элемент в списке DropDown, выполняется определенное действие в зависимости от значения 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);
}
}
}
}
Пропускает строки и находит отмеченныеиз них.Однако, когда выбрано более одного флажка, я получаю:
ArgumentOutOfRangeException: индекс выходит за пределы диапазона
И странная часть кажется случайной суммой, которая может успешнозапустить.1 проверено всегда работает, 2+ довольно случайно, иногда работает, иногда нет.Что-то с идентификатором для элемента управления?
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>