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重新排序,到此,问题解决。