波斯马BOSSMA Information Technology

GridView使用DataSource绑定数据源之排序问题的解决

发布时间:2007年7月19日 / 分类:ASP.NET / 18,690 次浏览 / 评论

在VS.net 2005中,提供了GridView控件,据说功能比DataGrid要强大很多,我没有用过DataGrid,所以关于效能、优劣的问题,本文不做探讨。

本文主要实现GridView使用DataSource绑定数据时,点击表格列标题即能排序,而且对于有条件查询的数据也可以进行排序。

1、实现排序的主要代码(网上收集):

     private void databind(){
        .....(获取DataSet省略)
        DataView dv = ods.Tables[0].DefaultView;//ods修改为你自己的DataSet
        ViewState["dt"]=ods.Tables[0]; //重要!
        GridView1.DataSource = dv;
        GridView1.DataBind();
    }

    //添加两个属性 排序方向、排序字段
    private string GridViewSortDirection
    {
        get { return ViewState["SortDirection"] as string ?? "ASC"; }

        set { ViewState["SortDirection"] = value; }
    }

    private string GridViewSortExpression
    {
        get { return ViewState["SortExpression"] as string ?? string.Empty; }

        set { ViewState["SortExpression"] = value; }
    }
    //获取点击后的排序方向
    private string GetSortDirection()
    {
        switch (GridViewSortDirection)
        {
            case "ASC":

                GridViewSortDirection = "DESC";

                break;

            case "DESC":

                GridViewSortDirection = "ASC";

                break;
        }

        return GridViewSortDirection;
    }

    protected DataView SortDataTable(System.Data.DataTable dataTable, bool isPageIndexChanging)
    {
        if (dataTable != null)
        {
            DataView dataView = new DataView(dataTable);

            if (GridViewSortExpression != string.Empty)
            {
                //根据是否PageIndexChanging设置排序方向
                if (isPageIndexChanging)
                {
                    dataView.Sort = string.Format("{0} {1}", GridViewSortExpression, GridViewSortDirection);

                }
                else
                {
                    dataView.Sort = string.Format("{0} {1}", GridViewSortExpression, GetSortDirection());

                }
            }
            return dataView;
        }
        else
        {
            return new DataView();
        }
    }
    //绑定
   protected void GridView1_Sorting1(object sender, GridViewSortEventArgs e)
    {
        GridViewSortExpression = e.SortExpression;

        int pageIndex = GridView1.PageIndex;

        sortdatabinds(pageIndex, false);
    }
    protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
    {
        int pageIndex = e.NewPageIndex;
        sortdatabinds(pageIndex, true);

    }
    private void sortdatabinds(int pageIndex, bool getsort)
    {
        DataTable dt = (DataTable)ViewState["dt"];

        GridView1.PageIndex = pageIndex;

        GridView1.DataSource = SortDataTable(dt as DataTable, getsort);

        GridView1.DataBind();

        ControlShow.GVWrap(GridView1);

        doRowsAndCells();

    }

2、GridView的例子
注意:AllowSorting=”True” 和 SortExpression=””

 
<asp:GridView ID="GridView1"? runat="server"? AllowPaging="True" PageSize="12" AutoGenerateColumns="False"? EmptyDataText="没有数据记录!" AllowSorting="True" OnSorting="GridView1_Sorting" Width="100%" OnPageIndexChanging="GridView1_PageIndexChanging">
<Columns>
<asp:BoundField DataField="m_code" HeaderText="编号" SortExpression="m_code"/>
<asp:BoundField DataField="m_name" HeaderText="名称" SortExpression="m_name"/>
</Columns>
</asp:GridView>

这样就OK了!总感觉GridView有点鸡肋的感觉,支持了SqlDataSource,感觉不太灵活,还是得写不少代码,可能是我对他们的本质不甚了解的原因,欢迎大家指教!

本博客所有文章如无特别注明均为原创。
复制或转载请以超链接形式注明转自波斯马,原文地址《GridView使用DataSource绑定数据源之排序问题的解决

关键字:

建议订阅本站,及时阅读最新文章!
【上一篇】 【下一篇】

目前有1 条评论

  1. moshuchao 0楼:

    兄弟,谢谢了。真的很好。正需要这东西。我写了个GridView因为是重几个数据库里查询出来的的,用SQL语句不方便(可能因为建数据库的时候没考虑好),所以分几步查询并合并到一个DataTable中,在网上找了很多排序的方法都不能用。你这个还真管用,一用就行了。好啊。

发表评论