Пейджинг не работает в виде сетки asp.net внутри панели обновления AJAX - PullRequest
7 голосов
/ 27 августа 2009

У меня есть представление сетки asp.net, которое изначально привязано к элементу управления sqldatasource, но когда пользователь нажимает внешнюю кнопку, он вместо этого получает содержимое элемента данных, а не элемента управления SQLdatasource. Поэтому мне пришлось написать код в событии PageIndexChanging gridview, чтобы обеспечить подкачку страниц. Мой код выглядит следующим образом:

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()

Это прекрасно работало до тех пор, пока я не добавил панель обновления AJAX, чтобы вся страница не отправлялась обратно каждый раз, когда она выполняла постраничную подкачку, и подкачка перестала работать. Я отладил его и обнаружил, что он на самом деле вызывает событие PageIndexChanging, но ничего не происходит.

Я искал в Интернете и нашел несколько человек с такой же проблемой, но их решения не помогли мне. На этом сайте был один, чья проблема была решена следующим образом:

В событии PageIndexchange, где вы привязываете данные к сетке, убедитесь, что данные снова извлекаются из БД

Я не знаю, что это значит; мои данные были связаны, как показано выше. У меня "enable paging" установлено значение true, а EnableSortingAndPagingCallbacks установлено в false.

Буду очень признателен, если кто-нибудь сможет мне помочь. Я включил мою разметку для панели обновления ниже. Большое вам спасибо!

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

Ответы [ 4 ]

2 голосов
/ 19 июня 2013

Для тех, кто сталкивается с этой проблемой, я столкнулся с этим в AM, и этот пост вводил в заблуждение (по крайней мере, для моего сценария). Мне просто нужно было добавить событие PageIndexChanging в качестве триггера для моей сетки данных для триггеров панели обновления, и это решило мою проблему.

2 голосов
/ 27 августа 2009

В событии PageIndexchange, где вы привязываете данные к сетке, убедитесь, что данные снова извлекаются из БД Я не знаю, что это значит; мои данные были связаны, как показано выше.

Это означает, что вам нужно снова получить данные в коде за страницей. Вы используете источник данных SQL на своей странице design / html, поэтому вам нужно удалить его и использовать соединение SQL, команду SQL и т. Д. Для извлечения данных, а затем установить его в качестве источника данных вашего элемента управления.

Примерно так:

http://www.aspnettutorials.com/tutorials/database/db-grid-aspnet2-vb.aspx

Ваш код должен выглядеть примерно так

Protected Sub Page_Load(...)
   gvEvents.PageIndex = 0
   LoadData();// loads initial data
end sub

private sub LoadData()
 '' do your SQL Conn and Command here
 '' set your datasource of gridview here
end sub

Protected Sub gvEvents_PageIndexChanging(...) Handles gvEvents.PageIndexChanging
  gvEvents.PageIndex = e.NewPageIndex
  LoadData()
  gvEvents.DataBind()
end sub
1 голос
/ 04 сентября 2010

Просто обновите панель AJAX после привязки данных ().

предполагается, что идентификатор панели обновления - AJAXPanel

Protected Sub gvEvents_PageIndexChanging(...) Handles gvEvents.PageIndexChanging             
     gvEvents.PageIndex = e.NewPageIndex
     LoadData()
     gvEvents.DataBind()
     // The below line refreshes the update panel..  
     AJAXPanel.Update()
end sub
1 голос
/ 21 сентября 2009

Элементы управления, которые не совместимы с элементами управления UpdatePanel

Следующие элементы управления ASP.NET не совместимы с частичными обновлениями страниц и поэтому не поддерживаются внутри элемента управления UpdatePanel:

GridView и DetailsView контролирует, когда для их свойства EnableSortingAndPagingCallbacks установлено значение true. По умолчанию установлено значение false.

http://www.asp.net/Ajax/Documentation/Live/overview/UpdatePanelOverview.aspx

...