当前位置: 首页 > article >正文

C#DevExpress使用GridLookUpEdit实现订单明细选择商品

一、功能需求

ERP系统的《客户报价单》、《销售订单》,用户在开单时需要快速检索商品历史,下拉选择商品快速开单,提高工作效率及用户体验。

如下图所示:

Winform+DevExpress实现订单明细选择商品,并自动添加新商品记录

有两种解决方案:

1、使用LookupEdit,组件比较简单,但效果不佳。

2、使用GridLookupEdit,丰富的下拉表格组件,支持每个列检索数据。

本文采用第2种方案。

二、上硬货

需要使用DevExpress的 RepositoryItemGridLookUpEdit 组件,下面给大家提供完整版源码。

2.1 给GridColumn列绑定 RepositoryItemGridLookUpEdit 组件

选择列,属性标签页ColumnEdit属性,点击右侧的下拉按钮,双击选择GridLookUpEdit组件。

Winform+DevExpress实现订单明细选择商品,并自动添加新商品记录

改名,输入新的名称,按回车改名。

Winform+DevExpress实现订单明细选择商品,并自动添加新商品记录

目前已完成创建RepositoryItemGridLookUpEdit组件,命名: rep_SelectProduct

2.2 初始化 RepositoryItemGridLookUpEdit 组件 及绑定数据源

我们采用硬编码方式初始化 RepositoryItemGridLookUpEdit 组件,其优点是能直观看到重要属性设置。

/// <summary>
/// 初始化 RepositoryItemGridLookUpEdit 组件
/// </summary>
private void InitGridLookUpEdit_SelectProduct()
{
    GridView view = rep_SelectProduct.View;

    view.Columns.Clear();
    view.Columns.Add(new GridColumn { Caption = "产品编号", FieldName = nameof(tb_SOs.ProductCode), Width = 100, VisibleIndex = 0 });
    view.Columns.Add(new GridColumn { Caption = "品名", FieldName = nameof(tb_SOs.ProductName), Width = 150, VisibleIndex = 1 });
    view.Columns.Add(new GridColumn { Caption = "规格", FieldName = nameof(tb_SOs.Spec), Width = 150, VisibleIndex = 2 });
    view.Columns.Add(new GridColumn { Caption = "配方", FieldName = nameof(tb_SOs.Formula), Width = 60, VisibleIndex = 3 });
    view.Columns.Add(new GridColumn { Caption = "长度", FieldName = nameof(tb_SOs.Length), Width = 60, VisibleIndex = 4 });
    view.Columns.Add(new GridColumn { Caption = "米重", FieldName = nameof(tb_SOs.UnitWeight), Width = 60, VisibleIndex = 5 });

    var width = view.Columns.ToList().Sum(i => i.Width) + 10;
    rep_SelectProduct.AcceptEditorTextAsNewValue = DevExpress.Utils.DefaultBoolean.True; //重要!!!接受文本框的值作为新值显示
    rep_SelectProduct.NullText = "";
    rep_SelectProduct.PopupFormSize = new Size(width, 400);//下拉窗体尺寸
    rep_SelectProduct.View.RowHeight = 22; //行高
    rep_SelectProduct.ImmediatePopup = true;//输入值立即弹出下拉窗体
    rep_SelectProduct.SearchMode = GridLookUpSearchMode.AutoSearch;//设置为自动搜索模式,重要!!!
    rep_SelectProduct.PopupFilterMode = DevExpress.XtraEditors.PopupFilterMode.Contains;//表格筛选列过滤模式
    rep_SelectProduct.TextEditStyle = DevExpress.XtraEditors.Controls.TextEditStyles.Standard;//允许录入资料
    rep_SelectProduct.View.OptionsView.ShowAutoFilterRow = true;//下拉表格显示过滤行

    //按回车键处理包含关系的新值
    rep_SelectProduct.ProcessNewValue += this.On_GridLookUpEdit_ProcessNewValue; //在输入框录入新值处理事件

    //按回车键处理包含关系的新值
    rep_SelectProduct.KeyDown += On_GridLookUpEdit_KeyDown;

    //下拉表格的记录行点击事件
    rep_SelectProduct.View.RowClick += On_GridLookUpEdit_RowClick;

    rep_SelectProduct.CloseUp += On_GridLookUpEdit_CloseUp;

    //绑定数据源
    List<dt_Product> list = DataDictCache.Cache.ProductList.Copy();
    rep_SelectProduct.DisplayMember = nameof(tb_SOs.ProductName);
    rep_SelectProduct.ValueMember = nameof(tb_SOs.ProductName);
    rep_SelectProduct.DataSource = list;
}

2.3 On_GridLookUpEdit_ProcessNewValue

在单元格录入新值,自动添加到数据源

/// <summary>
/// 在单元格录入新值,自动添加到数据源
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void On_GridLookUpEdit_ProcessNewValue(object sender, ProcessNewValueEventArgs e)
{
    var editor = sender as GridLookUpEdit;

    if (e.DisplayValue.IsEmpty() || e.DisplayValue.ToStringEx() == editor.Properties.NullText)
    {
        return;
    }

    //如果没有绑定数据源,初始化空列表实例
    if (editor.Properties.DataSource == null)
    {
        editor.Properties.DataSource = new List<dt_Product>();
    }

    //给数据源添加一条记录
    var list = editor.Properties.DataSource as List<dt_Product>;
    list.Add(new dt_Product { ProductName = e.DisplayValue.ToStringEx() });

    e.Handled = true;
}

