DevExpress的GridView,为每行动态绑定不同的RepositoryItemLookUpEdit

本文介绍如何解决在DevExpress GridView中动态更改RepositoryItemLookUpEdit数据源导致的问题,包括已选择值被清空和控件无法弹出。通过为每行创建独立的RepositoryItemLookUpEdit并绑定新数据源,实现联动选择和避免强绑定关系。
该文章已生成可运行项目,

有时需要动态为RepositoryItemLookUpEdit绑定数据源,比如联动选择的场景或者我们仅仅是需要一个下拉选择框而
并不想要GridView的列与RepositoryItemLookUpEdit的数据源有强绑定关系。但是GridView的列在绑定事先定义RepositoryItemLookUpEdit后是针对所有行生效的。
基于以上原因,使得在中途如果再为RepositoryItemLookUpEdit.DataSource赋与新的数据源,则会导值已经选择的其他行的此列值被置为空,
或者出现无法弹出RepositoryItemLookUpEditView。
解决以上问题的方法是为每个GridView的行都创建一个RepositoryItemLookUpEdit并在创建后为它绑定新的数据源。如下:

                gridView2.CustomRowCellEditForEditing += (x, y) =>
                {
                    if (y.Column.FieldName != "materiaGoodsid")
                        return;
                    DevExpress.XtraGrid.Views.Grid.GridView gv = sender as DevExpress.XtraGrid.Views.Grid.GridView;
                    DevExpress.XtraEditors.Repository.RepositoryItemLookUpEdit repositoryItem = new DevExpress.XtraEditors.Repository.RepositoryItemLookUpEdit();
                    y.RepositoryItem = repositoryItem;
                    string barcode = Convert.ToString(gridView2.GetFocusedDataRow()["cptm"]).Trim();
                    if (barcode == null)
                        return;
                    repositoryItem.DisplayMember = "cptm";
                    repositoryItem.ValueMember = "cptm";
                    repositoryItem.DataSource = new jiben.SubstituteAggregate().GetComplianceListByBarCode(barcode);
                    repositoryItem.BestFitMode = DevExpress.XtraEditors.Controls.BestFitMode.BestFitResizePopup;
                    //从列表中选择项后,绑定一个选值改变事件,以便于把列表中的其他列的值赋与gridView2中需要的列
                    repositoryItem.EditValueChanged += (m,n)=> {
                        DataRow dr = gridView2.GetFocusedDataRow();
                        var materiaObject = (m as DevExpress.XtraEditors.LookUpEdit).GetSelectedDataRow();
                        dr["materiaName"] = materiaObject.GetType().GetProperty("cpmc").GetValue(materiaObject);
                    };
                };

 

本文章已经生成可运行项目
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值