单击datagrid的任一列头进行排序,如何获取排序后的数据集?
与datagrid绑定的dataset是排序前的数据,如何获取排序后的数据?

解决方案 »

  1.   

    DataSet是无序的,排序使用的是DataSet.Table[0].DefaultView.Sort(...
      

  2.   

    我问的是单击datagrid后怎么取排序后的数据,并不是怎么排序
      

  3.   

    将DataSet中的主键赋值给DataGrid的DataKeyField属性。
    点击事件中:
    DataTable dt = dataSet.Tabels["TableName"];
    DataRow row = dt.Rows.Find(dataGrid.DataKeys[e.Item.ItemIndex]);完整的实例可以查MSND:DataGrid的DataKeys属性
      

  4.   

    How do I retrieve the current row from a DataTable bound to a DataGrid after the grid has been sorted?
    http://www.syncfusion.com/FAQ/WindowsForms/FAQ_c44c.aspx#q934q
      

  5.   

    如果想获得其它,通过找到绑定源dataview,然后进行foreach进行获得
      

  6.   

    各位是这样的,datagrid绑定了一dataset,然后单击datagrid任一列实现排序,我要取排序后的所有数据集,并不是当前行。
      

  7.   

    各位是这样的,datagrid绑定了一dataset,然后单击datagrid任一列实现排序,我要取排序后的所有数据集,并不是当前行。
    =============
    直接取得数据集恐怕有点难。
    可以根据当前排序的字段重新形成一个sql语句,这样可以形成一个数据集了。
      

  8.   

    你取排序后的数据集做什么?
    是要邦定到datagrid上达到排序的效果么?
    如果是这样,那DataSet.Table[0].DefaultView.Sort(..)这个可以办到。
    或者数据库查询的时候就加上order by字段
      

  9.   

    是这样的,单击datagrid的任一列实现排序后,我要将排序后的数据集写入一dataset中送打印,因为客户要求可以按任一列实现排序所以在sql中是不能加order的
      

  10.   

    重写datagrid
    public class MyDataGrid : DataGrid 
     

     
         protected override void OnMouseDown(MouseEventArgs e) 
     
         { 
     
              Point pt = new Point(e.X, e.Y); 
     
              DataGrid.HitTestInfo hti = this.HitTest(pt); 
     
              if(hti.Type == HitTestType.ColumnHeader && hti.Column == 1) 
     
              { 
     
                   sort col 1 
                   ((DataSet)this.datagrid.DataSource).Table[0].DefaultView.Sort(..)
     
              } 
     
              base.OnMouseDown(e); 
     
         } 
     

     
      

  11.   

    问题已解决,大家和我一样把问题想的复杂了,其实取和datagrid绑定的dataset的DefaultView就行了,该DefaultView就是一个排序后的视图。
    不过还是得感谢大家。