GridLookUpEditor控件自身只支持根据 DisplayMember 绑定的字段来进行模糊筛选,可在使用过程常常还需要使用其他的列来筛选,但控件本身是不支持的。为了实现这一扩展功能,我们需要使用反射功能封装成方法,组合控件的事件一起使用,来实现DevExpress的GridLookUpEditor控件多项(列)模糊筛选的方法。具体代码如下:
#region GridLookUpEdit 模糊查询
/// <summary>
/// GridLookUpEdit模糊查询方法
/// </summary>
/// <param name="sender"></param>
/// <param name="arrFilterField">需要查询的列</param>
void FilterGridLookUpEdit(object sender, string[] arrFilterField)
{
var edit = sender as GridLookUpEdit;
var gridView = edit.Properties.View as GridView;
var fi = gridView.GetType().GetField("extraFilter", BindingFlags.NonPublic | BindingFlags.Instance);
var arrCriteriaOperator = new CriteriaOperator[arrFilterField.Length];
for (int i = 0; i < arrFilterField.Length; i++)
{
arrCriteriaOperator[i] = new BinaryOperator(arrFilterField[i], "%" + edit.AutoSearchText + "%", BinaryOperatorType.Like);
}
var filterCondition = new GroupOperator(GroupOperatorType.Or, arrCriteriaOperator).ToString();
fi.SetValue(gridView, filterCondition);
var mi = gridView.GetType().GetMethod("ApplyColumnsFilterEx", BindingFlags.NonPublic | BindingFlags.Instance);
mi.Invoke(gridView, null);
}
void GridLookUpEdit_Properties_Popup(object sender, EventArgs e)
{
FilterGridLookUpEdit(sender, new string[] { "U_NAME", "U_ID", "U_PYM" });
}
void GridLookUpEdit_TextChanged(object sender, EventArgs e)
{
GridLookUpEdit edit = sender as GridLookUpEdit;
edit.SelectionStart = edit.Text.Length;
}
void GridLookUpEdit_EditValueChanging(object sender, DevExpress.XtraEditors.Controls.ChangingEventArgs e)
{
this.BeginInvoke(new MethodInvoker(delegate
{
FilterGridLookUpEdit(sender, new string[] { "U_NAME", "U_ID", "U_PYM" });
}));
}
#endregion
使用时,只要相应的绑定方法到GridLookUpEditor控件对应的事件就可以了。
返回本站资讯列表
|
上一篇
|
下一篇