Gridview页面索引只有在感觉就好时才会更新

时间:2011-03-07 18:41:35

标签: c# asp.net gridview

我有一个gridview,它接收一个包含8621个条目的数据源,页面大小设置为20.第一页显示的确切应该如此。我点击链接显示第2页,它也会显示它应该显示的内容。之后的任何内容仍然是第2页。所以,如果我点击链接转到第3页,分页控制更新说我在第3页,但显示的数据是第2页上的数据。我知道gridview正在全部8621条目,因为如果我将页面大小更改为200,则会显示200个。为什么gridview会对某些页面正常工作而对其他页面不正常?无论如何,我的漫无边际,这就是代码本身:

<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 :(得分:0)

删除AJAX更新面板并检查它是否按预期工作。另一个问题可能是如果你在page_load中绑定Grid,请确保每次都不回发它..把它放进去

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

}

答案 1 :(得分:0)

我认为这个问题与我们的生产服务器有关。由于某种原因,代码在我们的生产盒上运行良好(即使使用相同的数据)。