Изменить страницу в GridView, если редактировать строку, эта ошибка возврата - PullRequest
0 голосов
/ 07 октября 2019

Я знаю, что эта проблема существует в stackoverflow. но мой, похоже, другой. Я не вижу никаких проблем. но иногда это происходит во время выполнения, когда изменена страница в gridview.

При работе на первой странице Gridview у меня нет ошибки при редактировании строки в gridview. Если изменить страницу Gridview и попытаться отредактировать любую ошибку возврата строки.

Я пытаюсь добавить данные одной строкой в ​​представление данных, вот мой код, и он говорит:

"Индекс вышел за пределы диапазона. Должен быть неотрицательным и меньше размера имени параметра коллекции: index"

Что это значит? есть ли проблема в моем коде.

Ошибка строки:

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>

1 Ответ

1 голос
/ 07 октября 2019

Вам нужно заменить это:

<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>
...