DevExpress GridControl功能总结

原文:DevExpress GridControl功能总结

写在前面,Dev控件已经很久了,功能也很强大,截止到现在我编写文档出来的Dev的版本已经到了14.1了,看了Demo真的很强大,效果也很好,结合自己这一个月开发,分享一下自己研究过后的经验,不让大家走更多的弯路

  • DevExpress安装顺序
  • GridControl基本样式设置
  • GridControl常用事件和描述
  • GridControl右键菜单
  • GridControl全选和反选
  • GridControl添加小计功能
  • GridControl固定表头

    1.安装从未如此简单

    Dev的安装文件已经放大百度云中方便大家下载:DevExpress 12.2.7,下载后按照图片数字顺序依次安装,这就是Dev 12.2.7,你值得拥有。

    if (bandedGridView1.GetFocusedDataRow() == null) return;
                //运单编号
                var columnValue= bandedGridView1.GetFocusedRowCellValue("绑定列字段名称").ToString();

    注意事项:使用VS2012和2010搭配DevExpress 12.2.7这个版本一起开发是最好的,工具箱暂时无法导入VS2013

    2.基本样式设置,你会吗?

    面对第一次使用GridControl,搞不懂GridControl下面为什么有一堆的GridView呢?后来想想,原来GridControl是一个大容器,下面有很多视图,那么就是操作视图,下面是我的一些常用样式设置。

            bandedGridView1.IndicatorWidth = 40; //自增列宽度
            bandedGridView1.OptionsView.ColumnAutoWidth = false; //自动调整列宽,使所有列的宽度和视图的宽度匹配
            bandedGridView1.OptionsCustomization.AllowSort = false;//禁止用户对数据进行排序操作
            bandedGridView1.OptionsCustomization.AllowColumnResizing = false; //禁止各列头改变列宽
            bandedGridView1.VertScrollVisibility = ScrollVisibility.Auto; //显示垂直滚动条
            bandedGridView1.HorzScrollVisibility = ScrollVisibility.Auto; //显示水平滚动条
            bandedGridView1.OptionsMenu.EnableColumnMenu = false; //禁止列头上的菜单
            bandedGridView1.OptionsMenu.EnableFooterMenu = false; //禁止页脚上的菜单
            bandedGridView1.OptionsMenu.EnableGroupPanelMenu = false; //禁止分组面板上的菜单
            bandedGridView1.OptionsNavigation.UseTabKey = false; //不使用TAB/SHIFT+TAB移动焦点
            bandedGridView1.OptionsBehavior.Editable = false;//不允许编辑
            bandedGridView1.OptionsBehavior.ReadOnly = true;//只读

   3.这些事件你会常用

CustomDrawRowIndicator:DGV显示自增行号

            e.Appearance.TextOptions.HAlignment = HorzAlignment.Far;
            if (e.Info.IsRowIndicator)
            {
                if (e.RowHandle >= 0)
                {
                    e.Info.DisplayText = (e.RowHandle + 1).ToString(CultureInfo.InvariantCulture);
                }
                else if (e.RowHandle < 0 && e.RowHandle > -1000)
                {
                    e.Info.Appearance.BackColor = Color.AntiqueWhite;
                    e.Info.DisplayText = "G" + e.RowHandle;
                }
            }

RowCellStyle:GridView隔行变色

 bandedGridView1.Appearance.OddRow.BackColor = Color.White; // 设置奇数行颜色 // 默认也是白色 可以省略
            bandedGridView1.OptionsView.EnableAppearanceOddRow = true; // 使能 // 和和上面绑定 同时使用有效
            bandedGridView1.Appearance.EvenRow.BackColor = Color.FromArgb(255, 250, 205); // 设置偶数行颜色
            bandedGridView1.OptionsView.EnableAppearanceEvenRow = true; // 使能 // 和和上面绑定 同时使用有效
            if (e.RowHandle == bandedGridView1.FocusedRowHandle)
            {
                e.Appearance.Font = new Font("宋体", 9, FontStyle.Bold);
            }

    FocusedRowChanged:选中行改变绑定行数据到对应控件中

if (bandedGridView1.GetFocusedDataRow() == null) return;//判断当前选中行是否为null
            //返回值
            var columnValue= bandedGridView1.GetFocusedRowCellValue("绑定列字段名称").ToString();

     4.添加右击菜单一个很常用的功能

添加ContextMenuStrip控件,然后自定义按钮,可以找一些16*16的小图标点缀一下,很不错

这样一个右键菜单就已经绑定成功

5.GridControl全选和反选

这是一个比较难的问题,这里我结合网上寻找的资料总结了一个实体类贴上源代码

