在DevExpress的GridView的列中,使用RepositoryItemSearchLookUpEdit控件实现产品列表信息的展示和选择

这篇具有很好参考价值的文章主要介绍了在DevExpress的GridView的列中,使用RepositoryItemSearchLookUpEdit控件实现产品列表信息的展示和选择。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

1、界面效果展示

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

在DevExpress的GridView的列中,使用RepositoryItemSearchLookUpEdit控件实现产品列表信息的展示和选择

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

在DevExpress的GridView的列中,使用RepositoryItemSearchLookUpEdit控件实现产品列表信息的展示和选择

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

在DevExpress的GridView的列中,使用RepositoryItemSearchLookUpEdit控件实现产品列表信息的展示和选择

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

在DevExpress的GridView的列中,使用RepositoryItemSearchLookUpEdit控件实现产品列表信息的展示和选择

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

2、用扩展函数的方式,通过代码方式创建对应的控件以及绑定对应的字段信息

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

在DevExpress的GridView的列中,使用RepositoryItemSearchLookUpEdit控件实现产品列表信息的展示和选择

前面随笔也介绍过扩展函数的一些内容《使用扩展函数方式,在Winform界面中快捷的绑定树形列表TreeList控件和TreeListLookUpEdit控件》

一般创建一些列的信息如下所示。

    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控件实现产品列表信息的展示和选择的操作,希望能够给你提供参考的思路。文章来源地址https://www.toymoban.com/news/detail-472129.html

到了这里,关于在DevExpress的GridView的列中,使用RepositoryItemSearchLookUpEdit控件实现产品列表信息的展示和选择的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • R语言中使用colnames函数来指定矩阵的列名称

    R语言中使用colnames函数来指定矩阵的列名称 在R语言中,colnames函数是用来指定矩阵的列名称的。它允许我们为每一列设置一个有意义的名称,以便更好地理解和处理数据。在本文中,我们将详细介绍colnames函数的用法,并提供相应的源代码示例。 假设我们有一个名为\\\"matrix_

    2024年02月07日
    浏览(25)
  • DevExpress中TileView的使用

    VS2019、DevExpress19.2、MySql5.7、FreeSql3.2.808、.Net Farmework 4.8 我这里建立的数据库为loldb,其下会使用到hero和country两个表   Dev类目dll文件引用时需要我们在系统中确保已经安装了DevExpress19.2 FreeSql类目dll文件可以通过NuGet手动下载对应版本   找到GridControl控件拖拽至主界面中,并将

    2024年02月03日
    浏览(17)
  • 在DevExpress中使用BandedGridView表格实现多行表头的处理

    在之前较早随笔中介绍过实现多行表头的处理,通过手工创建字段以及映射数据源字段属性的方式实现,有些客户反映是否可以通过代码方式更方便的创建对应的处理操作,因此本篇随笔继续探讨这个多行表头的处理的操作,使用代码的方式结合扩展函数处理,快速的实现

    2024年02月05日
    浏览(36)
  • 如何使用界面控件DevExpress WinForms自带的UI模板?其实很简单

    DevExpress WinForm拥有180+组件和UI库,能为 Windows Forms 平台创建具有影响力的业务解决方案。DevExpress WinForms能完美构建流畅、美观且易于使用的应用程序,无论是Office风格的界面,还是分析处理大批量的业务数据,它都能轻松胜任! DevExpress WinForm v22.1.5版本中发布了新的UI模板(

    2024年02月05日
    浏览(45)
  • excel中如果A列中某项有多条记录,针对A列中相同的项,将B列值进行相加合并统计

    excel中如果A列中某项有多条记录,针对A列中相同的项,将B列值进行相加合并统计。注意:B列的数据类型要为数字 如: 实现方法: C1、D1中分别输入公式,然后下拉 效果如下:

    2024年02月11日
    浏览(31)
  • flutter 实战 之 GridView

    GridView 和 ListView 是 Flutter 中用于构建滚动列表的两种常见小部件。它们之间的主要区别在于它们的布局方式和如何显示其子小部件。 布局方式: ListView 是单列或单行的滚动列表,它垂直或水平滚动。可以根据需要垂直排列或水平排列子小部件。 GridView 是一个二维网格列表,

    2024年02月03日
    浏览(26)
  • flutter 网格布局Gridview

    可以创建网格列表视图;主要通过Count、extent、custom、builder构造列表。有内边距、是否反向、滑动控制器等属性。 四个属性使用场景,Count、extent、custom适用于子布局较少时使用。可能会用到上拉刷新,数据较多时,则使用builder属性,其中count和builder使用较多 GridView.count 接收

    2023年04月11日
    浏览(23)
  • 如何在Pandas中根据条件替换列中的值?

    在使用Pandas的Python中,DataFrame列中的值可以通过使用各种内置函数根据条件进行替换。在本文中,我们将讨论在Pandas中用条件替换数据集列中的值的各种方法。 1. 使用dataframe.loc方法 使用此方法,我们可以使用条件或布尔数组访问一组行或列。如果我们可以访问它,我们也可

    2024年01月16日
    浏览(30)
  • GridView的绑定,添加,删除,更改;

    GridView的绑定,添加,删除,更改; 在用GridView控件时候的操作如下 用的的数据库如下 接下来是gridview的使用 前台代码如下 后台代码如下 结果如下

    2024年02月11日
    浏览(26)
  • QT quick基础:组件gridview

    组件gridview与android中gridview布局效果相同。 一、下面记录qt quick该组件的使用方法。 方法一: 运行效果 方法二: 列表和代理分开。 效果图如上。 我自己的需求,点击gridview的item,修改对应item的图片,并且改变该item的字体颜色。上述代码中,Image没有点击信号,gridview也没

    2024年01月19日
    浏览(29)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包