xtragrid 上移下移

xtragrid 实现焦点行的上移下移主要还是对gridviw绑定的数据表的操作,如果只是简单的显示而不做保存操作那么比较简单,直接把绑定的数据表中的前后两行更换下数据,具体如下:

 

ExpandedBlockStart.gif 代码
  private   void  UpOrDown(DevExpress.XtraGrid.Views.Grid.GridView GridView,  bool  ISUpOrDown, string  TabName)
        {
            DataRow row 
=  GridView.GetFocusedDataRow();
            
if  (ISUpOrDown)
                GridView.MovePrev();
            
else
                GridView.MoveNext();
            DataRow Pretrow 
=  GridView.GetFocusedDataRow();
            DataRow IRow 
=  lblPrintDS1.Tables[TabName].NewRow();
            
for  ( int  k  =   0 ; k  <  row.ItemArray.Length; k ++ )
                IRow[k] 
=  Pretrow[k];
            
for  ( int  i  =   0 ; i  <  row.ItemArray.Length; i ++ )
                Pretrow[i] 
=  row[i];
            
for  ( int  j  =   0 ; j  <  row.ItemArray.Length; j ++ )
                row[j] 
=  IRow[j];
        }

 

 

 

------------------------------------------------------------------------------------------------------------------------------------------- 

但是如果所作的上移下移要保存到数据库则要麻烦些,比如gridview绑定的表:datatable 包含“行号”一列作为主键,具体如下:

 