//-------------------------------------------------------------------------------------
// All Rights Reserved , Copyright (C) 2014 , ZTO , Ltd .
//-------------------------------------------------------------------------------------

using System.Drawing;
using System.Windows.Forms;
using DevExpress.XtraEditors.Repository;

namespace ZTO.WayBill.Utilities
{
    /// <summary>
    /// Dev GridControl 创建全选复选框
    ///
    /// 修改纪录
    ///
    ///          2014-5-30   版本:1.0 YangHengLian 创建主键,注意命名空间的排序。
    ///
    /// 版本:1.0
    ///
    /// <author>
    ///        <name>YangHengLian</name>
    ///        <date>2014-5-30</date>
    /// </author>
    /// </summary>
    public class DevControlHelper
    {
        /// <summary>
        /// 创建复选框
        /// </summary>
        /// <param name="e"></param>
        /// <param name="chk"></param>
        public static void DrawCheckBox(DevExpress.XtraGrid.Views.Grid.ColumnHeaderCustomDrawEventArgs e, bool chk)
        {
            RepositoryItemCheckEdit repositoryCheck = e.Column.ColumnEdit as RepositoryItemCheckEdit;
            if (repositoryCheck != null)
            {
                Graphics g = e.Graphics;
                Rectangle r = e.Bounds;
                DevExpress.XtraEditors.ViewInfo.CheckEditViewInfo info;
                DevExpress.XtraEditors.Drawing.CheckEditPainter painter;
                DevExpress.XtraEditors.Drawing.ControlGraphicsInfoArgs args;
                info = repositoryCheck.CreateViewInfo() as DevExpress.XtraEditors.ViewInfo.CheckEditViewInfo;
                painter = repositoryCheck.CreatePainter() as DevExpress.XtraEditors.Drawing.CheckEditPainter;
                info.EditValue = chk;
                info.Bounds = r;
                info.CalcViewInfo(g);
                args = new DevExpress.XtraEditors.Drawing.ControlGraphicsInfoArgs(info, new DevExpress.Utils.Drawing.GraphicsCache(g), r);
                painter.Draw(args);
                args.Cache.Dispose();
            }
        }
        /// <summary>
        /// 全选,反选
        /// </summary>
        /// <param name="gridView"></param>
        /// <param name="fieldName"></param>
        /// <param name="currentStatus"></param>
        /// <returns></returns>
        public static bool ClickGridCheckBox(DevExpress.XtraGrid.Views.Grid.GridView gridView, string fieldName, bool currentStatus)
        {
            bool result = false;
            if (gridView != null)
            {
                gridView.ClearSorting();//禁止排序
                gridView.PostEditor();
                DevExpress.XtraGrid.Views.Grid.ViewInfo.GridHitInfo info;
                Point pt = gridView.GridControl.PointToClient(Control.MousePosition);
                info = gridView.CalcHitInfo(pt);
                if (info.InColumn && info.Column != null && info.Column.FieldName == fieldName)
                {
                    for (int i = 0; i < gridView.RowCount; i++)
                    {
                        gridView.SetRowCellValue(i, fieldName, !currentStatus);
                    }
                    return true;
                }
            }
            return result;
        }
    }
}

下面是使用步骤

窗体加载事件添加一些代码

private bool _mCheckStatus; //GridControl全选,作为全局变量,默认false
        private void FrmInputBill_Load(object sender, EventArgs e)
        {
            bandedGridView1.OptionsBehavior.Editable = false;
            bandedGridView1.OptionsBehavior.ReadOnly = true;
            var col = new BandedGridColumn { FieldName = "Check", Visible = true, VisibleIndex = 0, ColumnEdit = new RepositoryItemCheckEdit() };
            col.OptionsColumn.AllowEdit = true; //CheckBox可以编辑改变
            gridBand1.Columns.Insert(0, col);
            bandedGridView1.Click += bandedGridView1_Click;
            bandedGridView1.CustomDrawColumnHeader += bandedGridView1_CustomDrawColumnHeader;
            bandedGridView1.DataSourceChanged += bandedGridView1_DataSourceChanged;
       //这里绑定数据源
        }
        #region GridControl支持全选事件

        private void bandedGridView1_Click(object sender, EventArgs e)
        {
            if (DevControlHelper.ClickGridCheckBox(this.bandedGridView1, "Check", _mCheckStatus))
            {
                _mCheckStatus = !_mCheckStatus;
            }
        }

        private void bandedGridView1_CustomDrawColumnHeader(object sender, ColumnHeaderCustomDrawEventArgs e)
        {
            if (e.Column != null && e.Column.FieldName == "Check")
            {
                e.Info.InnerElements.Clear();
                e.Painter.DrawObject(e.Info);
                DevControlHelper.DrawCheckBox(e, _mCheckStatus);
                e.Handled = true;
            }
        }

        private void bandedGridView1_DataSourceChanged(object sender, EventArgs e)
        {
            GridColumn column = this.bandedGridView1.Columns.ColumnByFieldName("Check");
            if (column != null)
            {
                column.Width = 40;
                column.OptionsColumn.ShowCaption = false;
                column.ColumnEdit = new RepositoryItemCheckEdit();
            }
        }

        #endregion

