翼度科技»论坛 编程开发 .net 查看内容

在DevExpress的GridView的列中,使用RepositoryItemSearchLookUpEdit控件实

4

主题

4

帖子

12

积分

新手上路

Rank: 1

积分
12
有时候,我们为了方便,我们往往使用扩展函数的代码方式创建很多GridView的操作功能,如在随笔《在DevExpress中使用BandedGridView表格实现多行表头的处理》中介绍过多行表头的创建及绑定处理,在《基于DevExpress的GridControl实现的一些界面处理功能》也介绍了一些特殊的展示效果,本篇随笔介绍在DevExpress的GridView的列中,使用RepositoryItemSearchLookUpEdit控件实现产品列表信息的展示和选择。
1、界面效果展示

例如我在CRM客户管理系统里面,有关报价单的界面如下所示。其中为了方便选择报价单的产品,我们在DevExpress的GridView的列中,增加了一个RepositoryItemSearchLookUpEdit控件来承载列表信息的展示的操作。如下界面所示。

如果我们是手工处理,那么可以在GridControl的设计界面中创建所需要的列并绑定字段信息,如下所示。

 而对应产品名称的字段,我们需要使用它的列编辑控件来创建一个SearchLookupEdit的控件,如下所示。

 然后还需要为这个视图创建对应的列,如下所示。

手工操作看似毕竟简单,但是不够灵活,因此我们喜欢使用扩展函数的方式,通过代码方式创建对应的控件以及绑定对应的字段信息,这样可以极大的提高代码的可维护性。
2、用扩展函数的方式,通过代码方式创建对应的控件以及绑定对应的字段信息

我们对GridControl和GridView的对象,创建了一些扩展函数,以便于对控件的弹性操作。

前面随笔也介绍过扩展函数的一些内容《使用扩展函数方式,在Winform界面中快捷的绑定树形列表TreeList控件和TreeListLookUpEdit控件
一般创建一些列的信息如下所示。
  1.     var colQuantity = grv.CreateColumn("Quantity", "销售数量");
  2.     colQuantity.CreateSpinEdit();
  3.     grv.CreateColumn("ProductNo", "产品编码").CreateTextEdit();
复制代码
我们这里创建报价单信息列表,以及产品信息列表的处理代码如下所示。
  1. /// <summary>
  2. /// 使用代码创建GridView的绑定以及单元格编辑控件
  3. /// </summary>
  4. private void InitGridView()
  5. {
  6.     var grd = this.gridControl1;
  7.     var grv = this.gridView1;
  8.     grv.Columns.Clear();
  9.     grv.CreateColumn(Id_FieldName, Id_FieldName).Visible = false;//创建一个字段,隐藏的,存储记录
  10.     productNameEdit = grv.CreateColumn("ProductName", "产品名称").CreateSearchLookUpEdit();
  11.     grv.CreateColumn("SalePrice", "销售单价").CreateTextEdit().ReadOnly = true;
  12.     //colQuantity.AppearanceCell.BackColor = Color.Moccasin;
  13.     //colQuantity.AppearanceCell.Options.UseBackColor = true;
  14.     var colQuantity = grv.CreateColumn("Quantity", "销售数量");
  15.     colQuantity.AppearanceCell.BackColor = Color.Moccasin;
  16.     colQuantity.AppearanceCell.Options.UseBackColor = true;
  17.     colQuantity.CreateSpinEdit();
  18.     var colNote = grv.CreateColumn("Note", "备注说明");
  19.     colNote.AppearanceCell.BackColor = Color.Moccasin;
  20.     colNote.AppearanceCell.Options.UseBackColor = true;
  21.     colNote.CreateMemoEdit();
  22.     var colExpireDate = grv.CreateColumn("ExpireDate", "过期日期");
  23.     colExpireDate.AppearanceCell.BackColor = Color.Moccasin;
  24.     colExpireDate.AppearanceCell.Options.UseBackColor = true;
  25.     colExpireDate.CreateDateEdit();
  26.     grv.CreateColumn("ProductNo", "产品编码").CreateTextEdit();
  27.     grv.CreateColumn("MaterialCode", "物料编码").CreateTextEdit();
  28.     grv.CreateColumn("ProductType", "产品类型").CreateTextEdit();
  29.     grv.CreateColumn("Specification", "产品规格").CreateTextEdit();
  30.     grv.CreateColumn("Model", "产品型号").CreateTextEdit();
  31.     grv.CreateColumn("Unit", "标准单位").CreateTextEdit();
  32.     grv.InitGridView(GridType.NewItem, false, EditorShowMode.MouseDownFocused, "");
  33.     grv.InitNewRow += delegate (object sender, InitNewRowEventArgs e)
  34.     {
  35.         //数据记录初始化的时候设置
  36.         //grv.SetRowCellValue(e.RowHandle, "Id", Guid.NewGuid().ToString());
  37.         //grv.SetRowCellValue(e.RowHandle, "DictType_ID", typeId);//存储记录的父ID
  38.     };
  39.     grv.ShowingEditor += new CancelEventHandler(gridView1_ShowingEditor);
  40.     grv.CellValueChanged += new DevExpress.XtraGrid.Views.Base.CellValueChangedEventHandler(gridView1_CellValueChanged);
  41. }
