本帖最后由 rzt_tao 于 2017-7-2 10:59 编辑
关于DevExpress的CheckedComboBoxEdit及在GridView上绑定的RepositoryItemCheckedComboBoxEdit如何实现选择所有Item的时候让文本框只显示“全部”或者其他自定义字样问题有时候可能有这种需求,选择了checkedcombobox的所有项后并不想所有项都显示出来,就只是想告诉用户已经选择了所有了,如下图所示
首先说说CheckedComboBoxEdit需要如何操作才能实现这个表现效果:
DevExpress几乎所有下拉控件都提供了CustomDisplayText的这个事件,知道这个事件就好办事了,无疑就是判断值,判断是否为全选就设置一个displayText,
代码如下:
[C#] 纯文本查看 复制代码
private void checkedComboBoxEdit1_CustomDisplayText(object sender, DevExpress.XtraEditors.Controls.CustomDisplayTextEventArgs e)
{
var edit = sender as DevExpress.XtraEditors.CheckedComboBoxEdit;
if (edit != null)
{
var checkItems = edit.Properties.Items.GetCheckedValues();//获取选择中的Item值集
if (edit.Properties.Items.Count == checkItems?.Count)//判断选择的Item个数是否所有Item的个数一致
{
e.DisplayText = "全部";
}
}
}
接下来说说RepositoryItemCheckedComboBoxEdit,因为要显示在GridView上,所以要符合GridView的显示规则,单纯的这种做法肯定是满足不了,因为每一行的情况不同,然后组件都是同一个,
这时可能有人会想到利用GridView的CustomRowCellEdit事件通过克隆的方式让该列的每一行都是不同的RepositoryItemCheckedComboBoxEdit这样就每一行就互不影响了,理论上可以这样做,但是不建议,
这个代码就自己实现,这里不提供。比较理想的做法应该是利用GridView的CustomColumnDisplayText事件来控制,代码如下:(评论可查看,乱评论小黑屋伺候)
效果图:
如果想选择全部后立即就显示“全部”,而不是焦点离开的时候才显示,操作很简单,再加个repositoryItemComboBoxEdit的CustomDisplayText事件即可:
结合这两个事件就可以完美解决这个需求了:
效果图:
|