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()
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es bedeutet, dass Sie brauchen, um Holen Sie Ihre Daten wieder in Ihre code-behind-Seite. Sie sind mit einer SQLdatasource in Ihrem design/html-Seite, so dass Sie brauchen, um zu entfernen, und verwenden Sie eine SQL-Verbindung, den SQL-Befehl, etc. zum abrufen der Daten und dann einstellen, dass als Steuerelement datasource.
Etwas wie unten:
http://www.aspnettutorials.com/tutorials/database/db-grid-aspnet2-vb.aspx
Ihr code sollte wie folgt Aussehen
Für jeden, der stolpert über dieses Problem, ich traf Sie dieser UHR und dieser Beitrag war irreführend (atleast für mein Szenario). Für mich, ich hatte einfach zu fügen Sie eine PageIndexChanging Ereignis als Auslöser für mein datagrid für das updatepanel-trigger, und es mein Problem gelöst.
Steuerelemente, die Nicht Kompatibel Sind mit UpdatePanel-Steuerelemente
Folgende ASP.NET Kontrollen sind nicht kompatibel mit partial-page-updates und werden daher nicht unterstützt in einem UpdatePanel-Steuerelement:
GridView und Detailansicht steuert, wenn Ihre EnableSortingAndPagingCallbacks - Eigenschaft auf true festgelegt ist. Der Standardwert ist false.
http://www.asp.net/Ajax/Documentation/Live/overview/UpdatePanelOverview.aspx
Aktualisieren Sie einfach die AJAX-Bedienfeld nach dem databind().
übernehmen die id des Update-Panel ist AJAXPanel