在DevExpress的GridView的列中,动态创建列的时候,绑定不同的编辑处理控件

这篇具有很好参考价值的文章主要介绍了在DevExpress的GridView的列中,动态创建列的时候,绑定不同的编辑处理控件。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在使用DevExpress的GridView的时候,我们为了方便,往往使用一些扩展函数,动态创建GridView列的编辑控件对象,然后我们可以灵活的对内容进行编辑或者使用一些弹出的对话框窗体进行处理内容的录入,本篇随笔就是介绍这一主题:在DevExpress的GridView的列中,动态创建列的时候,绑定不同的编辑处理控件。

1、使用扩展函数动态创建列

我们创建列,为了绑定相应的数据源信息展示,一般指定列的名称和显示的列标题名称,如下是一个简单的列创建处理代码。

 grv.CreateColumn("Note", "备注说明");

如果赢绑定了数据源,我们也可以根据列的FieldName进行获得列的控制权,然后给它指定不同的编辑控件,如下所示。

gridview.Columns.ColumnByFieldName("Introduction").CreateMemoEdit();

上面的CreateMemoEdit()函数就是一个简单的扩展函数,用于创建一个备注列的处理,它的编辑器控件 RepositoryItemMemoEdit 的RepositoryItem 扩展对象。扩展函数如下所示的代码。

        /// <summary>
        /// 创建GridView的列编辑为MemoEdit
        /// </summary>
        /// <param name="gridColumn">GridColumn列对象</param>
        /// <returns></returns>
        public static RepositoryItemMemoEdit CreateMemoEdit(this GridColumn gridColumn)
        {
            RepositoryItemMemoEdit repositoryItem = new RepositoryItemMemoEdit
            {
                AutoHeight = false,
                LinesCount = 0
            };
            gridColumn.View.GridControl.RepositoryItems.Add(repositoryItem);
            gridColumn.ColumnEdit = repositoryItem;
            return repositoryItem;
        }

我们把它们(这些扩展函数)定义在不同的类文件中,使用静态类就可以了。例如对于GridControl和GridView的相关处理扩展函数,我们把它整理放在一个类文件中,定义各种方便使用的方法即可,如下所示。

在DevExpress的GridView的列中,动态创建列的时候,绑定不同的编辑处理控件

对于一些简单的录入我们保留让他使用默认文本输入框即可,如下所示代码。

this.gridViewRequisition.CreateColumn("需求金额", "需求金额", 80);
this.gridViewRequisition.CreateColumn("采购数量", "采购数量", 80);
this.gridViewRequisition.CreateColumn("采购金额", "采购金额", 80);
this.gridViewRequisition.CreateColumn("库存数量", "库存数量", 80);
this.gridViewRequisition.CreateColumn("可用库存", "可用库存", 80);

当然,如果我们想获得对应列的一些特殊的处理,那么可以把获得的列对象,赋值给变量,然后进行相关的属性处理。

var colQuantity = grv.CreateColumn("Quantity", "销售数量");
colQuantity.AppearanceCell.BackColor = Color.Moccasin;
colQuantity.AppearanceCell.Options.UseBackColor = true;
colQuantity.CreateSpinEdit();

而对于一些特殊的列,如一些下拉列表的列,我们可以指定他们的下拉列表,可以是固定列表,也可以通过函数获取数据库的记录进行绑定处理,如下所示。

var purchaseType = this.gridViewRequisition.CreateColumn("采购类型", "采购类型", 80).CreateGridLookUpEdit();
var typeList = new List<CListItem>()
{
    new CListItem("正品"),
    new CListItem("样品"),
    new CListItem("免费")
};
purchaseType.BindDictItems(typeList, false);

而如果备注处理,嫌GridView里面输入太麻烦,可以使用弹出的对话框进行处理,如下代码所示。

var note = this.gridViewRequisition.CreateColumn("备注", "备注", 100).CreateButtonEdit();
note.EditValueChanging += (ss, ee) =>
{
    gridViewRequisition.SetFocusedRowCellValue("备注", ee.NewValue);
};
note.ButtonClick += (ss, ee) =>
{
    var dlg = new FrmShowTextEdit();
    dlg.FieldDefaultValue = gridViewRequisition.GetFocusedRowCellDisplayText("备注");
    dlg.FieldDisplayName = "备注";
    if (dlg.ShowDialog() == DialogResult.OK)
    {
        gridViewRequisition.SetFocusedRowCellValue("备注", dlg.ReturnValue);
    }
};

在DevExpress的GridView的列中,动态创建列的时候,绑定不同的编辑处理控件

弹出界面如下所示。

在DevExpress的GridView的列中,动态创建列的时候,绑定不同的编辑处理控件

或者有时候,我们使用一些其他的选择对话框,也是类似的处理方式。

gridview.Columns.ColumnByFieldName("Creator").CreateButtonEdit().ButtonClick += (object sender, ButtonPressedEventArgs e) =>
{
    FrmSelectCustomer dlg = new FrmSelectCustomer();
    if(dlg.ShowDialog() == System.Windows.Forms.DialogResult.OK)
    {
        if(gridview.GetFocusedRow() == null)
        {
            gridview.AddNewRow();//如果首次则增加一行
        }
        gridview.SetFocusedRowCellValue("Creator", dlg.CustomerName);
    }
};

