<<XtraGrid Use Tips>> (2)

8. 在最左侧显示行号

 view.CustomDrawRowIndicator += this.GridView_CustomDrawRowIndicator;

view.RowCountChanged += this.GridView_RowCountChanged;

protected void GridView_CustomDrawRowIndicator(object sender, RowIndicatorCustomDrawEventArgs e)
        {

            e.Appearance.TextOptions.HAlignment 
= DevExpress.Utils.HorzAlignment.Far;

            
if (e.Info.IsRowIndicator)
            {
                
if (e.RowHandle >= 0)
                {
                    e.Info.DisplayText 
= (e.RowHandle + 1).ToString();
                }
            }
        }

protected void GridView_RowCountChanged(object sender, EventArgs e)
        {

        
            GridView gv 
= sender as GridView;
            
if (gv == null)
                
return;
            
if (gv.RowCount <= 0)
            {
                gv.IndicatorWidth 
= -1;
            }
            
else
            {
                gv.IndicatorWidth 
= 25 + Convert.ToInt32(Math.Floor(Math.Log(gv.RowCount, 10)) + 1* 5;
            }
        }

 

 

 


9. 添加右键菜单

view.ShowGridMenu += this.GridView_ShowGridMenu;


protected void GridView_ShowGridMenu(object sender, GridMenuEventArgs e)
        {

            
if (e.MenuType == DevExpress.XtraGrid.Views.Grid.GridMenuType.Column)
            {
                DevExpress.XtraGrid.Menu.GridViewColumnMenu menu 
= e.Menu as GridViewColumnMenu;

                DXMenuItem saveItem 
= new DXMenuItem("&Save Layout"new EventHandler(OnSaveLayoutMenuItemClicked));
                saveItem.BeginGroup 
= true;
                saveItem.Tag 
= sender;
                menu.Items.Add(saveItem);

                DXMenuItem loadItem 
= new DXMenuItem("&Load Default Layout"new EventHandler(OnLoadDefaultLayoutMenuItemClicked));
                loadItem.Tag 
= sender;
                menu.Items.Add(loadItem);

                DXMenuItem exportToXlsItem 
= new DXMenuItem("&Export To Xls"new EventHandler(OnExportToXlsMenuItemClicked));
                exportToXlsItem.Tag 
= sender;
                menu.Items.Add(exportToXlsItem);

                DXMenuItem exportToXlsxItem 
= new DXMenuItem("E&xport To Xlsx"new EventHandler(OnExportToXlsxMenuItemClicked));
                exportToXlsxItem.Tag 
= sender;
                menu.Items.Add(exportToXlsxItem);

            }
        }

 

 

需要在ValidateRow事件中进行验证,效果(当右键点击column的时候,添加4个MenuItem)


 

10. 验证某行的输入值

需要在ValidateRow事件中进行验证

private void gridViewMain_ValidateRow(object sender, DevExpress.XtraGrid.Views.Base.ValidateRowEventArgs e)
        {
            
try
            {


                
if (string.IsNullOrEmpty( this.gridViewMain.GetRowCellDisplayText(e.RowHandle ,this.gridColumn1)))
                {
                    
this.ShowExclamationMessage("Must input gridColumn1.");

                    
this.gridViewMain.FocusedColumn = this.gridColumn1;

                    e.Valid 
= false;

                    
return;

                }

             
            }
            
catch (Exception ex)
            {

                
this.ProcessException(ex);
            }
            
finally
            {

            }
        }

 

 这样做了还是会弹出Grid自带的确认框,如果不要弹出再添加以下事件

        private void gridViewMain_InvalidRowException(object sender, DevExpress.XtraGrid.Views.Base.InvalidRowExceptionEventArgs e)
        {

            
try
            {
                e.ExceptionMode 
= DevExpress.XtraEditors.Controls.ExceptionMode.NoAction;

            }
            
catch (Exception ex)
            {

                
this.ProcessException(ex);
            }
            
finally
            {
                
            }

        }

 

 

11. Binding的值可以是属性的属性(对泛型支持不好)

this.gridColumn4.FieldName = "Function.FunctionCode";

12. 导出到Excel完整代码(优化了速度)

private static void ExportToEx(String filename, string ext, BaseView view)
        {
            Cursor currentCursor 
= Cursor.Current;

            
try
            {
                Cursor.Current 
= Cursors.WaitCursor;
                
if (ext == "rtf")
                {
                    view.ExportToRtf(filename);
                }
                
if (ext == "pdf")
                {
                    view.ExportToPdf(filename);
                }
                
if (ext == "mht")
                {
                    view.ExportToMht(filename);
                }
                
if (ext == "htm")
                {
                    view.ExportToHtml(filename);
                }
                
if (ext == "txt")
                {
                    view.ExportToText(filename);
                }
                
if (ext == "xls")
                {

                    XlsExportOptions item 
= new DevExpress.XtraPrinting.XlsExportOptions();
                    item.ShowGridLines 
= false;
                    item.Suppress256ColumnsWarning 
= true;
                    item.Suppress65536RowsWarning 
= true;
                    item.ExportHyperlinks 
= false;
                    item.TextExportMode 
= TextExportMode.Text;

                    view.ExportToXls(filename,item);
                }
                
if (ext == "xlsx")
                {
                    XlsxExportOptions item
=new XlsxExportOptions(TextExportMode.Text ,false ,false);
                    view.ExportToXlsx(filename, item);
                }
            }
            
finally
            {
                Cursor.Current 
= currentCursor;
            }


        }

 

 

13. 删除一行记录

比如选中某一行的时候,你按CTRL+Del删除,需要在ProcessGridKey中处理

private void gridMain_ProcessGridKey(object sender, KeyEventArgs e)
        {
            
try
            {
                
if (e.KeyCode == Keys.Delete && e.Control && this.gridViewMain.FocusedRowHandle >= 0)
                {
                    
object item = this.gridViewMain.GetRow(this.gridViewMain.FocusedRowHandle) ;

                    
if (item == null)
                    {
                        
return;
                    }
                    
else
                    {
                        
if (this.ShowYesNoQuestionMessage(string.Format("Are you sure to delete the row?")) == DialogResult.Yes)
                        {

                            
//do delete

                        }
                    }


                }
            }
            
catch (Exception ex)
            {

                
this.ProcessException(ex);
            }
            
finally
            {

            }
        }

 

 

14. 设置某个单元格是否可编辑

光设置属性不可以的,只能设置整个GridView或某一列是否可编辑(Editable).在ShowingEditor事件中处理

private void gridViewMain_ShowingEditor(object sender, CancelEventArgs e)
        {
            
try
            {


                
if (this.gridViewMain.FocusedRowHandle < 0 )
                {
                    
return;
                }

                Object item 
= this.gridViewMain.GetRow(this.gridViewMain.FocusedRowHandle);

                
if (this.gridViewMain.FocusedColumn.Equals (this.gridColumn1) && Condition(item))
                {
                    
//Item满足一定的条件,不允许编辑
                    e.Cancel = true;
                    
return;
                }

                

            }
            
catch (Exception ex)
            {

                
this.ProcessException(ex);
            }
            
finally
            {
                
            }
        }

 

 看灰机

posted @ 2010-08-05 16:53 MasterCai 阅读(...) 评论(...) 编辑 收藏