GridView:为什么我仍然必须进行自己的排序和分页?

时间:2011-06-08 06:56:37

标签: asp.net gridview

当我已经为GridView控件启用分页和排序时? 这是我的aspx代码:

<asp:GridView ID="GridView1" runat="server" AllowPaging="True" AllowSorting="True">
    </asp:GridView>
<asp:SqlDataSource ID="SqlDataSource1" runat="server" 
    ConnectionString="<%$ ConnectionStrings:plantsSQLConnectionString %>" 
    SelectCommand="SELECT * FROM [Plants]"></asp:SqlDataSource>

我在Page_Load()中执行查询和DataBind,数据显示正确。我期待GridView为我处理分页和排序,但当我尝试页面或排序时,页面崩溃,我被告知提供Sorting和PageIndexChanging处理程序。 我做错了什么?感谢。

这是我背后的代码。您可以假设GetData有效,因为我看到记录显示正确。

protected void Page_Load(object sender, EventArgs e)
    {
        // Declare the query string.        
        String queryString = "Select * from plants";

        // Run the query and bind the resulting DataSet
        // to the GridView control.
        DataSet ds = GetData(queryString);
        if (ds.Tables.Count > 0)
        {
            GridView1.DataSource = ds;
            GridView1.DataBind();
        }


    }

其他详细信息:如果我不执行代码并在aspx文件中执行查询,则GridView可以自动排序和分页。 [意思是我使用了向导并将GridView连接到aspx文件中的数据源,导致DataSource ID与GridView控件相关联。]在这种情况下如何进行分页和排序,而不是将代码移动到PageLoad?感谢您的任何见解。

1 个答案:

答案 0 :(得分:1)

如果用户点击列,GridView还不知道如何排序。因此,您需要为可排序列提供SortExpression。 如果用户在同一列上单击两次,您可能还希望提供额外的功能来对升序/降序进行排序。因此,您需要将当前的SortExpression + SortDirection存储在f.e.在ViewState。

为什么以及何时排序可能无法自动运行的一些注意事项:

  

当数据源控制时   支持排序绑定   GridView控件,GridView控件   可以利用数据源   控制的能力和提供   自动排序功能。什么时候   GridView控件绑定到   数据源通过设置DataSource   以编程方式,您必须   提供排序功能   使用排序事件。

以下是有关排序的更多信息: http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.gridview.allowsorting.aspx

为什么以及何时分页可能无法自动运行的一些注意事项:

  

如果数据源不支持   直接分页而不实现   ICollection接口,   GridView控件无法页面。对于   例如,如果您正在使用   SqlDataSource控件并设置了它   DataSourceMode属性到DataReader,   GridView控件无法实现   寻呼。

以下是有关GridView可能不支持直接分页的更多信息: http://msdn.microsoft.com/en-us/library/5aw1xfh3.aspx

修改:在数据绑定GridView之前,请记得在Page_Load中检查! Page.IsPostback!否则,GridView将在回发中获得旧数据/分页/排序等。