提供3000多款全球软件/控件产品
针对软件研发的各个阶段提供专业培训与技术咨询
根据客户需求提供定制化的软件开发服务
全球知名设计软件,显著提升设计质量
打造以经营为中心,实现生产过程透明化管理
帮助企业合理产能分配,提高资源利用率
快速打造数字化生产线,实现全流程追溯
生产过程精准追溯,满足企业合规要求
以六西格玛为理论基础,实现产品质量全数字化管理
通过大屏电子看板,实现车间透明化管理
对设备进行全生命周期管理,提高设备综合利用率
实现设备数据的实时采集与监控
利用数字化技术提升油气勘探的效率和成功率
钻井计划优化、实时监控和风险评估
提供业务洞察与决策支持实现数据驱动决策
转帖|使用教程|编辑:龚雪|2023-06-30 10:30:08.173|阅读 57 次
概述:本文将为大家介绍在DevExpress GridView的列中,如何使用RepositoryItemSearchLookUpEdit控件实现产品列表信息的展示和选择,欢迎下载最新版组件体验!
# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>
有时候我们为了方便,我们往往使用扩展函数的代码方式创建很多GridView的操作功能,如上文中(点击这里回顾>>)介绍过多行表头的创建及绑定处理。本文介绍在DevExpress GridView的列中,使用RepositoryItemSearchLookUpEdit控件实现产品列表信息的展示和选择。
DevExpress拥有.NET开发需要的所有平台控件,包含600多个UI控件、报表平台、DevExpress Dashboard eXpressApp 框架、适用于 Visual Studio的CodeRush等一系列辅助工具。
DevExpress技术交流群8:523159565 欢迎一起进群讨论
例如在CRM客户管理系统里面,有关报价单的界面如下所示,其中为了方便选择报价单的产品,我们在DevExpress的GridView的列中,增加了一个RepositoryItemSearchLookUpEdit控件来承载列表信息的展示的操作。如下界面所示:
如果我们是手工处理,那么可以在GridControl的设计界面中创建所需要的列并绑定字段信息,如下所示:
而对应产品名称的字段,我们需要使用它的列编辑控件来创建一个SearchLookupEdit的控件,如下所示:
然后还需要为这个视图创建对应的列,如下所示:
手工操作看似毕竟简单,但是不够灵活,因此我们喜欢使用扩展函数的方式,通过代码方式创建对应的控件以及绑定对应的字段信息,这样可以极大的提高代码的可维护性。
我们对GridControl和GridView的对象,创建了一些扩展函数,以便于对控件的弹性操作。
一般创建一些列的信息如下所示:
var colQuantity = grv.CreateColumn("Quantity", "销售数量"); colQuantity.CreateSpinEdit(); grv.CreateColumn("ProductNo", "产品编码").CreateTextEdit();
我们这里创建报价单信息列表,以及产品信息列表的处理代码如下所示:
/// <summary> /// 使用代码创建GridView的绑定以及单元格编辑控件 /// </summary> private void InitGridView() { var grd = this.gridControl1; var grv = this.gridView1; grv.Columns.Clear(); grv.CreateColumn(Id_FieldName, Id_FieldName).Visible = false;//创建一个字段,隐藏的,存储记录 productNameEdit = grv.CreateColumn("ProductName", "产品名称").CreateSearchLookUpEdit(); grv.CreateColumn("SalePrice", "销售单价").CreateTextEdit().ReadOnly = true; //colQuantity.AppearanceCell.BackColor = Color.Moccasin; //colQuantity.AppearanceCell.Options.UseBackColor = true; var colQuantity = grv.CreateColumn("Quantity", "销售数量"); colQuantity.AppearanceCell.BackColor = Color.Moccasin; colQuantity.AppearanceCell.Options.UseBackColor = true; colQuantity.CreateSpinEdit(); var colNote = grv.CreateColumn("Note", "备注说明"); colNote.AppearanceCell.BackColor = Color.Moccasin; colNote.AppearanceCell.Options.UseBackColor = true; colNote.CreateMemoEdit(); var colExpireDate = grv.CreateColumn("ExpireDate", "过期日期"); colExpireDate.AppearanceCell.BackColor = Color.Moccasin; colExpireDate.AppearanceCell.Options.UseBackColor = true; colExpireDate.CreateDateEdit(); grv.CreateColumn("ProductNo", "产品编码").CreateTextEdit(); grv.CreateColumn("MaterialCode", "物料编码").CreateTextEdit(); grv.CreateColumn("ProductType", "产品类型").CreateTextEdit(); grv.CreateColumn("Specification", "产品规格").CreateTextEdit(); grv.CreateColumn("Model", "产品型号").CreateTextEdit(); grv.CreateColumn("Unit", "标准单位").CreateTextEdit(); grv.InitGridView(GridType.NewItem, false, EditorShowMode.MouseDownFocused, ""); grv.InitNewRow += delegate (object sender, InitNewRowEventArgs e) { //数据记录初始化的时候设置 //grv.SetRowCellValue(e.RowHandle, "Id", Guid.NewGuid().ToString()); //grv.SetRowCellValue(e.RowHandle, "DictType_ID", typeId);//存储记录的父ID }; grv.ShowingEditor += new CancelEventHandler(gridView1_ShowingEditor); grv.CellValueChanged += new DevExpress.XtraGrid.Views.Base.CellValueChangedEventHandler(gridView1_CellValueChanged); }
其中注意产品信息里面,它使用了一个RepositoryItemSearchLookUpEdit控件。
productNameEdit = grv.CreateColumn("ProductName", "产品名称").CreateSearchLookUpEdit();
我们把它保存在窗体的变量中,供其他部分的代码调用创建它的视图列信息,以及设置它的数据源等操作。
/// <summary> /// 初始化数据字典 /// </summary> private async void InitDictItem() { //初始化代码 this.txtOrderStatus.BindDictItems("报价单状态"); //绑定产品列表 var list = await BLLFactory<IProductService>.Instance.GetAllInUsed(); productNameEdit.BindDictItems(list, "ProductName", "Id", true, new LookUpColumnInfo[] { new LookUpColumnInfo() { FieldName = "ProductType", Caption = "产品类型", Width = 90}, new LookUpColumnInfo() { FieldName = "ProductName", Caption = "产品名称", Width = 150}, new LookUpColumnInfo() { FieldName = "SalePrice", Caption = "产品单价", Width = 60}, new LookUpColumnInfo() { FieldName = "HandNo", Caption = "产品编码", Width = 60}, new LookUpColumnInfo() { FieldName = "MaterialCode", Caption = "物料编码", Width = 60}, new LookUpColumnInfo() { FieldName = "BarCode", Caption = "条形码", Width = 60}, new LookUpColumnInfo() { FieldName = "Specification", Caption = "产品规格, Width = 60"}, new LookUpColumnInfo() { FieldName = "Model", Caption = "产品型号", Width = 60}, new LookUpColumnInfo() { FieldName = "Color", Caption = "颜色", Width = 60}, new LookUpColumnInfo() { FieldName = "ProductSize", Caption = "尺寸", Width = 60}, new LookUpColumnInfo() { FieldName = "Unit", Caption = "标准单位", Width = 60}, new LookUpColumnInfo() { FieldName = "Quantity", Caption = "产品数量", Width = 60}, new LookUpColumnInfo() { FieldName = "Note", Caption = "备注", Width = 120}, }); productNameEdit.View.OptionsView.ColumnAutoWidth = false; }
上面代码指定了编辑控件列表中的列,以及数据源信息,这样通过扩展函数的代码方式创建,省却很多繁琐的手工操作。
然后我们判断主GridView的值变化的时候,跟踪到产品信息,然后赋值给其他对应列的信息,这样就可以复制产品的部分信息到列表中去了。
private async void gridView1_CellValueChanged(object sender, DevExpress.XtraGrid.Views.Base.CellValueChangedEventArgs e) { if (e.Column.FieldName == "ProductName" && e.Value != null) { var info = await BLLFactory<IProductService>.Instance.GetAsync(e.Value.ToString()); if (info != null) { //if (info.Quantity <= 1) //{ // MessageUtil.ShowTips(string.Format("[{0}]库存不足,请选择其他产品", info.ProductName)); // this.gridView1.DeleteRow(e.RowHandle); // return; //} this.gridView1.SetRowCellValue(e.RowHandle, "ProductNo", info.HandNo); this.gridView1.SetRowCellValue(e.RowHandle, "MaterialCode", info.MaterialCode); this.gridView1.SetRowCellValue(e.RowHandle, "ProductType", info.ProductType); this.gridView1.SetRowCellValue(e.RowHandle, "Specification", info.Specification); this.gridView1.SetRowCellValue(e.RowHandle, "Model", info.Model); this.gridView1.SetRowCellValue(e.RowHandle, "Unit", info.Unit); this.gridView1.SetRowCellValue(e.RowHandle, "SalePrice", info.SalePrice); } else { this.gridView1.SetRowCellValue(e.RowHandle, "ProductNo", DBNull.Value); this.gridView1.SetRowCellValue(e.RowHandle, "MaterialCode", DBNull.Value); this.gridView1.SetRowCellValue(e.RowHandle, "ProductType", DBNull.Value); this.gridView1.SetRowCellValue(e.RowHandle, "Specification", DBNull.Value); this.gridView1.SetRowCellValue(e.RowHandle, "Model", DBNull.Value); this.gridView1.SetRowCellValue(e.RowHandle, "Unit", DBNull.Value); this.gridView1.SetRowCellValue(e.RowHandle, "SalePrice", DBNull.Value); this.gridView1.SetRowCellValue(e.RowHandle, "Quantity", DBNull.Value); this.gridView1.SetRowCellValue(e.RowHandle, "Note", DBNull.Value); this.gridView1.SetRowCellValue(e.RowHandle, "ExpireDate", DBNull.Value); } } }
在界面的保存更新操作中,我们对其中的主表和明细表进行更新处理即可,如下代码所示。
/// <summary> /// 编辑状态下的数据保存 /// </summary> /// <returns></returns> public override async Task<bool> SaveUpdated() { var info = await BLLFactory<IQuotationService>.Instance.GetAsync(ID); if (info != null) { SetInfo(info); try { #region 更新数据 bool succeed = await BLLFactory<IQuotationService>.Instance.UpdateAsync(info); if (succeed) { //可添加其他关联操作 await SaveDetail(); return true; } #endregion } catch (Exception ex) { LogTextHelper.Error(ex); MessageDxUtil.ShowError(ex.Message); } } return false; }
以上就是使用扩展函数的方式,在DevExpress的GridView的列中,使用RepositoryItemSearchLookUpEdit控件实现产品列表信息的展示和选择的操作,希望能够给你提供参考的思路。
本文转载自:
本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@cahobeh.cn
文章转载自:本文探讨 SQL Server 中 NULL 和空值之间的区别,并讨论如何有效地处理它们。
Unity 是一款功能极其丰富的游戏引擎,允许开发人员将各种媒体集成到他们的项目中。但是,它缺少最令人兴奋的功能之一 - 将 Web 内容(例如 HTML、CSS 和 JavaScript)直接渲染到 3D 场景中的纹理上的能力。在本文中,我们将介绍如何使用 DotNetBrowser 在 Unity3D 中将 Web 内容渲染为纹理。
DevExpress v24.2帮助文档正式发布上线了,请按版本按需下载~
本教程将向您展示如何用MyEclipse构建一个Web项目,欢迎下载最新版IDE体验!
行业领先的界面控件开发包,帮助企业构建卓越应用!
DevExpress DXperience Subscription高性价比的企业级.NET用户界面套包,助力企业创建卓越应用!
DevExpress WinForms Subscription为Windows Forms平台创建具有影响力的业务解决方案,高性价比WinForms界面控件套包。
服务电话
重庆/ 023-68661681
华东/ 13452821722
华南/ 18100878085
华北/ 17347785263
客户支持
技术支持咨询服务
服务热线:400-700-1020
邮箱:sales@cahobeh.cn
关注我们
地址 : 重庆市九龙坡区火炬大道69号6幢