用DataView实现GridView实现双向排序

来源:互联网 发布:excel数据地图模板 编辑:程序博客网 时间:2024/04/29 23:34

这个问题蛋疼啦一天,后面发现原来还是很简单的。现在写出来分享下吧。先声明下,因为用的不是GridView自动绑定(自动绑定的话可以选择属性启动排序不需编写代码就可以)而用的DataSet,可Dataset又不支持排序 ,所以就另辟蹊径啦找了个DataView来实现

 

后台代码:

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        //判断是否首次被加载false为首次加载
        if (!IsPostBack)
        {
            ViewState["SortFiled"] = "学生账号";
            ViewState["SortDirection"]="ASC";
            ShowDataBind();
        }
    }
    //用GridView显示数据
    public void ShowDataBind()
    {
        //创建数据连接
        string cn_sql = "server=.;database=Attendance;uid=sa; pwd=hujun";
        SqlConnection myCon = new SqlConnection(cn_sql);
        //创建SQL语句
        string sql = "SELECT * FROM 学生信息表";
        //myCon.Open();
        //创建适配器
        SqlDataAdapter da = new SqlDataAdapter(sql,cn_sql);
        //创建数据集
        DataSet ds = new DataSet();
        da.Fill(ds);//填充数据集
        //因为Dataset不支持排序所以用Dataview进行排序后再绑定
        DataView dv = ds.Tables[0].DefaultView;
        string sort = (string)ViewState["SortFiled"] + " " + (string)ViewState["SortDirection"];
        dv.Sort = sort;
        GridView1.DataSource = dv;
//设置数据源
        GridView1.DataBind();//绑定数据
        myCon.Close();

    }
    protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
    {
        GridView1.PageIndex = e.NewPageIndex;//必须获取
        ShowDataBind();
    }
    protected void GridView1_Sorting(object sender, GridViewSortEventArgs e)
    {
        string sortExpression = e.SortExpression;//获取排序字段
        if (ViewState["SortFiled"].ToString() == sortExpression)
        {
            if (ViewState["SortDirection"].ToString() == "ASC")
            {
                ViewState["SortDirection"] = "DESC";//降序
            }
            else
            {
                ViewState["SortDirection"] = "ASC";//升序
            }
        }
        else
        {
            ViewState["SortFiled"]=e.SortExpression;
        }
        ShowDataBind();
    }
}

 


效果:

 

点击学生账号后:

 

点击每一列都可以实现双向排序;大家有好的办法在评论里多写出来交流交流

原创粉丝点击