2.4 On_GridLookUpEdit_KeyDown

GridLookUpEdit组件回车键事件,录入的数据不存在,自动添加到数据源

/// <summary>
/// GridLookUpEdit组件回车键事件,录入的数据不存在,自动添加到数据源
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void On_GridLookUpEdit_KeyDown(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.Enter) //捕获回车键
    {
        var txt = (sender as GridLookUpEdit).Text;
        var list = rep_SelectProduct.DataSource as List<dt_Product>;
        if (!list.Any(a => a.ProductName.ToStringEx().ToLower() == txt.ToLower())) //数据源没有该值
        {
            list.Add(new dt_Product { ProductName = txt });//这里必须是对应DisplayMember字段
        }

        gvDetail.HideEditor();
        gvDetail.SetFocusedRowCellValue(nameof(dt_Product.ProductName), txt);
        e.Handled = true;
    }
}

2.5 On_GridLookUpEdit_RowClick

选择一条记录,触发表格的点击事件

/// <summary>
/// 选择一条记录,触发表格的点击事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void On_GridLookUpEdit_RowClick(object sender, RowClickEventArgs e)
{
    GridView gv = (sender as GridView);
    dt_Product product = gv.GetRow(e.RowHandle) as dt_Product; //下拉窗体当前选择行
    res_SOs row = gvDetail.GetRow<res_SOs>();//明细表当前行
    SetRowProductInfo(row, product);//赋值
    gvDetail.HideEditor();
    e.Handled = true;
}

2.6 SetRowProductInfo

给销售订单明细记录设置产品资料

/// <summary>
/// 给销售订单明细记录设置产品资料
/// </summary>
/// <param name="row"></param>
/// <param name="product"></param>
void SetRowProductInfo(res_SOs row, dt_Product product)
{
    row.ProductCode = product.ProductCode;
    row.ProductName = product.ProductName;
    row.ProductType = product.ProductType;
    row.CategoryId = product.CategoryId;//品类
    row.Price = product.SellPrice;//吨价
    row.Spec = product.Spec;
    row.Unit = product.UnitID;
    row.Formula = product.Formula;
    row.Length = product.Length;
    row.UnitWeight = product.Weight;//米重
}

2.7 Form.Load事件调用

private void frmSO_Load(object sender, EventArgs e)
{               
    this.InitGridLookUpEdit_SelectProduct();
}

三、测试效果

自动筛选数据

Winform+DevExpress使用GridLookUpEdit实现订单明细选择商品,并自动添加新商品记录

选择一条记录

Winform+DevExpress使用GridLookUpEdit实现订单明细选择商品,并自动添加新商品记录

录入新品名

Winform+DevExpress使用GridLookUpEdit实现订单明细选择商品,并自动添加新商品记录

本教程《销售订单》界面,使用 CSFrameworkV6.1旗舰版 快速开发框架为客户定制的板材行业ERP系统。

以后会分享更多硬货给大家~ 感谢您的关注!

专注.NET技术、C/S架构开发框架软件

C/S框架网 - 开发框架文库

footer页脚文章脚图片-唯快不破-开发框架文库


http://www.kler.cn/a/557833.html

相关文章:

  • vue3 文件类型传Form Data数据格式给后端
  • 《[含文档+PPT+源码等]精品基于Python实现的Django中药材在线学习系统的设计与实现
  • 和平之翼代码生成器 SHCEU 版 4.0.0RC6 千年隼介绍二
  • 通过wifi无线方式,通过adb命令连接手机,用来传输文件和安装app
  • Open WebUI选择模型为空,解决办法(for DeepSeek)
  • Ubuntu 下 nginx-1.24.0 源码分析 - ngx_atoi 函数
  • 嵌入式之宏定义编程机制
  • 代码随想录算法训练营第十一天|150. 逆波兰表达式求值|239. 滑动窗口最大值|347.前 K 个高频元素
  • 在WPS中设置word的页码不从第一页开始,从指定页开始插入页码
  • Ops 详解:从 DevOps 到 SecOps,探索网络安全与运维的核心概念
  • [STM32 - 野火] - - - 固件库学习笔记 - - - 十六.在SRAM中调试代码
  • 跟着 Lua 5.1 官方参考文档学习 Lua (6)
  • 使用Docker Desktop部署GitLab
  • CUDA兼容NVIDA版本关系
  • 《Keras 2 :使用 RetinaNet 进行对象检测》:此文为AI自动翻译
  • LLaMA-Factory|微调大语言模型初探索(3),qlora微调deepseek记录
  • 标准解读|汽车信息安全领域发布三项强制性国家标准,汽车测评领域新变革
  • Hutool - Log:自动识别日志实现的日志门面
  • 初学者如何设置以及使用富文本编辑器[eclipse版]
  • 手机壁纸设计中,金属质感字体可以为壁纸增添独特的视觉效果和高端感