2012-11-21 83 views
1

我想知道是否可以得到這個幫助。基於WPF中的文本框文本過濾列表框

我正在使用包含2個表(dbo.Project和dbo.Materials)和collectionview的數據集來顯示數據到列表框中。
我需要通過使用兩個文本框在項目中使用的材質過濾數據集,並將項目名稱返回到列表框中。到目前爲止,我已經將它加載到了它的位置,我的列表框正確地填充了項目列表,但是文本框並未過濾。

任何建議如何解決它將不勝感激。

我到目前爲止的代碼是:

Imports System.Windows.Data 
Imports System.Windows 

Public Class SearchMe 
    Private mds As New MaterialsDataSet 
    Private pta As New MaterialsDataSetTableAdapters.ProjectTableAdapter 
    Private mta As New MaterialsDataSetTableAdapters.MaterialsTableAdapter 
    Private tam As New MaterialsDataSetTableAdapters.TableAdapterManager 
    Private view As CollectionView 

    Private Sub SearchMe_Loaded(sender As Object, e As System.Windows.RoutedEventArgs) Handles Me.Loaded 
     Me.tam.ProjectTableAdapter = pta 
     Me.tam.MaterialsTableAdapter = mta 

     Me.pta.Fill(Me.mds.Project) 
     Me.mta.Fill(Me.mds.Materials) 

     Me.DataContext = Me.mds.Project 
     Me.view = CollectionViewSource.GetDefaultView(Me.mds.Project) 
    End Sub 

    Private Sub btnSearch_Click(sender As Object, e As System.Windows.RoutedEventArgs) Handles btnSearch.Click 
     If Material2.Text.Length > 0 Then 
      Dim query = From p In mds.Project 
         Join m In mds.Materials On p.ProjectID Equals m.ProjectID 
         Where m.Material = Me.Material2.Text.ToString 
         Select p 
     Else 
      Dim query = From p In mds.Project 
         Join m In mds.Materials On p.ProjectID Equals m.ProjectID 
         Where m.Material = Me.Material1.Text 
         Select p.ProjectName 

      Me.DataContext = query 
     End If 
    End Sub 

    Private Sub btnReset_Click(sender As Object, e As System.Windows.RoutedEventArgs) Handles btnReset.Click 
     Me.DataContext = Nothing 
    End Sub 

    Private Sub Material1_TextChanged(sender As Object, e As System.Windows.Controls.TextChangedEventArgs) Handles Material1.TextChanged 

    End Sub 

    Private Sub Material2_TextChanged(sender As Object, e As System.Windows.Controls.TextChangedEventArgs) Handles Material2.TextChanged 

    End Sub 
End Class 

而XAML:

<Window x:Class="SearchMe" 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
Title="SearchMe" Height="500" Width="750" WindowStartupLocation="CenterScreen" ShowInTaskbar="False" ShowActivated="False" ResizeMode="NoResize"> 
<Grid> 
    <ListBox HorizontalAlignment="Right" Margin="0,45,46,60" Name="MyLists" Width="346" BorderThickness="3" BorderBrush="#FF860909" 
      IsSynchronizedWithCurrentItem="True" ItemsSource="{Binding}" 
      DisplayMemberPath="ProjectName"/> 
    <Button Content="Search" Height="23" HorizontalAlignment="Left" Margin="403,417,0,0" Name="btnSearch" VerticalAlignment="Top" Width="75" /> 
    <Button Content="Reset" Height="23" HorizontalAlignment="Left" Margin="556,417,0,0" Name="btnReset" VerticalAlignment="Top" Width="75" /> 
    <TextBox Height="30" HorizontalAlignment="Left" Margin="29,87,0,0" Name="Material1" VerticalAlignment="Top" Width="269" /> 
    <TextBox Height="30" HorizontalAlignment="Left" Margin="29,192,0,0" Name="Material2" VerticalAlignment="Top" Width="269" /> 
</Grid> 

任何和所有輸入讚賞。

回答

0

好這個工作對我來說...根據btn_Search Click事件:

Dim query = From p In mds.Project 
       Join m In mds.Materials On p.ProjectID Equals m.ProjectID 
       Where m.Materia.ToLower().Contain(m.Material1.Text()) 
       Select new with {.ProjectName = p.ProjectName} 

希望這有助於任何人出來。

0

這裏可能有很多潛在的問題,我沒有時間仔細閱讀代碼。但是,在click事件中替換DataContext後,您可以嘗試在「Me.view」上調用Refresh方法。