简体   繁体   English

Devexpress LookUpEdit - 按值meber搜索第二列

[英]Devexpress LookUpEdit - serach second column by value meber

I want to know it is posible to filters **LookUpEdit ** dropdown list by the column that corresponds to the ValueMember value. 我想知道通过与ValueMember值对应的列过滤** LookUpEdit **下拉列表是可行的。

        LookUpEdit.DataSource = ds.Tables(0)
        LookUpEdit.ValueMember = ds.Tables(0).Columns("VALUE").Caption.ToString
        LookUpEdit.DisplayMember = ds.Tables(0).Columns("DISPLAYtext").Caption.ToString
        LookUpEdit.View.FocusedRowHandle = DevExpress.XtraGrid.GridControl.AutoFilterRowHandle
        LookUpEdit.AllowFocused = True
        LookUpEdit.CloseUpKey = New KeyShortcut(Keys.Add)
        LookUpEdit.NullText = ""

I using devexpress 14.2.3. 我使用devexpress 14.2.3。 and vb.net 和vb.net

You can display in your LookUpEdit additionally "VALUE" column, that will allow you to search. 您可以在LookUpEdit中另外显示“VALUE”列,以便进行搜索。 Or you can overwrite search mechanism. 或者你可以覆盖搜索机制。

EDIT: Eases way, i think, is display value column, like this: 编辑:我认为,缓解方式是显示值列,如下所示:

<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>

So or you can override LookUpEdit. 所以或者你可以覆盖LookUpEdit。 Sorry, i dont know how it correct write on VB, but idea similar: 对不起,我不知道如何正确写在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;
    }
}

or override OnAutoSearchTextChanged in LookUpEdit 或覆盖LookUpEdit中的OnAutoSearchTextChanged

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM