DevExpress.XtraGrid中关于排序的一点经验总结

1、指定给一列进行排序

dgvContent.Columns["SomeFieldName"].SortOrder = DevExpress.Data.ColumnSortOrder.Ascending;


 2、对于已经排好序的数据,想不让它进行排序或者另外指定排序

dgvContent.ClearSorting();

3、指定表格只按特殊列进行排序

代码
private void dgvContent_EndSorting(object sender, System.EventArgs e) {
   GridView view 
= sender 
as GridView;
   
string sort = (view.DataSource as DataView).Sort;
   
if (sort != string.Empty)
      (view.DataSource 
as DataView).Sort = "[Col1]," + sort;

4、在点击表头进行排序时弹出对话框,让用户确认是否排序

 

代码
private void dgvContent_MouseUp(object sender, MouseEventArgs e) 
{
           
if(e.Button != MouseButtons.Left || e.Clicks > 1
                  
return;

         GridView view 
= sender as GridView;
         
if(view.State != GridState.ColumnDown) 
              
return;

            
         Point p 
= view.GridControl.PointToClient(MousePosition);

         GridHitInfo info 
= view.CalcHitInfo(p);
         
if(info.HitTest == GridHitTest.Column) 
       { 
                
               
if(MessageBox.Show(string.Format("Sort by {0} column?", info.Column.Caption), 
                    
"Confirmation", MessageBoxButtons.YesNo) != DialogResult.Yes) 
              {
                        ((DevExpress.Utils.DXMouseEventArgs)e).Handled 
= true;
                    
this.BeginInvoke(new MethodInvoker(view.LayoutChanged));
                
             }

        }

   }

5、将排序的信息显示在分组表头

 

代码
private void dgvContent_MouseUp(object sender, MouseEventArgs e)
        {
            
if (e.Button != MouseButtons.Left || e.Clicks > 1return;
            GridView view 
= sender as GridView;
            
if (view.State != GridState.ColumnDown) return;
            Point p 
= view.GridControl.PointToClient(MousePosition);
            GridHitInfo info 
= view.CalcHitInfo(p);
            
if (info.HitTest == GridHitTest.Column)
            {                
                
if (info.Column.SortOrder != DevExpress.Data.ColumnSortOrder.Ascending || info.Column.SortIndex != view.SortInfo.Count - 1)
                {
                    info.Column.SortIndex 
= view.SortInfo.Count;
                    info.Column.SortOrder 
= DevExpress.Data.ColumnSortOrder.Ascending;
                }
                
else if (info.Column.SortOrder == DevExpress.Data.ColumnSortOrder.Ascending)
                {
                    info.Column.SortOrder 
= DevExpress.Data.ColumnSortOrder.Descending;
                }
                
if(info.Column.SortOrder==DevExpress.Data.ColumnSortOrder.Ascending)
                    dgvContent.GroupPanelText 
= "拖拉一列 按" + info.Column.Caption+"升序";
                
if (info.Column.SortOrder == DevExpress.Data.ColumnSortOrder.Descending)
                    dgvContent.GroupPanelText 
= "拖拉一列 按" + info.Column.Caption + "降序";
                ((DevExpress.Utils.DXMouseEventArgs)e).Handled 
= true;
                
this.BeginInvoke(new MethodInvoker(view.LayoutChanged));

            }

6、清除其他列的排序

 

代码
                for (int i = 0; i < view.Columns.Count; i++)
                {
                    
if (!view.Columns[i].Equals(info.Column))
                    {
                        view.Columns[i].SortOrder 
= DevExpress.Data.ColumnSortOrder.None;
                    }
                }


posted @ 2010-06-16 09:29  李弼翀  阅读(3466)  评论(1编辑  收藏  举报