DevExpress lookupedit 下拉控件 自定义筛选下拉列表

DevExpress资料不多,用起来又很麻烦,今天搞一个下拉框,要求能支持拼音下拉,

试了不少方法,比如说组合控件啊,CombEdit, lookupedit  ,虽然能达到效果,但是功能很不满意,感觉卡卡的,性能也不完美。

最后花了好几个小时才终于最好,这里总结一下:

1:果断改用 GridLookUpEdit  

2:拖入控件以后,直接敲代码:

        /// <summary>
        /// 加载数据
        /// </summary>
        public new void LoadData()
        {
            //获取所有站点 这个方法是我自己的绑定数据源的集合,你们不用管
            Sites = _lineCompilationService.SelectTrainStationYards();
            if (Sites.Any())
            {
                //设置修改时会立即展开下拉框
                this.gridLookUpEdit1.Properties.ImmediatePopup = true;
               //this.gridLookUpEdit1.Properties.PopupFilterMode = PopupFilterMode.Contains;
                //设置可以编辑
                this.gridLookUpEdit1.Properties.TextEditStyle = TextEditStyles.Standard;
                //指定绑定的 DataSource   Sites是一个list集合,当然你也绑定dataTable,原理是一样的,绑定model下面就输入属性名,datatable就列名
                this.gridLookUpEdit1.Properties.DataSource = Sites;
                //ValueMember可为空
                // this.gridLookUpEdit1.Properties.ValueMember = "StationyardCode";
                //选中以后显示的值
                this.gridLookUpEdit1.Properties.DisplayMember = "StationyardName";
                //绑定下拉框事件
                this.gridLookUpEdit1.Properties.Popup += new EventHandler(gridLookUpEdit1_Popup);
                //绑定值改变事件
                this.gridLookUpEdit1.EditValueChanging += new ChangingEventHandler(gridLEdit1_EditValueChanging);
                //绑定文本改变事件
                this.gridLookUpEdit1.TextChanged += new EventHandler(gridLUpEdit1_TextChanged);
                //为空的时候显示的内容
                this.gridLookUpEdit1.Properties.NullText = "";
            }
        }


  private void gridLookUpEdit1_Popup(object sender, EventArgs e)
        {
           FilterLookup(sender, new string[] { "StationyardName", "StationyardNamePinYinFull", "StationyardNamePinYinSimple" });//中文,全拼英,简拼
        }

        private void gridLUpEdit1_TextChanged(object sender, EventArgs e)
        {
            GridLookUpEdit edit = sender as GridLookUpEdit;
            edit.SelectionStart = edit.Text.Length;
        }

        private void gridLEdit1_EditValueChanging(object sender, ChangingEventArgs e)
        {
            this.BeginInvoke(new System.Windows.Forms.MethodInvoker(delegate
            {
                FilterLookup(sender, new string[] { "StationyardName", "StationyardNamePinYinFull", "StationyardNamePinYinSimple" });
            }));
        }


        /// <summary>
        /// 拼英模糊查询的关键方法
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="arrFilterField"></param>
        private void FilterLookup(object sender, string[] arrFilterField)
        {
            GridLookUpEdit edit = sender as GridLookUpEdit;
            GridView gridView = edit.Properties.View as GridView;
            FieldInfo fi = gridView.GetType().GetField("extraFilter", BindingFlags.NonPublic | BindingFlags.Instance);
            CriteriaOperator[] arrCriteriaOperator = new CriteriaOperator[arrFilterField.Length];
            for (int i = 0; i < arrFilterField.Length; i++)
            {
                arrCriteriaOperator[i] = new BinaryOperator(arrFilterField[i], "%" + edit.AutoSearchText + "%", BinaryOperatorType.Like);
            }
            string filterCondition = new GroupOperator(GroupOperatorType.Or, arrCriteriaOperator).ToString();
            fi.SetValue(gridView, filterCondition);
            MethodInfo mi = gridView.GetType().GetMethod("ApplyColumnsFilterEx", BindingFlags.NonPublic | BindingFlags.Instance);
            mi.Invoke(gridView, null);
        }

 好了,模糊多字段查询就好了,最后你可能不需要显示这么多列,那怎么办呢?

 这里简单说下,不给图了: 一点基础都没有的我只能 say sorry

 1:在视图中找到控件

 2:找到控件的小图标,左键点击展开

 3:选择“Design View ” 展开Dev控件的专门属性

4: 左边的大分组,选择 “columns”

5:右边开是 选择加号 ,“add columens”

6:把你要显示出来的列加进去,其中 ,每个列的:caption 是列头 ,FileldName是绑定的字段名 ;

另外,你运行了以后,发现样式并不像一个下拉框,怎么办?

1:
隐藏grid的表头
在Views里面的,OptionsView里面的ShowColumnHeadeas  改成 false 则不显示了标题了。


2:
隐藏gird标识列
Custom Draw Row Indicator

在Views里面的,OptionsView里面的showIndicator  改成 false 则不显示标识列了


3:隐藏grid的跨行边框(水平网络格)

在Views里面的,OptionsView里面的ShowHorizontalLines  改成 false 则不显示标识列了
注意:ShowHorizontalLines默认值是default ,貌似有bug,你改成false没效果,你需要先改成true,运行一次,再改成false就号了


4:设置宽度
在控件的属性面板中,Properties  ->PopupFormSize   设置 width 和 Height  
其中有个最小宽度和高度,Properties  ->PopupMinFormSize      设置 width 和 Height  
 

好了最后看效果,很满意

设置完就结束了,祝大家好运,不懂可以加我QQ 10200454 

  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
DevExpress是一家专门提供开发工具的软件公司,在其产品中包含了丰富多样的控件和组件,用于开发各种应用程序。其中,下拉弹出筛选框(Dropdown Popup Filter)是DevExpress控件中的一种常见功能。 下拉弹出筛选框是一个交互式的控件,通常用于在数据量较大的情况下,对数据进行筛选和过滤的操作。当用户点击下拉按钮时,弹出一个面板,面板中包含了筛选条件、搜索框和数据列表等组件,用户可以通过操作这些组件来快速筛选出所需的数据。 DevExpress下拉弹出筛选框提供了丰富的功能和灵活的设置选项,可以轻松满足各种需求。用户可以通过设置面板的位置、尺寸和样式等属性,使得下拉弹出筛选框与应用程序的整体风格保持一致。同时,用户还可以定义筛选条件的类型和规则,以及数据列表的显示方式和排序方式等,以便更精确地过滤和展示数据。 除了基本的筛选功能外,DevExpress下拉弹出筛选框还支持一些高级功能,如多级筛选自定义筛选器和自动填充等。多级筛选功能可以让用户按照不同的条件进行层级筛选,更加灵活地过滤数据;自定义筛选器功能可以让用户自定义各种特定类型的筛选条件,满足更为复杂的需求;自动填充功能可以根据用户输入的关键字,智能地自动匹配和填充数据,提高操作效率。 总而言之,DevExpress下拉弹出筛选框是一个功能强大、易于使用并且高度可定制的控件,适用于各种类型的应用程序。无论是简单的数据筛选还是复杂的数据分析,它都可以帮助开发者快速实现相关功能,提高用户体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值