2012-11-11 24 views
2

我無法弄清楚如何過濾組合框以僅顯示包含到目前爲止輸入的文本的項目。將WPF組合框過濾爲包含鍵入的字符串的項目

這是建立在數據表的組合框結合功能:

Function users() As DataTable 
     Dim ds As New DataSet 
     Dim dt As DataTable 
     Dim dr As DataRow 
     Dim idCoulumn As DataColumn 
     Dim nameCoulumn As DataColumn 

     dt = New DataTable() 
     idCoulumn = New DataColumn("ID", Type.GetType("System.Int32")) 
     nameCoulumn = New DataColumn("Name", Type.GetType("System.String")) 

     dt.Columns.Add(idCoulumn) 
     dt.Columns.Add(nameCoulumn) 

     dr = dt.NewRow() 
     dr("ID") = 1 
     dr("Name") = "Zuse, Konrad" 
     dt.Rows.Add(dr) 

     dr = dt.NewRow() 
     dr("ID") = 2 
     dr("Name") = "Torvalds, Linus" 
     dt.Rows.Add(dr) 

     dr = dt.NewRow() 
     dr("ID") = 3 
     dr("Name") = "Babbage, Charles" 
     dt.Rows.Add(dr) 

     ds.Tables.Add(dt) 

     Return dt 

    End Function 

我會是怎樣編程,只顯示萊納斯和足色條目,如果我輸入「U」?

我已經試過這樣的事情,但我真的不知道該怎麼做:

Private Sub userKeyUp(ByVal sender As System.Object, ByVal e As System.Windows.Input.KeyEventArgs) Handles cb_user.KeyUp 
    cb_user.IsDropDownOpen = True 
    cb_user.Items.Filter = Function(item) 
           Return item.ToString().Contains(cb_user.Text.Trim()) 
          End Function 
End Sub 

回答

0

LINQ:

Dim query = (From dr As DataRow In dt.Rows Where dr("Name").ToString.Contains("Linus")).ToArray() 

LAMBDA:

Dim query = dt.Rows.AsEnumerable.Where(Function(dr) dr("Name").ToString.Contains("Linus")).ToArray() 
+0

我很抱歉,但我不明白我會把它放在我的代碼中。 – donL

+0

如果它是文本框,則爲textChanged事件。清除項目,運行查詢,加載組合框。這個組合框不需要數據綁定。 – OneFineDay

+0

另一條路線是使用CollectionViewSource,並將查詢應用於該路徑。至少適用於實體框架。 – OneFineDay

相關問題