第一个问题如下:
public void MoveColumn(DataGrid _dataGrid, string _mappingName, int fromCol, int toCol) 
 

 
     if(fromCol == toCol) return; 
  
     DataGridTableStyle oldTS = _dataGrid.TableStyles[_mappingName]; 
 
     DataGridTableStyle newTS = new DataGridTableStyle(); 
 
     newTS.MappingName = _mappingName; 
  
     for(int i = 0; i < oldTS.GridColumnStyles.Count; ++i) 
 
     { 
 
          if(i != fromCol && fromCol < toCol) 
 
               newTS.GridColumnStyles.Add(oldTS.GridColumnStyles[i]); 
 
          if(i == toCol) 
 
               newTS.GridColumnStyles.Add(oldTS.GridColumnStyles[fromCol]); 
 
          if(i != fromCol && fromCol > toCol) 
 
               newTS.GridColumnStyles.Add(oldTS.GridColumnStyles[i]);      
 
     } 
  
     _dataGrid.TableStyles.Remove(oldTS); 
 
     _dataGrid.TableStyles.Add(newTS); 
 

  
//sample usage 
 
private void button1_Click(object sender, System.EventArgs e) 
 

 
     MoveColumn(myDataGrid, "Customers", 3, 1); 
 

 

解决方案 »

  1.   

    排序其实是DataView的事,或者你可以在标题里的单击事件中取得当前的排充列
      

  2.   

    在datagrid中一旦设置了可以排序,在程序运行,当按点击某一列排序是不是相应会改变datagrid所绑定的的数据源 dataset中的数据顺序呢?
      

  3.   

    移动datagrid的列
    http://www.syncfusion.com/FAQ/WinForms/FAQ_c44c.asp#q764q
      

  4.   

    点击排序后,dataset的数据是不会改变顺序的。
    例如:
    DataTable dt = (DataTable) this.dataGrid1.DataSource; 
    DataRow dr = dt.Rows[this.dataGrid1.CurrentRowIndex); 
    以上方法可以在没有排序时取出正确的当前数据。但排序后就不行了。
    要用  
    BindingManagerBase bm = this.dataGrid1.BindingContextr[this.dataGrid1.DataSource, this.dataGrid1.DataMember]; 
    DataRow dr = ((DataRowView)bm.Current).Row; 
      
      

  5.   

    BindingManagerBase bm = this.dataGrid1.BindingContextr[this.dataGrid1.DataSource, this.dataGrid1.DataMember]; 
    DataRow dr = ((DataRowView)bm.Current).Row; 
     
    bm是不是会得到是datagrid排序后的记录集呢?让我来试一下。