ExpandedBlockStart.gif 代码
   private   void  ItemRowUpOrDown( bool  isUP)
        {
            DataRow fRow 
=  GridView.GetDataRow(GridView.FocusedRowHandle);
            DataRow row;
            
if  (isUP)
            {
// 上移
                row  =  GridView.GetDataRow(GridView.FocusedRowHandle  -   1 );
            }
            
else
            {
// 下移
                row  =  GridView.GetDataRow(GridView.FocusedRowHandle  +   1 );
            }
            
if  (fRow  ==   null   ||  row  ==   null return ;
            
if  ( ! fRow[ " itemid " ].ToString().Trim().Equals(row[ " itemid " ].ToString().Trim()))
            {
                
if  (isUP)
                    MessageBoxShow.ShowProMessage(
" 选择的商品已经移到改单据的第一行 " , StrTitle);
                
else
                    MessageBoxShow.ShowProMessage(
" 选择的商品已经移到改单据的最后一行 " , StrTitle);
                
return ;
            }
            
int  fNO  =  Convert.ToInt32(fRow[ " SORTNO " ]);
            
int  NO  =  Convert.ToInt32(row[ " SORTNO " ]);
            fRow[
" SORTNO " =  NO;
            row[
" SORTNO " =  fNO;
            gridControl1.Refresh();
            gridControl1.RefreshDataSource();
            GridView.RefreshData();
            DataView dv 
=  (DataView)GridView.DataSource;
            
if  (dv  !=   null )
            {
                dv.Sort 
=   " SORTNO asc " ;
            }
            GridView.ClearSelection();
            
if  (isUP)
            {
                GridView.FocusedRowHandle 
=  NO  -   1 ;
                GridView.SelectRow(NO 
-   1 );
            }
            
else
            {
                GridView.FocusedRowHandle 
=  fNO;
                GridView.SelectRow(fNO);
            }
        }

 

 

 

 

 ----------------------------------------------------------------------------------------------------------------------------------

一行一行的上移下移还是比较简单的比较只是换下行号,但如果gridview根据某一两列分组 要实现一组一组的上移下移比较麻烦!

原因是gridview 按某列分组后,(目前不知道什么原因),gridview会根据分组列自动升序排序 (强制的)。解决的办法比较麻烦死板 是在分组的第一列自动添加

一个序列。  如下图 选择测试单据后上移效果

 

 

假设一张表 datatable dt 有七列列 :

“单据名称 slipname”、“单据名称旧(和单据名称完全一样oldslipName ”、“单据日期 slipdate”、“商品编码 itemcode”、“商品id itemid”、“单据id slipid”、“行号 sortno”。

现在 根据  单据名称、单据日期分组(一条单据下有一条或多条商品)代码如下:

第一步: 

 

  private   void  InertOrderValue()
        {
            
int  no  =   0 ;
            
string  strCD  =   string .Empty;
            
bool  isSame  =   false ;
            
for  ( int  i  =   0 ; i  <  dt.Rows.Count; i ++ )
            {
                DataRow dr 
=  dt.Rows[i];
                
if  (dr[ " slipid " ].ToString().Trim()  ==  strCD)
                {
                    isSame 
=   true ;
                }
                
else
                    isSame 
=   false ;
                strCD 
=  dr[ " slipid " ].ToString().Trim();
                
if  (isSame)
                {
// 自定义 【000000000】
                     string  str  =  no.ToString().PadLeft( 9 ' 0 ' );
                    str 
=   string .Format( " [{0}] " , str);
                    dr[
" slipname " =  str  +  dr[ " oldslipName " ];
                }
                
else
                {
                    no 
=  no  +   1 ;
                    
string  str  =  no.ToString().PadLeft( 9 ' 0 ' );
                    str 
=   string .Format( " [{0}] " , str);
                    dr[
" slipname " =  str  +  dr[ " oldslipName " ];
                }
            }
        }

 

 

 

 

 第二步:上移下移

 

ExpandedBlockStart.gif 代码
  private   void  SlipRowUpOrDown( bool  isUP)
        {
            DataRow fRow 
=  GridView.GetDataRow(GridView.FocusedRowHandle);
            DataRow row;
            
int  fRowHandle  =  GridView.FocusedRowHandle;
            
if  (isUP)
            {
// 上移
                row  =  GridView.GetDataRow(GridView.FocusedRowHandle  +   1 );
                fRowHandle 
=  GridView.FocusedRowHandle  +   1 ;
            }
            
else
            {
// 下移
                row  =  GridView.GetDataRow(GridView.FocusedRowHandle  -   1 );
               fRowHandle
=  GridView.FocusedRowHandle  - 1 ;
            }
            
if  (fRow  !=   null   &&  row  ==   null )
            {
                
return ;
            }
            
object  selGroupRow  =  GridView.GetGroupRowValue(GridView.FocusedRowHandle);
            
if  (selGroupRow  !=   null )
            {
                
if  ( string .IsNullOrEmpty(selGroupRow.ToString().Trim()))
                    
return ;
                
if  ( ! selGroupRow.ToString().Trim().Contains( " [ " ))
                    
return ;
            }
            
int  start  =  fRow[ " slipname " ].ToString().Trim().IndexOf( " ] " );
            
string  uperName  =  fRow[ " slipname " ].ToString().Trim().Substring( 0 , start + 1 ); // 上一行的单据名称
             string  downName  =  row[ " slipname " ].ToString().Trim().Substring( 0 , start + 1 ); // 下一行的单据名称
             if  ( ! fRow[ " slipid " ].ToString().Trim().Equals(row[ " slipid " ].ToString().Trim()))
            {
                DataRow[] thisDr 
=  dt.Select( string .Format( " slipid='{0}' " , fRow[ " slipid " ].ToString().Trim()));
                DataRow[] uperDr 
=  dt.Select( string .Format( " slipid='{0}' " , row[ " slipid " ].ToString().Trim()));
                
for  ( int  i  =   0 ; i  <  thisDr.Length; i ++ )
                {
                    thisDr[i][
" slipname " =  downName  +  fRow[ " oldslipName  " ];
                }
                
for  ( int  i  =   0 ; i  <  uperDr.Length; i ++ )
                {
                    uperDr[i][
" slipname " =  uperName  +  row[ " oldslipName  " ];
                }
            }
          
            GridView.ClearSelection();
            GridView.FocusedRowHandle 
=  fRowHandle;
            GridView.SelectRow(fRowHandle);
        }

 

 

 

 

 第三步:重构数据集

 

ExpandedBlockStart.gif 代码
    private   void  OrderDataSet( string  orderColumn)
        {
            DataTable dtt 
=  dt.Clone();
            dtt.Merge(dt);
            DataView dvv 
=   new  DataView(dtt);
            dvv.Sort 
=  orderColumn;
           dt.Clear();
          dt.Merge(dvv.ToTable());
            SortRowNo(dt, 
" MSTE937_SORTNO " ); // 排序
        }

 

 

第四步:隐藏列名 

 

ExpandedBlockStart.gif 代码
private   void  GridVPrm_CustomColumnDisplayText( object  sender,DevExpress.XtraGrid.Views.Base.CustomColumnDisplayTextEventArgs e)
        {
         
if  (e.Column.Equals(slipname))
            {
// 单据名称
                StringBuilder sb  =   new  StringBuilder();
                sb.Append(dr[
" oldslipName " ].ToString().Trim());
                e.DisplayText 
=  sb.ToString();
            }
        }

 

 

 

 

 

 

转载于:https://www.cnblogs.com/6303c/archive/2010/05/06/1728771.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值