当前位置:编程学习 > C#/ASP.NET >>

关于DevExpress的LookUpEdit控件的一个问题,请都进来看一下

--------------------编程问答--------------------
private void gridLookUpEdit1_Popup(object sender, EventArgs e)
        {
            try
            {
                FilterLookup(sender);
                
            }
            catch (Exception err)
            {

                ExceptionAccept.Show(err);
            }
        } 
private void FilterLookup(object sender)
        {
            Text += " ! ";
            GridLookUpEdit edit = sender as GridLookUpEdit;
            GridView gridView = edit.Properties.View as GridView;
            FieldInfo fi = gridView.GetType().GetField("extraFilter", BindingFlags.NonPublic | BindingFlags.Instance);
            Text = edit.AutoSearchText;
            BinaryOperator op1 = new BinaryOperator("查找码", edit.AutoSearchText + "%", BinaryOperatorType.Like);
            BinaryOperator op2 = new BinaryOperator("部门名称", edit.AutoSearchText + "%", BinaryOperatorType.Like);
            string filterCondition = new GroupOperator(GroupOperatorType.Or, new CriteriaOperator[] { op1, op2 }).ToString();
            fi.SetValue(gridView, filterCondition);
            MethodInfo mi = gridView.GetType().GetMethod("ApplyColumnsFilterEx", BindingFlags.NonPublic | BindingFlags.Instance);
            mi.Invoke(gridView, null);
        } 
--------------------编程问答-------------------- 可以有如下几个步骤处理:
1、在LookUpEdit控件数据源DataSource手工添加一列拼音列,列名可以由pinyin+显示列字段名称(Name),拼音列的内容,取显示列NAME的全部大写拼音。比如,FUCHANKE,ERKE,GUKE
2、重新写一个LookUpEdit控件MyLookUpEdit,继承LookUpEdit,主要是处理拼音过滤的。然后在自己的代码中运用这个重写的控件进行布局和操作。
3、重写MyLookUpEdit控件的同时,也要重写RepositoryItemLookUpEdit控件MyRepositoryItemLookUpEdit,主要是重写RepositoryItemLookUpEdit控件的LookUpListDataAdapter方法去处理拼音过滤,如下代码:
    protected override LookUpListDataAdapter CreateDataAdapter()
    {
        return new MyLookUpListDataAdapter(this);
    }
4、重写LookUpListDataAdapter这个类的CreateFilterExpression方法,在这里面处理用like方式进行拼音过滤
    public class MyLookUpListDataAdapter : LookUpListDataAdapter
    {
        public MyLookUpListDataAdapter(RepositoryItemLookUpEdit item)
            : base(item)
        {

        }

        protected override string CreateFilterExpression()
        {
            if (string.IsNullOrEmpty(FilterPrefix)) return string.Empty;
            //判断是否为全部汉字,可以通过自己写一个汉字和拼音转换,判断的类来处理。
            bool isAllChinese= PinYinHelper.IsAllChinese(FilterPrefix);
            string likeClause =        DevExpress.Data.Filtering.Helpers.LikeData.CreateStartsWithPattern(FilterPrefix);
            if (!isAllChinese)
            {
                likeClause = PinYinHelper.GetPYString(likeClause);
            }
            return new BinaryOperator(
                isAllChinese ? FilterField : "PINYIN" + FilterField, "%" + likeClause + "%", BinaryOperatorType.Like).ToString();
        }
    }
   
5、重写的MyLookupEdit控件里面,要重写
protected override void CreateRepositoryItem()
        {
            MyRepositoryItemLookUpEdit edit = new MyRepositoryItemLookUpEdit();
            this.fProperties = edit;
            edit.SetOwnerEdit(this);
        }
    来绑定MyRepositoryItemLookUpEdit的控件,然后在MyRepositoryItemLookUpEdit 的控件里面稍微做些自己的要处理的东西,就可以实现你说的功能了。


--------------------编程问答-------------------- 设置控件的AutoSearchIndex属性为“查找码”的索引即可
LookUpEdit.Properties.AutoSearchIndex = 0;
补充:.NET技术 ,  组件/控件开发
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,