2016-05-27 5 views
1

データグリッド内でテキストボックスに入力して検索したいが、解決策が見つからない。DataGridでの検索

バインドする必要はありますか?もしそうなら、どうすればいいのですか?

here's a image

+0

?私たちはあなたを助けるためにさらに多くの情報を必要としています! –

+0

C#とVisual Studio 2013を使用しています –

+0

バインディングについてIDKにバインドする方法についてご案内しています。 –

答えて

-1

うん、あなたは、すべてのデータが含まれているプロパティにバインドするためにあなたのデータグリッドが必要になります。 次に、テキストボックスにイベントハンドラを追加して、キーイベントの1つに作用させます。 XAML:

<TextBox x:Name="SearchBox" KeyUp="FilterTextBox_TextChanged" /> 

次に、あなたの背後にあるコードでそのイベントに基づいて行動する必要があります。ここでは、フィルタテキストを抽出し、DataGridの行を取得してから、可視かどうかを判断するためのメソッドを実行する必要があります。独自のDataMatchesFilterTextメソッドを実装する必要があります。

分離コード:

private void FilterTextBox_TextChanged(object sender, KeyEventArgs e) 
    { 
     var filterTextBox = (TextBox)sender; 
     var filterText = filterTextBox.Text; 

     SetRowVisibilityByFilterText(filterText); 
    } 

    private void SetRowVisibilityByFilterText(string filterText) 
    { 
     GetVisibleRows(yourGrid) 
      .ToList() 
      .ForEach(
      x => 
      { 
       if (x == null) return; 

       x.Visibility = 
       DataMatchesFilterText(x.Item as YourRowProperty, filterText) ? Visibility.Visible : Visibility.Collapsed; 
      }); 

    } 

    public static IEnumerable<DataGridRow> GetVisibleRows(DataGrid grid) 
    { 
     if (grid == null || grid.Items == null) yield break; 
     int count = grid.ItemsSource == null 
      ? grid.Items.Count 
      : grid.ItemsSource.Cast<object>().Count(); 


     for (int i = 0; i < count; i++) 
     { 
      yield return (DataGridRow)grid.ItemContainerGenerator.ContainerFromIndex(i); 
     } 
    } 
+0

フィルタテキストと一致するデータは何ですか? –

+0

行とフィルタテキストを取り込むメソッドです。あなたはそれを自分で実装し、2つの間で行う必要があることをこれまでにチェックする必要があります。たとえば、名前列にのみ検索を実行させたい場合は、このメソッドで名前列とフィルターテキストを比較します。 – PlantPorridge

+0

DataMatchesFilterTextのコードを入力してください – Yusha

0

名前で、あなたのデータグリッドすなわち内のテキストをフィルタリングしたい場合は、これを試して...あなたが使用している言語やツール

private bool DataMatchesFilterText(User user, string filterText) 
{ 
    return user.Name.ToString() == filterText; 
} 
関連する問題