关于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技术 , 组件/控件开发