全选和反选

 6.添加小计功能第一步第二步加载完数据之后绑定

bandedGridView1.Columns["绑定字段列名"].Summary.Add(DevExpress.Data.SummaryItemType.Count, "BILL_CODE", "总计:{0}条"); //添加小计功能,在指定的列上添加一个统计对象
删除动作修改对应的小计信息,代码如下:
bandedGridView1.Columns["绑定字段列名"].Summary[0].DisplayFormat = string.Format("小计{0}条", bandedGridView1.RowCount);
7.固定表头

记录了一些GridControl的常用代码,分享给大家,如果有兴趣的可以到我的群里进行提问,不仅包括GridControl,其他的控件我也研究了,运用到项目中

将来的你一定会感激现在拼命的自己

DevExpress GridControl功能总结,布布扣,bubuko.com

时间: 2024-10-25 07:58:00

DevExpress GridControl功能总结的相关文章

DevExpress GridControl 使用方法技巧 总结 收录整理

一.如何解决单击记录整行选中的问题 View->OptionsBehavior->EditorShowMode 设置为:Click 二.如何新增一条记录 (1).gridView.AddNewRow() (2).实现gridView_InitNewRow事件 三.如何解决GridControl记录能获取而没有显示出来的问题 gridView.populateColumns(); 四.如何让行只能选择而不能编辑(或编辑某一单元格) (1).View->OptionsBehavior->

DevExpress GridControl使用方法

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 8

[DevExpress]GridControl 根据RowIndex和VisibleColumnsIndex来获取单元格值

关键代码: /// <summary> /// 根据rowIndex和visibleColumnsIndex来获取单元格可见值 /// </summary> /// <param name="view">GridView</param> /// <param name="rowIndex">rowIndex</param> /// <param name="visibleColu

实现DevExpress GridControl 只有鼠标双击后才进行修改数据

1. 实现DevExpress GridControl 只有鼠标双击后才进行修改数据:修改GridView.OptionsBehavior.EditorShowMode属性为Click 2. 实现DevExpress GridControl 只有鼠标双击后才进行修改数据:修改GridView.OptionsBehavior.EditorShowMode属性为MouseDownFocused 然后实现下面代码: private void gridView1_MouseDown(object sen

[Devexpress]GridControl 绑定DataSource时GridView列不变化

Devexpress  GridControl 绑定DataSource时GridView列不变化 1.使用VS自带的DataGridView替代 2.数据绑定以后调用 gridView.PopulateColumns()  函数 重新创建列 gcSummary.DataSource = _dtData; gvSummary.PopulateColumns();

[DevExpress]GridControl 删除所有行

关键代码: /// <summary> /// 删除全部行 /// </summary> /// <param name="gridView">GridView</param> public static void ClearRows(this GridView gridView) { bool _mutilSelected = gridView.OptionsSelection.MultiSelect;//获取当前是否可以多选 if (

[Irving] Wpf DevexPress GridControl 获取选中行

WPF前台绑定事件代码: <RelayAction TargetControl="{Binding ElementName=GCInstoragePart}" MethodName="GridClick" MethodParameter="{XParamBinding me}" TriggerEvent="Click" /> 后台事件代码: public void GridClick(RelayAction r,

[WinForm][DevExpress][GridControl]CustomColumnDisplayText Helper

在实际开发中,有时候需要对GridControl中列值进行转义,譬如1转义成完成等等,一般在诸如CustomColumnDisplayText事件中能够轻松完成,为了提高代码复用性,所以对CustomColumnDisplayText进行包装 关键代码: /// <summary> /// CustomColumnDisplayText Helper /// </summary> /// <param name="girdview">GridView

关于DevExpress GridControl控件中新增复选按钮一事

关于DevExpress GridControl新增复选按钮的事情,查了一下网上的文档,发现都是在查询的数据集[table]中新增一列供checkbox绑定使用.偶尔的一瞬间,我在DevExpress 的Demo上发现有使用CheckBox的例子,找了半天Demo的代码,还是没找到.然后就找到了设置的属性. 晚上的时候,想了想,感觉能试出来简直是运气.如下配置即可: 设置GridView中的[OptionsSelection]->[MultiSelectMode]设置为CheckBoxRowSe