WinForm/C# GridLookUp 绑定包含已封存记录的数据源但不让用户选择

xinggang · 2018年01月31日 · 141 次阅读
为了让所有历史记录能正常显示,GridLookup的数据源就要把作废的记录也取出来,但现在框架默认没有控制不允许选择作废的记录。  
我们的需求往往是:用户编辑的话,不能让弹出的选择面板中显示出作废的记录。 
怎么做呢,当然是跟着我做...

解决方案有两种:

1、正常不编辑的情况下Lookupedit数据源为完全数据,当编辑时通过事件把编辑器换成另一个只绑定有效记录的编辑器。
2、打开编辑器时改变lookupedit数据源,关闭编辑器时还原数据源。

推荐:如果用于 GridControl 中时用第一种方案,如果是独立的 Lookupedit 控件,用第二种方案。(这里的控件名称用 DevExpress 的名字)
20170826110254

方案二核心代码:

DataTable dt2 = dtData.Select("IsValid=1").CopyToDataTable(); //只取有效数据
edit.QueryPopUp += (s, e) => { if (!edit.ReadOnly) edit.DataSource=dt2; }; //非只读状态下打开编辑器时替换数据源
edit.Closed += (s, e) => { edit.DataSource = dtData; }; //关闭编辑器时还原数据源

其中 edit 是 DevExpress 的 GridLookUpEdit 控件,如果用 WnGridLookup 的话需要找到 DevExpress 的原生控件:

方案一需要的问我要吧有点啰嗦不发了~

张鹏提供第 3 种方法,相比前两种更简单方便,即设置 GridLookUp 数据源的过滤条件。

gridLookUpEdit1.Properties.View.OptionsView.ShowFilterPanelMode = ShowFilterPanelMode.Never;
gridLookUpEdit1.Properties.View.ActiveFilterString = "sxrq=#9999/01/01#";

可能会需要:edit.View.OptionFilter.Reset()

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册