您可以在 LookUpEdit 中另外显示“VALUE”列,以便您进行搜索。
或者你可以覆盖搜索机制。
编辑:
我认为缓解方式是显示值列,如下所示:
<dxg:LookUpEdit AutoPopulateColumns="False" ValueMember="VALUE" DisplayMember="DISPLAYtext">
<dxg:LookUpEdit.StyleSettings>
<dxg:SearchLookUpEditStyleSettings/>
</dxg:LookUpEdit.StyleSettings>
<dxg:LookUpEdit.PopupContentTemplate>
<ControlTemplate>
<dxg:GridControl AutoGenerateColumns="None" Name="PART_GridControl">
<dxg:GridControl.Columns>
<dxg:GridColumn FieldName="Value"/>
<dxg:GridColumn FieldName="DISPLAYtext"/>
</dxg:GridControl.Columns>
<dxg:GridControl.View>
<dxg:TableView NavigationStyle="Row" ShowGroupPanel="False" ShowTotalSummary="False" AutoWidth="True"/>
</dxg:GridControl.View>
</dxg:GridControl>
</ControlTemplate>
</dxg:LookUpEdit.PopupContentTemplate>
</dxg:LookUpEdit>
因此,您也可以覆盖 LookUpEdit。对不起,我不知道它是如何正确写在 VB 上的,但想法类似:
public class MyLookUpEdit : LookUpEdit
{
public MyLookUpEdit()
{
currentItems = new List<TestDataItem>();
}
private List<TestDataItem> currentItems;
protected override void OnDisplayTextChanged(string displayText)
{
base.OnDisplayTextChanged(displayText);
this.currentItems.Clear();
var filter = (displayText).ToLower();
foreach (var item in ((IEnumerable<TestDataItem>) this.ItemsSource).Where(x => this.Filter(x, filter)))
{
this.currentItems.Add(item);
}
currentItems.Sort(new Comparison<TestDataItem>((el1, el2) =>
{
int elt1 = CompareStrings(el1.Value, filter);
int elt2 = CompareStrings(el2.Value, filter);
return elt2 - elt1;
}));
if (GetGridControl() != null)
{
GetGridControl().ItemsSource = currentItems;
Dispatcher.BeginInvoke((Action) (GetGridControl().RefreshData));
}
}
private bool Filter(TestDataItem item, string filter)
{
if (filter.Length < 2) return false;
int res = CompareStrings(item.Value, filter);
if (res > 1) return true;
/**/
return false;
}
public int CompareStrings(string str1, string str2)
{
int res = 0;
if (str1 == str2) return 2;
/**/
return res == 0 ? 1 : res;
}
}
或覆盖 LookUpEdit 中的 OnAutoSearchTextChanged