如一些列表,也可以使用LookupEdit的编辑控件进行处理选择的展示。

在DevExpress的GridView的列中,动态创建列的时候,绑定不同的编辑处理控件

如果我们希望对列表的特定字段进行启用编辑,那么可以利用下面扩展函数方式实现。

//设置只读、可编辑字段
this.gridViewAmount.SetColumnsReadOnly("*", false);
this.gridViewAmount.SetColumnsReadOnly("序列,采购类型,需求量,备注", true);

如果需要指定特定的汇总字段,可以通过下面代码实现。

// 设置统计字段
if (gridViewAmount?.Columns.Count > 0)
{
    gridViewAmount.ClearSummaryColumns();
    gridViewAmount.SetSummaryColumn("采购数量", DevExpress.Data.SummaryItemType.Sum);
}

 文章来源地址https://www.toymoban.com/news/detail-582698.html

 2、列内容的格式处理

在上面动态创建的列编辑控件,对于编辑的值发生变化,需要及时的反映到实际的列表对应的单元格的值中,一般在事件EditValueChanging 中通过SetFocusedRowCellValue 就可以设置回去了,如下代码所示。

var note = this.gridViewRequisition.CreateColumn("备注", "备注", 100).CreateButtonEdit();
note.EditValueChanging += (ss, ee) =>
{
    gridViewRequisition.SetFocusedRowCellValue("备注", ee.NewValue);
};

而对于一些数值型的内容处理,如SpinEdit的编辑器控件,那么每次输入一个不同的字符都会触发这个处理,那么就有点不正常的了,因此可以通过下面的方式进行矫正,利用EditValueChanged事件的处理。

            var xuqiuLiang = this.gridViewRequisition.CreateColumn("需求数量", "需求数量", 80).CreateSpinEdit();
            xuqiuLiang.ValidateOnEnterKey = true;
            xuqiuLiang.EditValueChanged += async (ss, ee) =>
            {
                var value = ((ss) as SpinEdit).Value;
                this.gridViewRequisition.SetFocusedRowCellValue("需求数量", value);               //刷新显示
                gridViewRequisition.RefreshRow(gridViewRequisition.FocusedRowHandle);
            };

上面的代码,通过把对应的当前控件转换为编辑器控件,获得值再行处理也是可以的。

另外,有时候,如果列的内容变更了,我们需要及时刷新指定列表行的内容,可以通过下面的代码实现的。

gridViewRequisition.RefreshRow(gridViewRequisition.FocusedRowHandle);

对于一些列表,需要给它指定删除的操作,方便移除整条记录,那么为它添加删除键即可,如下代码所示。

//行删除操作
this.gridViewRequisition.OptionsBehavior.AllowDeleteRows = DefaultBoolean.True;
this.gridViewRequisition.KeyDown += (s, ee) =>
{
    if (ee.KeyCode == Keys.Delete)
    {//移除记录
        gridViewRequisition.DeleteRow(gridViewRequisition.FocusedRowHandle);
        gridViewRequisition.RefreshData();

        ee.Handled = true;
    }
};

而对于列的一些格式转义操作,我们可以统一处理,可以把几个不同的GridView的转义函数放在一起。

//统一处理转义信息
this.gridViewRequisition.CustomColumnDisplayText += CustomColumnDisplayText;
this.gridViewSubx.CustomColumnDisplayText += CustomColumnDisplayText;
this.gridViewSpecification.CustomColumnDisplayText += CustomColumnDisplayText;

转义一般对日期的格式和数值型的格式进行一些格式化处理,如下代码所示。

        private void CustomColumnDisplayText(object sender, CustomColumnDisplayTextEventArgs e)
        {
            string columnName = e.Column.FieldName;
            if (e.Column.ColumnType == typeof(DateTime) || e.Column.ColumnType == typeof(DateTime?))
            {
                if (e.Value != null)
                {
                    if (e.Value == DBNull.Value || Convert.ToDateTime(e.Value) <= Convert.ToDateTime("1900-1-1"))
                    {
                        e.DisplayText = "";
                    }
                    else
                    {
                        e.DisplayText = Convert.ToDateTime(e.Value).ToString("yyyy-MM-dd HH:mm");//yyyy-MM-dd
                    }
                }
            }
            else if (e.Column.ColumnType == typeof(decimal) || e.Column.ColumnType == typeof(decimal?))
            {
                decimal value;
                if (decimal.TryParse(e.DisplayText, out value))
                {
                    e.DisplayText = value.ToString("0.################");
                }
            }
        }

而如果喜欢对列的背景色等进行自定义,可以在事件RowCellStyle中,根据不同的字段名称进行处理。

this.gridViewSpecification.RowCellStyle += (s, e) =>
{
    e.Appearance.BackColor = Color.Transparent;
    if (e.Column.FieldName == "序列")
    {
        var xulie = string.Concat(gridViewSubx.GetFocusedRowCellValue("序列"));
        if (!xulie.IsNullOrEmpty() && e.CellValue?.ToString() == xulie)
        {
            e.Appearance.BackColor = Color.Red; //醒目颜色
        }
    }
};

