当对绑定DataTable的DataGridView排序时,DataTable是用其维护的DataView或者DataViewManager实现排序逻辑的,并没有改变DataSource对应的DataTable,所以当我们要获取DataGridView中的排序时,比如用排序后的DataTable打印、导出,就必须常用附加逻辑。
代码如下
1 /// <summary> 2 /// 获取DataGridView绑定的包含排序状态的DataTable 3 /// </summary> 4 /// <param name="dgv">绑定DataTable的DataGridView</param> 5 /// <returns>包含排序状态的DataTable</returns> 6 public DataTable GetSortDataTable(DataGridView dgv) 7 { 8 DataView dv = (dgv.DataSource as DataTable).DefaultView;//得到DataView 9 if (dgv.SortedColumn != null)//判断是否有排序 10 { 11 dv.Sort = dgv.SortedColumn.DataPropertyName + (dgv.SortOrder == SortOrder.Ascending ? " asc" : " desc");//排序 12 } 13 return dv.ToTable();//返回DataTable 14 }