zoukankan      html  css  js  c++  java
  • GridControl 控件笔记

    Ø  简介

    这是几年前的做 DevExpress 控件开发时做的笔记,现在由于时间关系就不去整理了。

    给予初学者提供一些参考,少走弯路。

     

    this.gridView1.Appearance属性可以获取行对象??this.gridView1.Appearance.OddRow.BackColor = Color.White; 可设置背景色?

     

    一、GridControl

    1) 设置GridView的样式(滚动条大小也会随着变化)

    gridControl.LookAndFeel.UseDefaultLookAndFeel = false;

    gridControl.LookAndFeel.SkinName = "Office 2010 Blue";  //可选项:DevExpress Style,VS2010,Seven Classic,Office 2010 Blue,Office 2010 Blue,Office 2010 Black,Office 2010 Silver,Office 2013

    2) 设置GridView下面显示导航和分页 gridControl.UseEmbededNavigator=True; 就有导航和编辑按钮了。

     

    二、GridView

    注意:设置第12项后,整个gridView单元格都为只读,然后:1、可以添加MouseDown事件;2gridView可以使用鼠标滚动轮

    1、属性

    1) 设置是否显示自动过滤行,设置属性 this.gridView1.OptionsView.ShowAutoFilterRow = true;  

    2) 设置是否自动列宽,设置属性 this.gridView1.OptionsView.ColumnAutoWidth = false;

    3) 允许单元格合并,设置属性 this.gridView1.OptionsView.ShowAutoFilterRow = true;

    4) 显示页脚,设置属性 this.gridView1.OptionsView.ShowFooter = true;

    5) 设置是否显示表头分组框,设置属性 this.gridView1.OptionsView.ShowGroupPanel = false; 默认true

    6) 显示指示器(第一列),设置属性 this.gridView1.OptionsView.ShowIndicator = false; 默认true

    7) 显示最上端表格名称,设置属性 this.gridView1.OptionsView.ShowViewCaption = true;

    8) 设置可添加新行的上/下位置或者不显示  this.gridView1.OptionsView.NewItemRowPosition = NewItemRowPosition.Bottom;

    10) 表头文本设置 gridView.GroupPanelText = "表头文本";

    11) 设置是否可编辑,设置属性 this.gridView1.OptionsBehavior.Editable = false;    //鼠标的滚动轮滚动时gridView的滚动条也跟着滚动,需要设置

    12) Editable还可以设置gruidView单元格不可编辑 this.gridView1.OptionsBehavior.Editable = false;

    13) 设置是否显示过滤器(默认显示),设置属性 this.grid,设置属性.OptionsView.ShowFilterPanelMode = DevExpress.XtraGrid.Views.Base.ShowFilterPanelMode.Never;

    14) 设置每一列不能排序 gridView1.OptionsCustomization.AllowSort = false;

    15) 获取光标列字段名 gridView1.FocusedColumn.FieldName;

    16) 获取光标行句柄 gridView1.FocusedRowHandle;  //如果为多选时,光标行也只会有一行。

    17) 设置第一列(序号列)宽度 gridView1.IndicatorWidth = 40;

    18) 设置最上端中间显示表格名称的字体大小和颜色 this.gridView1.ViewCaption = "表格名称";    //默认为"",如果为子明细,默认与父GridView.ViewCaption一致。

    gridView1.Appearance.ViewCaption.Options.UseFont = true;

    gridView1.Appearance.ViewCaption.Font = new System.Drawing.Font("Tahoma", 10F);

    gridView1.Appearance.ViewCaption.Options.UseForeColor = true;

    gridView1.Appearance.ViewCaption.ForeColor = System.Drawing.Color.Coral;

    19) 获取gridView中的行数 this.gridView1.RowCount; 或者 this.gridView1.DataRowCount;

    20) 设置是否只读,设置属性 this.gridView1.OptionsBehavior.ReadOnly = true;

    21)设置是否可以多选,默认为falsethis.gridView1.OptionsSelection.MultiSelect = true | false;

    22)设置导出Excel自动列宽,设置this.gridView1.OptionPrint.AutoWidth = false;

    23)设置自动行高(若某列文本项需要自动换行时,需在列上设置RepositoryItemMemoEdit),设置 this.OptionsView.RowAutoHeight = true;

    24)设置是否显示底部(汇总栏),设置:gridView1.ShowFooter = true;   //默认为false

    25)获取查找面板是否显示:gridView1.IsFindPanelVisible;

    26)设置自定义(列选择)窗体显示相关属性:gridView1.CustomizationFormBounds;

    27)设置垂直滚动条位置:gridView1.TopRowIndex = 3;

    28)设置水平滚动条位置:gridView1.LeftCoord = 3;

    29)设置 GridView 列头居中显示(v14.2)

        1. 设置某一列:gridView1.Columns["ColumnName"].AppearanceHeader.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center;

        2. 设置所有列:gridView1.Appearance.HeaderPanel.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center;

    30)设置 GridView 内容居左显示(v14.2)gridView1.Columns["SerialId"].AppearanceCell.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Near;

     

    2、方法

    1) 添加新行方法 gridView1.AddNewRow();

    2) 根据绑定的数据源 自动产生列/绑定数据源

       DataTable dt = LinqToDataTable.ToDataTable(true, new List<ProSubPreTreatL>() { new ProSubPreTreatL() });

       dt.Rows.RemoveAt(0);

       gridView1.PopulateColumns(dt);

       gridControl1.DataSource = dt;

    3) 数据源绑定datatable,添加一行后可以获得dataRow gridView.GetFocusedDataRow();

    4) 获取单元格的值方式1 this.gridView1.GetFocusedRowCellValue("Hall9VNs").ToString();

    5) 获取单元格的值方式2 this.gridView1.GetRowCellValue(e.RowHandle, "FieldName").ToString();

    6) 获取单元格的值方式3 this.gridView1.GetRowCellValue(this.gridView1.FocusedRowHandle, "FieldName").ToString();

    7) 刷新所绑定的数据源 this.gridView1.RefreshData();

    8) 检查gridView中数据是否有错误(数据是否有效) this.gridView1.ValidateEditor();    //有效返回true,否则false

    9) gridView添加过滤条件

    StringBuilder filterString = new StringBuilder("[SerialID] = '1' OR [SerialID] = '2'");    //过滤字符串

    ViewColumnFilterInfo viewFilterInfo = new ViewColumnFilterInfo(gridView1.Columns["SerialID"], new ColumnFilterInfo(filterString.ToString()));

    gridView1.ActiveFilter.Clear();        //清除所有过滤条件

    gridView1.ActiveFilter.Add(viewFilterInfo); //添加过滤条件

    示例1 (模糊过滤QCMark字段)(建议使用这种方式添加过滤条件,这样就可以单独为每个字段添加过滤条件)

    gridView1.Columns["QCMark"].FilterInfo = new ColumnFilterInfo("[QCMark] LIKE 'F%'");

    this.gridView1.Columns["QCMark"].ClearFilter(); //清除QCMark字段的过滤条件

    10)保存排版和获取排版方法:SaveLayoutToXml()RestoreLayoutFromXml()

     

    示例2 (过滤QCMark某个字段为DBnull.Value的数据行

    ViewColumnFilterInfo viewFilterInfo = new ViewColumnFilterInfo(gridView1.Columns["QCMark"], new ColumnFilterInfo(bandedGridView1.Columns["QCMark"], DBNull.Value));

    示例3 (过滤QCMark字段为DBnull.Value 或者 为''的数据行

    ViewColumnFilterInfo viewFilterInfo = new ViewColumnFilterInfo(gridView1.Columns["QCMark"], new ColumnFilterInfo("[QCMark] Is Null OR [QCMark] = ''"));

    示例3 (过滤QCMark字段不等于A并且不等于A/S的数据行

    ViewColumnFilterInfo viewFilterInfo = new ViewColumnFilterInfo(gridView1.Columns["QCMark"], new ColumnFilterInfo("[QCMark] <> 'A' AND [QCMark] <> 'A/S'"));

    添加过滤对象

    gridView1.ActiveFilter.Add(viewFilterInfo); //添加过滤条件

    示例4 (将精确过滤改为模糊过滤) gridView1.ActiveFilterString = gridView1.ActiveFilterString.Replace("StartsWith", "Contains");

     

    3、事件

    1) 单元值改变之前 CellValueChanging(object sender, CellValueChangedEventArgs e),手动输入会触发,时机点为值改变时,此时DataTable.Rows[0]["Name"]为原值,e.Value为新值。使用gridView.SetRowCellValue()方法不会触发。DataTable.Rows[0]["Name"] = "张三"也不会触发。

    2) 单元值改变之后 CellValueChanged(object sender, CellValueChangedEventArgs e),手动输入会触发,时机点为光标单元格光标失去时,此时DataTable.Rows[0]["Name"]为新值,e.Value为新值。使用gridView.SetRowCellValue()方法会触发。DataTable.Rows[0]["Name"] = "张三"也不会触发。

    3) 单元格单击事件 RowClick (如果需要每个单元格都触发事件,需要设置this.gridView1.OptionsBehavior.Editable = false;)

    4) 鼠标按下事件,只要鼠标在GridView范围内按下就会触发此事件 MouseDown (如果需要每个单元格都触发事件,需要设置this.gridView1.OptionsBehavior.Editable = false;)

    5) 行或者单元格单击事件 RowCellClick (如果需要每个单元格都触发事件,需要设置this.gridView1.OptionsBehavior.Editable = false;)

    private void gridView1_MouseDown(object sender, MouseEventArgs e)

    {

            DevExpress.XtraGrid.Views.Grid.ViewInfo.GridHitInfo hInfo = gridView_ListTemplate.CalcHitInfo(new Point(e.X, e.Y));

            if (e.Button == MouseButtons.Left && e.Clicks == 2)

            {

                //判断光标是否在行范围内

                if (hInfo.InRow){ }

            }

    }

    5) 新增行时(不包含数据源绑定) InitNewRow(object sender, InitNewRowEventArgs e)

    6) 修改单元格事触发事件(可以用于验证)

    gridView1.ValidatingEditor += new BaseContainerValidateEditorEventHandler(gridView1_ValidatingEditor);

    void gridView1_ValidatingEditor(object sender, BaseContainerValidateEditorEventArgs e)

    {

        int value;

        if (int.TryParse(Convert.ToString(bcveea.Value), out value) && value < 1 || value > 25)

        {

            bcveea.ErrorText = "请输入1~25之间的数字";

            bcveea.Valid = false;

            formProSerial.IsError = true;

        }

        else

            formProSerial.IsError = false;

    }

    7) gridView的光标行改变后(包括使用鼠标和使用键盘改变的)

    gridView1.FocusedRowChanged += new DevExpress.XtraGrid.Views.Base.FocusedRowChangedEventHandler(gridView1_FocusedRowChanged);

    8) gridView过滤行过滤单元格值改变后 this.gridView1.ColumnFilterChanged += new EventHandler(delegate(object sender, EventArgs e) { } );

    9gridView列标题右键菜单创建过滤编辑器时 this.gridView1.FilterEditorCreated;

    10)过滤编辑器创建时 this.gridView1.FilterEditorCreated;

    11)弹出菜单显示时 this.gridView1.PopupMenuShowing;

    12)显示自定义(列选择)窗体时 this.gridView1.ShowCustomizationForm;

     

    三、GridColumn

    1) 设置列标题文本,设置属性 DevExpress.XtraGrid.Columns.GridColumn.Caption='列标题'

    2) 设置列数据绑定字段名,设置属性 DevExpress.XtraGrid.Columns.GridColumn.FieldName='数据绑定字段名'

    3) 设置列是否只读 DevExpress.XtraGrid.Columns.GridColumn.OptionsColumn.ReadOnly = true;

    4) 设置列是否显示 DevExpress.XtraGrid.Columns.GridColumn.Visible = false;

    5) 设置列宽度 DevExpress.XtraGrid.Columns.GridColumn.Width = 100; //必须先设置 gridView.OptionsView.ColumnAutoWidth = false;

    6) 设置列头显示位置 DevExpress.XtraGrid.Columns.GridColumn.AppearanceHeader.TextOptions.HAlignment = HorzAlignment.Center;

    7) 设置单元格显示位置 DevExpress.XtraGrid.Columns.GridColumn.AppearanceCell.TextOptions.HAlignment = HorzAlignment.Near;

    8) 设置列的数据类型 DevExpress.XtraGrid.Columns.GridColumn.DisplayFormat.FormatType = FormatType.DateTime; //默认FormatType.None

    9) 绑定DataTable后,自动设置列的数据类型 DevExpress.XtraGrid.Columns.GridColumn.DisplayFormat.FormatType = FormatType.Custom;

    10) 设置列的排序模式和方式:

        设置列的排序模式(按照数组,还是字符)this.gridView1.Columns[3].SortMode = DevExpress.XtraGrid.ColumnSortMode.Default;

        设置列的排序方式:this.gridView1.Columns[3].SortOrder = DevExpress.Data.ColumnSortOrder.Descending;    //默认ColumnSortOrder.None

    11) 设置某一列不允许排序 this.gridView1.Columns[3].OptionsColumn.AllowSort = DefaultBoolean.False;

    12) 设置某一列冻结(拖动左右滚动条时,此列的不会移动) this.gridView1.Columns[1].Fixed = DevExpress.XtraGrid.Columns.FixedStyle.Left;  //冻结某一列

    13)格式化单元格 this.gridView_ListTemplate.Columns[5].DisplayFormat.FormatString = "yyyy/MM/dd";

    14)获取或设置该列是否在该列隐藏时显示在自定义(列选择)窗体中。 gridColumn.OptionsColumn.ShowInCustomizationForm = false; //默认true

    15)获取某一列的标题是否可以显示在自定义(列选择)中。gridColumn.CanShowInCustomizationForm;

     

    四、为GridColumn列指定控件类型

    1) 指定为ButtonEdit(按钮编辑),列的ColumnEdit属性选择为RepositoryItemButtonEdit类型的实例

    是否启用按钮编辑控件 repositoryItemButtonEdit1.Buttons[0].Enabled = false;

    设置不显示文本框的按钮 this.repositoryItemButtonEdit1.TextEditStyle = DevExpress.XtraEditors.Controls.TextEditStyles.HideTextEditor;

     

    2) 指定为TextEdit(文本框),列的ColumnEdit属性选择为RepositoryItemTextEdit类型的实例

    设置单元格输入数据验证 this.repositoryItemTextEdit1.Mask.EditMask = "\d{1,15}(.{1}\d{1,25})?";

                        this.repositoryItemTextEdit1.Mask.MaskType = DevExpress.XtraEditors.Mask.MaskType.RegEx;

     

    3) 指定为DateEdit(日期控件),列的ColumnEdit属性选择为RepositoryItemDateEdit类型的实例

    设置单元格选择的日期格式    this.repositoryItemDateEdit1.Mask.EditMask = "yyyy-MM-dd";

                    this.repositoryItemDateEdit1.Mask.UseMaskAsDisplayFormat = true;  //默认为false,如果不设置会参数,时间值。

     

    4) 指定为ComboBox(下拉框),列的ColumnEdit属性选择为RepositoryItemComboBox类型的实例

    设置下拉框不可编辑 this.repositoryItemComboBox1.TextEditStyle = DevExpress.XtraEditors.Controls.TextEditStyles.DisableTextEditor;

    绑定数据 this.repositoryItemComboBox1.Items.AddRange(object[]);

     

    5) 指定为CheckBox(复选框/单选框),列的ColumnEdit属性选择为RepositoryItemCheckEdit类型的实例

    设置复选框文本 1repositoryItemCheckEdit1.GlyphAlignment = DevExpress.Utils.HorzAlignment.Default;

               2repositoryItemCheckEdit1.Caption = "启用";

     

    其他记录:

    (三)设置gridview只读属性options->optionsbehavior->editablefalse 设置单击选中该列,而不是单元格options->optionsSelction ->EnableApperanceFocusedCellfalse

     

    (四)将gridview中某一字段设置为RepositoryItemHyperLinkEdit,要触发该链接的事件,可以在In_place Editor Repository中触发click 事件。但是,触发该事件的同时,gridview中的OptionBehavior->Editable必须设置为true

     

    (五)在gridview中绑定内存表,要改变焦点行某一字段的值 '根据gridview的焦点行获取内存表的行数 Dim rowGoMain As DataRow = gridview.GetDataRow(sender.FocusedRowHandle) '修改该行的值 rowGoMain("字段名") = "aa"

     

    (六)对DataSet进行查询: ds.Tables[0].DefaultView.RowFilter = "查询条件";

     

    (七) 设置展开第一行的字表 gridview.SetMasterRowExpanded(1, True)

     

    (八)设置gridview某一列汇总:选中该列,在SummaryItem设置相应属性即可。DisplayFormat为显示的格式,FieldName为需要汇总的字段……

     

    (九)设置gridview单元格自动换行:在单元格中一个Memo控件,columnedit->new->MemoEdit,gridview中设置optionsview->rowautoheight=true

     

    this.gvSchemesDescription.FocusRectStyle = DevExpress.XtraGrid.Views.Grid.DrawFocusRectStyle.RowFocus;

                this.gvSchemesDescription.OptionsBehavior.AllowAddRows = DevExpress.Utils.DefaultBoolean.False;

                this.gvSchemesDescription.OptionsBehavior.AllowDeleteRows = DevExpress.Utils.DefaultBoolean.False;

                this.gvSchemesDescription.OptionsBehavior.AllowFixedGroups = DevExpress.Utils.DefaultBoolean.False;

                this.gvSchemesDescription.OptionsBehavior.AutoSelectAllInEditor = false;

                this.gvSchemesDescription.OptionsCustomization.AllowFilter = false;

                this.gvSchemesDescription.OptionsCustomization.AllowGroup = false;

                this.gvSchemesDescription.OptionsCustomization.AllowQuickHideColumns = false;

                this.gvSchemesDescription.OptionsFilter.AllowFilterEditor = false;

                this.gvSchemesDescription.OptionsFilter.AllowMultiSelectInCheckedFilterPopup = false;

                this.gvSchemesDescription.OptionsMenu.EnableColumnMenu = false;

                this.gvSchemesDescription.OptionsView.ShowFilterPanelMode = DevExpress.XtraGrid.Views.Base.ShowFilterPanelMode.Never;

                this.gvSchemesDescription.OptionsView.ShowGroupExpandCollapseButtons = false;

                this.gvSchemesDescription.OptionsView.ShowGroupPanel = false;

     

    1. 添加自动行号

    this.gridView1.IndicatorWidth = 50; //设置显示行号的列宽

    //添加事件

    gridView1.CustomDrawRowIndicator += new DevExpress.XtraGrid.Views.Grid.RowIndicatorCustomDrawEventHandler(gridView2_CustomDrawRowIndicator);

    //添加行号

    void gridView2_CustomDrawRowIndicator(object sender, DevExpress.XtraGrid.Views.Grid.RowIndicatorCustomDrawEventArgs e)

    {

        if (e.Info.IsRowIndicator && e.RowHandle >= 0)

        {

            e.Info.DisplayText = (e.RowHandle + 1).ToString();

        }

    }

     

    参考链接:

    http://www.cnblogs.com/xiaofengfeng/archive/2013/03/13/2957440.html

    http://blog.csdn.net/shuaishifu/article/details/8832883

    http://www.cnblogs.com/HopeGi/archive/2012/10/17/GridControl.html

    http://www.cnblogs.com/pan11jing/archive/2010/01/04/1638982.html

  • 相关阅读:
    C++中合并两个排行榜的思路
    C++函数类型以及函数表实验
    C++获取两个值的差距比
    windows下的bash工具:winbash
    导入sql文件提示2006错误的解决办法
    C++延迟delete对象方案:采用unique_ptr托管欲删除的对象指针
    C++使用lower_bound快速查询分段配置
    sqlserver数据库操作
    判断 iframe 是否加载完成的完美方法
    SQL数据缓存依赖 [SqlServer | Cache | SqlCacheDependency ]
  • 原文地址:https://www.cnblogs.com/abeam/p/13233887.html
Copyright © 2011-2022 走看看