Обновление индекса страницы в Gridview только тогда, когда это необходимо - PullRequest
2 голосов
/ 07 марта 2011

У меня есть gridview, который получает источник данных с 8621 записями с размером страницы, установленным на 20. Первая страница отображается точно так, как и должно быть.Я нажимаю на ссылку, чтобы отобразить страницу 2, и она также отображается как следует.Однако после этого все еще остается страница 2. Поэтому, если я нажму на ссылку, чтобы перейти на страницу 3, элемент управления подкачкой обновится, сказав, что я на странице 3, но отображаемые данные - это данные на странице 2. Я знаю, что представление сетки получает все8621 записей, потому что если я изменю размер страницы на 200, он отображает эти 200. Почему просмотр сетки будет работать правильно для некоторых страниц, но не для других?В любом случае, хватит моего бродяжничества, вот сам код:

<ajax:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
<cb:SortedGridView ID="SearchUsersGrid" runat="server" AutoGenerateColumns="False" DataKeyNames="Email" 
  DefaultSortDirection="Ascending" DefaultSortExpression="Email"
  AllowPaging="true" PageSize="20" AllowSorting="true" Width="100%" SkinID="PagedList">
<Columns>
<asp:TemplateField HeaderText="In List">
  <ItemStyle HorizontalAlign="Center" />
  <ItemTemplate>
    <asp:CheckBox ID="IsInEmailList2" runat="server" checked='<%#IsInEmailList(Container.DataItem)%>' OnCheckedChanged="IsInEmailList_CheckedChanged" AutoPostBack="true" ></asp:CheckBox>
  </ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Email" SortExpression="Email">
  <HeaderStyle HorizontalAlign="Left" />
     <ItemStyle HorizontalAlign="Left" />
      <ItemTemplate>
       <asp:HyperLink ID="NameLink2" runat="server" Text='<%# Eval("Email") %>' NavigateUrl='<%#GetEditUserUrl(Container.DataItem)%>'></asp:HyperLink>
      </ItemTemplate>
      </asp:TemplateField>
<asp:TemplateField HeaderText="Name" SortExpression="LastName">
  <HeaderStyle horizontalalign="Left" />
     <ItemStyle horizontalalign="Left" />
        <ItemTemplate>
          <asp:Label ID="FullNameLabel2" runat="server" Text='<%#GetFullName(Container.DataItem)%>'></asp:Label>
         </ItemTemplate>
</asp:TemplateField>
</Columns>
<EmptyDataTemplate>
  <div align="center">
    <asp:Label runat="server" ID="noUsersFound" enableViewState="false" Text="No matching users found."/>
  </div>
 </EmptyDataTemplate>
 </cb:SortedGridView>
 </ajax:UpdatePanel>

и некоторый соответствующий код:

    SearchUsersGrid.Visible = true;
    SearchUsersGrid.DataSourceID = "SearchUsersDs";
    SearchUsersGrid.DataBind();

и сам источник данных

<asp:ObjectDataSource ID="SearchUsersDs" runat="server" OldValuesParameterFormatString="original_{0}" SelectMethod="FindUsersByName" TypeName="Builder.Users.UserDataSource"
  SelectCountMethod="CountUsersByName" EnablePaging="True" SortParameterName="sortExpression" DataObjectTypeName="Builder.Users.User" DeleteMethod="Delete">
 <SelectParameters>
     <asp:ControlParameter ControlID="SearchText" Name="searchPattern" PropertyName="Text" Type="String" />
     <asp:ControlParameter ControlID="SearchByDropDown" Name="searchField" PropertyName="SelectedValue" Type="Object" />
</SelectParameters>
</asp:ObjectDataSource>

Нет события PageIndexChanged.Есть идеи?

Ответы [ 2 ]

0 голосов
/ 16 июля 2011

Я думаю, что проблема была связана с нашим производственным сервером. по какой-то причине код отлично работает на нашей рабочей коробке (даже с теми же данными).

0 голосов
/ 07 апреля 2011

Удалите панель обновления AJAX и проверьте, работает ли она должным образом. Другая проблема может заключаться в том, что если вы связываете сетку в page_load, убедитесь, что она не отправляется обратно каждый раз ... введите ее в

if(!IsPostBack)
{
 SearchUsersGrid.Visible = true;
    SearchUsersGrid.DataSourceID = "SearchUsersDs";
    SearchUsersGrid.DataBind();

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