1

これが私の「プロジェクト」です。

事業

私がやろうとしているのは、外部の.xmlファイルからDataGridにデータをロードすることです。

XElement Persons = XElement.Load(@"d:\persons.xml");
dataGrid1.DataContext = Persons;

正常に動作しますが、理解できない問題があります。DataGridの上部にTextBoxが表示されるので、必要なのは、textBox1.textをDataGridのデータフィルターとして使用することです。ユーザーが文字「a」を入力した場合、DataGriwでは、名前がpAulで国がrussiAの行が2行しか表示されないため、両方の行のデータに文字「a」が含まれているとします。あなたが私が検索のためにいくつかの列の能力を含めたり除外したりするのを手伝ってくれるなら、それはただ素晴らしいでしょう。そして最後に、ユーザーが検索ボタンを使用して見つけた行をクリックすると、売りのデータが右側のラベルに配置されます。また、DataGridに実際には表示されていない、選択した行のデータをロードする方法を知っていただければ幸いです。xmlファイルに給与に関するデータがあるとしましょう。ただし、DataGridには表示されないため、ユーザーが行を選択するときに4番目のラベルにロードする必要があります。これが私のXAMLです。

<Window x:Class="WpfApplication1.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="679" Width="1137">
<Grid Height="645" Name="grid1" Width="1119">
    <DataGrid Height="300" ItemsSource="{Binding Path=Elements[person]}" Margin="26,42,839,297" Name="dataGrid1" Width="250">
        <DataGrid.Columns>
            <DataGridTextColumn Binding="{Binding Path=Element[name].Value}" Header="Name" />
            <DataGridTextColumn Binding="{Binding Path=Element[country].Value}" Header="Country" />
            <DataGridTextColumn Binding="{Binding Path=Element[age].Value}" Header="Age" />
        </DataGrid.Columns>
    </DataGrid>
    <TextBox Height="24" HorizontalAlignment="Left" Margin="26,12,0,0" Name="textBox1" VerticalAlignment="Top" Width="250" />
    <Label Content="Name goes here on row select" Height="28" HorizontalAlignment="Left" Margin="307,28,0,0" Name="label1" VerticalAlignment="Top" Width="188" />
    <Label Content="Country goes here on row select" Height="28" HorizontalAlignment="Left" Margin="307,72,0,0" Name="label2" VerticalAlignment="Top" Width="188" />
    <Label Content="Age goes here on row select" Height="28" HorizontalAlignment="Left" Margin="307,120,0,0" Name="label3" VerticalAlignment="Top" Width="188" />
</Grid>

まったくの初心者のように私に話してください。あなたが特別に賢いものを使うとき、私には理解するのが難しいからです。ステップバイステップで高く評価されています。ありがとうございました...

4

1 に答える 1

1

Datagrid をフィルタリングするには、CollectionViewSource を作成し、それを DataGrid の ItemsSource に割り当てる必要があります。

private void Load()
{        
        XElement Persons = XElement.Load(@"d:\persons.xml");

        System.ComponentModel.ICollectionView c = System.Windows.Data.CollectionViewSource.GetDefaultView(Persons.Elements());
        c.Filter = new Predicate<object>(CollectionViewSource_Filter);

        dataGrid1.ItemsSource = c;
}

private Boolean CollectionViewSource_Filter(object i)
{
        return (i as XElement).Element("name").Value.ToString.Contains(textBox1.Text);
}

フィルターが変更されたときに DataGrid を更新するには、次のメソッドが必要です。c.Refresh();

フィルターで大文字と小文字を区別しない場合は、Case insensitive 'Contains(string)'をご覧ください。

選択した人物の名前を表示する:

<TextBlock Text="{Binding Path=SelectedItem.Element[name].Value, ElementName=dataGrid1}"></TextBlock>
于 2013-02-15T23:21:05.877 に答える