Gridview - исключение диапазона индекса при циклическом просмотре строк - PullRequest
0 голосов
/ 18 февраля 2019

У меня проблема с исключением ниже:

Индекс вне диапазона

У меня есть 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>

1 Ответ

0 голосов
/ 19 февраля 2019

Вы должны получить это так:

string Id = gv.DataKeys[row.RowIndex %= gv.PageSize][0].ToString();

Поскольку сообщаемая ошибка возникает, когда индекс GridView увеличивается от числа строк.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...