DataGridView 多列排序功能

System.Data.DataTable dt = new System.Data.DataTable();
        private void FillDataGridView()
        {
            dt.Columns.Add("Name");
            dt.Columns.Add("Course");
            dt.Columns.Add("Type");
            dt.Columns.Add("Score");
            DataRow dr = dt.NewRow();
            dr["Name"] = "Lily";
            dr["Course"] = "Math";
            dr["Type"] = "期中";
            dr["Score"] = 88;
            dt.Rows.Add(dr);
            DataRow dr1 = dt.NewRow();
            dr1["Name"] = "Lily";
            dr1["Course"] = "EN";
            dr1["Type"] = "期中";
            dr1["Score"] =98;
            dt.Rows.Add(dr1);
            DataRow dr2 = dt.NewRow();
            dr2["Name"] = "Rich";
            dr2["Course"] = "Math";
            dr2["Type"] = "期末";
            dr2["Score"] = 78;
            dt.Rows.Add(dr2);
            DataRow dr3 = dt.NewRow();
            dr3["Name"] = "Lily";
            dr3["Course"] = "Math";
            dr3["Type"] = "期末";
            dr3["Score"] = 97;
            dt.Rows.Add(dr3);
            dgv_Test.DataSource = dt;
        }

              private void dgv_Test_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
        {
            if (dgv_Test.Columns[e.ColumnIndex].Name == "Name")
            {
                dt.DefaultView.Sort = "Name,Score Asc";
                dgv_Test.DataSource = dt;
            }
        }

这个其实没有任何技术的难度,只是思路稍微转换了一下。

当接到用户的需求,他们希望点击一列,然后另一列也按照期望排序,并且需要保留datagridview自带的点击列头排序功能时,

我的第一反应是拒绝的,这个怎么可以做到,明显相违背的两个操作嘛。

当我百度了一会儿,然后整理了一下思路,我明白了。

解决方案:

   我可以通过点击选中的列头,给datagridview重新绑定数据源。(当然要求数据量比较小)。

代码如下:

  我这里使用的是datatable,我在绑定数据源之前对datatable重新排序,到此,问题解决。

这个其实没有任何技术的难度,只是思路稍微转换了一下。

当接到用户的需求,他们希望点击一列,然后另一列也按照期望排序,并且需要保留datagridview自带的点击列头排序功能时,

我的第一反应是拒绝的,这个怎么可以做到,明显相违背的两个操作嘛。

当我百度了一会儿,然后整理了一下思路,我明白了。

解决方案:

   我可以通过点击选中的列头,给datagridview重新绑定数据源。(当然要求数据量比较小)。

代码如下:

  我这里使用的是datatable,我在绑定数据源之前对datatable重新排序,到此,问题解决。

猜你喜欢

转载自www.cnblogs.com/skyloverdan/p/9234963.html
今日推荐