Paging funktioniert nicht im asp.net gridview-innen AJAX updatepanel

Habe ich eine asp.net gridview ist, ist ursprünglich gebunden an ein sqldatasource-Steuerelement, aber wenn der Benutzer drückt eine externe Taste, es ruft stattdessen den Inhalt einer datatable eher als ein SQLdatasource-Steuerelement. Deshalb musste ich, um code zu schreiben in der PageIndexChanging Ereignis des gridview-Steuerelements zu ermöglichen, für die Auslagerungsdatei. Mein code ist wie folgt:

Protected Sub gvEvents_PageIndexChanging(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewPageEventArgs) Handles gvEvents.PageIndexChanging

gvEvents.PageIndex = e.NewPageIndex

gvEvents.DataBind()

Dies funktionierte wunderbar, bis ich fügte hinzu, ein AJAX-update-panel, so dass die ganze Seite wäre nicht postback jedes mal, wenn es ausgelagert, und paging aufgehört zu arbeiten. Ich gedebuggt und festgestellt, dass es tatsächlich den Aufruf der PageIndexChanging Ereignis, aber nichts ist passiert.

Suchte ich im Internet und fand ein paar Leute mit dem gleichen problem, aber deren Lösungen haben bei mir nicht funktioniert. Es war auf dieser Seite, deren problem gelöst wurde, indem die folgenden:

In PageIndexchanging Ereignis, wo Sie die binden von Daten an grid, stellen Sie sicher, dass die Daten wieder geholt von der DB

Ich weiß nicht, was das bedeutet, meine Daten sind bereits gebunden, wie oben dargelegt. Ich habe "paging aktivieren" auf true gesetzt und EnableSortingAndPagingCallbacks auf false gesetzt.

Würde mich wirklich freuen, wenn mir jemand helfen kann. Bin ich mit meinem markup für das updatepanel unten. Vielen, vielen Dank!

    <asp:UpdatePanel ID="UpdatePanel2" runat="server" UpdateMode="Conditional">
        <Triggers>
            <asp:AsyncPostBackTrigger ControlID="ibtnSearch" />           
        </Triggers>

        <ContentTemplate>

            <asp:GridView ID="gvEvents" runat="server"  DataKeyNames = "intID"
                AutoGenerateColumns="False" AllowPaging="True" GridLines="None" CellPadding="10" 
                ForeColor="#333333" PageSize="6" DataSourceID="defaultDS" >
                <RowStyle BackColor="#FFFBD6" ForeColor="#333333" />

                <Columns>
                    <asp:TemplateField HeaderText="Date">
                        <ItemTemplate>
                        <!-- put code block inside label? To set the formatter to include year if 
                        it's next year? -->
                        <asp:Label ID="Label1" runat="server" 
                            Text = '<%# RepeatingMethods.DetermineOngoing(CType(Eval("dtmEventStartDate"), DateTime) , CType(Eval("dtmEventEndDate"), DateTime))%>'> </asp:Label>

                    </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField>
                  <ItemTemplate>
                  <asp:Label ID="Label4" runat="server" Text='<%# Eval("chvAgeRange")  %>'> </asp:Label> <br />
                   <asp:Label ID="Label3" runat="server" Text= '<%# Eval("chvState")  %>'> </asp:Label>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:HyperLinkField DataNavigateUrlFields="intId" 
                    DataNavigateUrlFormatString="EventDetail.aspx?intId={0}" 
                    DataTextField="chvEventName" />

                    <asp:BoundField DataField="chvBriefDescription" HeaderText="Description" 
                        SortExpression="chvBriefDescription" />


            </Columns>
                     <FooterStyle BackColor="#990000" Font-Bold="True" ForeColor="White" />
                     <PagerStyle BackColor="#FFCC66" ForeColor="#333333" HorizontalAlign="Center" />
                     <SelectedRowStyle BackColor="#FFCC66" Font-Bold="True" ForeColor="Navy" />
                     <HeaderStyle BackColor="#990000" Font-Bold="True" ForeColor="White" />
                     <AlternatingRowStyle BackColor="White" />


<FooterStyle BackColor="#990000" Font-Bold="True" ForeColor="White"></FooterStyle>

<PagerStyle HorizontalAlign="Center" BackColor="#FFCC66" ForeColor="#333333"></PagerStyle>

<SelectedRowStyle BackColor="#FFCC66" Font-Bold="True" ForeColor="Navy"></SelectedRowStyle>

<HeaderStyle BackColor="#990000" Font-Bold="True" ForeColor="White"></HeaderStyle>

<AlternatingRowStyle BackColor="White"></AlternatingRowStyle>
    </asp:GridView>



                <asp:Label ID="lblError" runat="server"></asp:Label>

    <br />
    </ContentTemplate>
    </asp:UpdatePanel>
  • Ich kann nicht einmal sehen, Ihre datasource-code.
  • Hier ist ein Teil davon (es ist ein langer sub - ich kann nicht put it all in) searchConnection.Open() searchCommand = New SqlCommand(searchString, searchConnection) searchAdapter = New SqlDataAdapter(searchCommand) searchDatatable = New DataTable searchAdapter.Füllen(searchDatatable) Wenn searchDatatable.Zeilen.Count > 0, Dann gvEvents.DataSourceID = Nichts gvEvents.DataSource = searchDatatable gvEvents.DataBind()
InformationsquelleAutor | 2009-08-27
Schreibe einen Kommentar