1

私はこれで助けを得ることができるかどうか疑問に思いました。

2つのテーブル(dbo.Projectとdbo.Materials)とcollectionviewを含むデータセットを使用して、データをリストボックスに表示しています。
2つのテキストボックスを使用してプロジェクトで使用されているマテリアルでデータセットをフィルタリングし、プロジェクト名をリストボックスに返す必要があります。これまでのところ、ロードする場所にあり、リストボックスにプロジェクトのリストが正しく表示されていますが、テキストボックスはフィルタリングされていません。

それを修正する方法についての提案は大歓迎です。

私がこれまでに持っているコードは次のとおりです。

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>

すべての入力に感謝します。

4

2 に答える 2

0

わかりましたこれは私にとってはうまくいきました... btn_Searchクリックイベントの下:

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}

これが誰にも役立つことを願っています。

于 2012-12-12T16:23:52.887 に答える
0

ここには多くの潜在的な問題がある可能性があり、コードを詳しく説明する時間がありませんでした。ただし、クリック イベントで DataContext を置き換えた後、「Me.view」で Refresh メソッドを呼び出すことができます。

于 2012-11-21T13:24:22.920 に答える