有时候,我们需要反色当前选择的单元格,那么我们可以通过事件CustomDrawCell  进行控制,如下代码所示。

this.gridView1.CustomDrawCell += (s, e) =>
{
    // 设置选中单元格的背景颜色
    if (e.Column == gridView1.FocusedColumn && e.RowHandle == gridView1.FocusedRowHandle)
    {
        e.Appearance.BackColor = Color.LightGreen;
    }
};

 

以上就是一些利用GridView进行处理的一些经验代码总结,希望对您有所启发。

 

到了这里,关于在DevExpress的GridView的列中,动态创建列的时候,绑定不同的编辑处理控件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java——使用EasyExcel导出动态列的Excel

    多多点赞,会变好看! 多多留言,会变有钱! 有些时候列表的列可能是动态的,需要根据动态表头导出Excel文件,这时候可以使用下面的方法解决: 静态列导出代码:

    2024年02月15日
    浏览(49)
  • el-table 列的动态显示与隐藏

    目录 业务场景 官方链接 实现效果图 使用框架 代码展示 template代码 ①、为什么要给el-table绑定【:key=\\\"reload\\\"】? ②、为什么给每个绑定【key=\\\"Math.random()\\\"】呢? ③、为什么列改变之后要添加【reload = Math.random();】修改值呢? ④、为什么要给el-table定义【max-height】属性? ⑥、为

    2023年04月18日
    浏览(36)
  • Element ui Table组件动态控制列的显示隐藏

     最近遇到一个需求,要求可以动态控制 table 列表中的列的显示与隐藏,并且将选中的列进行存储,下次进入页面仍展示上次勾选的列。 经过查阅资料,实现了这个功能,创建一个Table.vue文件,组件封装代码如下:  组件用法如下,新建一个index.vue,将Table组件引入使用:

    2024年02月08日
    浏览(53)
  • 动态设置el-table操作列的宽度自适应

    更新说明:修正操作项变更后,table不刷新问题,升级vue3+elment plus table示例 用el-table组件开发时,对于表格的操作列的自适应宽度是一个问题,如果不设置,操作按钮多时会有换行问题。如果设置最小宽度或宽度时,又会出现当条件不满足时,按钮显示的少,但操作列的宽度

    2024年02月11日
    浏览(39)
  • DevExpress WPF功能区控件,更轻松创建商业应用工具栏!(下)

    在上文中(点击这里回顾),我们主要介绍了DevExpress WPF的Ribbon、Toolbar和Menus组件支持MVVM、功能区命令栏和视图等,本文将继续介绍这些组件的自定义功能等。 DevExpress WPF拥有120+个控件和库,将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpress WPF能创建有

    2024年02月12日
    浏览(49)
  • el-ment ui 表格组件table实现列的动态插入功能

    在实际需求中我们经常遇到各种奇葩的需求,不足为奇。每个项目的需求各不相同,实现功能的思路大致是一样的。 本文来具体介绍怎么实现table表格动态插入几列。 首先实现思路有2种, 1. 插入的位置如果是已知的,我知道在哪个标题的后面插入这就好办了。  上图可以看

    2024年02月16日
    浏览(38)
  • layui学习笔记(三)关于layui渲染表格因权限判断需要动态隐藏列的研究

    TP6+Layuiadmin+apache+mysql+vscode学习研究layui前端技术 layui2.76版本,渲染的表格,因同一页面不同用户权限判断,所需要有不同的表格列来支持时,目前无法满足。 layui文档中有hide:true这一方法。 单独使用hide:true隐藏时是没问题的,但是这是个初始化隐藏,无法进行判断。 网上的

    2024年01月21日
    浏览(43)
  • 改变conda创建虚拟环境时候的默认路径和拷贝、删除、创建Conda虚拟环境

    conda环境默认安装在用户目录C:Usersusername.condaenvs下,如果选择默认路径,那么之后创建虚拟环境,也是安装在用户目录下。不想占用C盘空间,可以修改conda虚拟环境路径。 首先,找到用户目录下的.condarc文件(C:Usersusername)。 打开.condarc文件之后,添加或修改.condarc 中的

    2024年02月12日
    浏览(48)
  • idea创建项目的时候只有java 21和17

    今天创建项目,发现java这一项只有21和17 因为spring2在23年11月24日停止维护了,所以通过spring来创建,没有spring2,只有spring3+,最低jdk版本也是17 要是还想用spring2,可以更换 Server Url ,默认是spring的服务器地址 start.spring.io ,现在更换成阿里云的 https://start.aliyun.com ,更换以后,

    2024年01月19日
    浏览(58)
  • idea里边创建类的时候和方法自动生成注释

    我们经常写代码的时候需要在类上编写注释,标明这个类是谁写的有什么作用,其实每次写都会发现有很多相同的字段,比如作者,创建时间,类名等,有的时候方法上也要标明方法的返回值,参数等信息,在idea里边我们可以给设置自动加载注释。 1、创建类的时候自动加上

    2024年02月16日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包