复制代码
其中注意产品信息里面,它使用了一个RepositoryItemSearchLookUpEdit控件。
  1.     productNameEdit = grv.CreateColumn("ProductName", "产品名称").CreateSearchLookUpEdit();
复制代码
我们把它保存在窗体的变量中,供其他部分的代码调用创建它的视图列信息,以及设置它的数据源等操作。
  1. /// <summary>
  2. /// 初始化数据字典
  3. /// </summary>
  4. private async void InitDictItem()
  5. {
  6.     //初始化代码
  7.     this.txtOrderStatus.BindDictItems("报价单状态");
  8.     //绑定产品列表
  9.     var <strong>list</strong> = await BLLFactory<IProductService>.Instance.<strong>GetAllInUsed</strong>();
  10.     productNameEdit.<strong>BindDictItems</strong>(list, "ProductName", "Id", true, new LookUpColumnInfo[]
  11.     {
  12.         new LookUpColumnInfo() { FieldName = "ProductType", Caption = "产品类型", Width = 90},
  13.         new LookUpColumnInfo() { FieldName = "ProductName", Caption = "产品名称", Width = 150},
  14.         new LookUpColumnInfo() { FieldName = "SalePrice", Caption = "产品单价", Width = 60},
  15.         new LookUpColumnInfo() { FieldName = "HandNo", Caption = "产品编码", Width = 60},
  16.         new LookUpColumnInfo() { FieldName = "MaterialCode", Caption = "物料编码", Width = 60},
  17.         new LookUpColumnInfo() { FieldName = "BarCode", Caption = "条形码", Width = 60},
  18.         new LookUpColumnInfo() { FieldName = "Specification", Caption = "产品规格, Width = 60"},
  19.         new LookUpColumnInfo() { FieldName = "Model", Caption = "产品型号", Width = 60},
  20.         new LookUpColumnInfo() { FieldName = "Color", Caption = "颜色", Width = 60},
  21.         new LookUpColumnInfo() { FieldName = "ProductSize", Caption = "尺寸", Width = 60},
  22.         new LookUpColumnInfo() { FieldName = "Unit", Caption = "标准单位", Width = 60},
  23.         new LookUpColumnInfo() { FieldName = "Quantity", Caption = "产品数量", Width = 60},
  24.         new LookUpColumnInfo() { FieldName = "Note", Caption = "备注", Width = 120},
  25.     });
  26.     productNameEdit.View.OptionsView.ColumnAutoWidth = false;
  27. }
复制代码
上面代码指定了编辑控件列表中的列,以及数据源信息,这样通过扩展函数的代码方式创建,省却很多繁琐的手工操作。
然后我们判断主GridView的值变化的时候,跟踪到产品信息,然后赋值给其他对应列的信息,这样就可以复制产品的部分信息到列表中去了。
[code]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.Instance.GetAsync(e.Value.ToString());        if (info != null)        {            //if (info.Quantity

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具