2012-02-23 45 views
0

我的XAML文件:自动绑定的DataGrid根据搜索条件

<Grid> 
     <DataGrid x:Name="LibraryView" ItemsSource="{Binding Path=Elements[track]}" SelectionChanged="LoadAlbumDetails" SelectionMode="Single"> 
      <DataGrid.Columns> 
       <DataGridTextColumn Header="Artist" Binding="{Binding Path=Element[artist_name].Value}" /> 
       <DataGridTextColumn Header="Album" Binding="{Binding Path=Element[album_name].Value}"/> 
       <DataGridTextColumn Header="Length" Binding="{Binding Path=Element[duration].Value}"/> 
       <DataGridTextColumn Header="Price" Binding="{Binding Path=Element[price].Value}"/> 
      </DataGrid.Columns> 
     </DataGrid> 

我的XML文件:

<?xml version="1.0" encoding="utf-8" ?> 
<albums> 
    <track> 
     <id>211</id> 
     <name>If you say something..</name> 
     <duration>156</duration> 
     <artist_id>13</artist_id> 
     <artist_name>Richard Keating</artist_name> 
     <album_id>29</album_id> 
     <album_name>Don't say anything..</album_name> 
     <price>$10</price> 
    </track> 

    <track> 
     <id>212</id> 
     <name>My heart is a stereo</name> 
     <duration>150</duration> 
     <artist_id>14</artist_id> 
     <artist_name>Maroon 5</artist_name> 
     <album_id>30</album_id> 
     <album_name>Maroon 5 stereo</album_name> 
     <price>$15</price> 
    </track> 
</albums> 
我.xaml.cs

//欲了解XML初始加载,当我在文本框中键入栗色5,然后点击搜索按钮被绑定到DataGrid

protected void LoadAlbumDetails(object sender, SelectionChangedEventArgs e) 
    { 
      IList rows = LibraryView.SelectedItems; 
      XElement row = (XElement)rows[0]; 
      //MessageBox.Show(row.Element("album_name").Value.ToString()); 

    } 

//Search button 
private void btnSearch_Click(object sender, RoutedEventArgs e) 
{ 
    //Am trying to use the concept of DataSet.Select or DataTable.Select 

} 

,我想使用类似

DataSet.Select("columnName1 like 'Maroon 5'"); 

,然后重新绑定DataGrid。

回答

1

您可以使用CollectionView过滤数据网格,教程是here

private CollectionView _collectionView; 

public IList Tracks { get; set; } // your itemssource 
public string FilterString { get; set; } // bind to your search textbox 

private void Init() // call this when you first init your datagrid 
{ 
    _collectionView = CollectionViewSource.GetDefaultView(Tracks); 
    _collectionView.Filter = TrackFilter; 
} 
private bool TrackFilter(object item) 
{ 
    return track.columnName1.Contains(_filterString); 
} 
private void btnSearch_Click(object sender, RoutedEventArgs e) 
{ 
    _collectionView.Refresh(); 
} 
+0

感谢斯塔福德,这是一个很好的文章,我需要使用它,但我不知道如何绑定XML到DataGrid,我怎么引脚输出XML类为链接做了什么? – Sharpeye500 2012-02-23 07:07:48