2013-10-31 2 views
0

두 개 이상의 텍스트 상자가있는 DataGrid를 필터링하려고합니다. 이것을 사용하는 간단한 방법이 있습니까? 이제 DataGrid는 마지막으로 확인 된 조건에 대해서만 필터링됩니다.C# Datagridview 여러 필터

하루 종일 검색 한 결과 해결책을 찾을 수 없습니다.

두 상자의 코드입니다. 마지막 상자에 두 개의 필터를 추가했지만 이것은 추측 일 뿐이므로 작동하지 않을 수도 있습니다.

감사합니다, A.는

private void textBox4_TextChanged(object sender, EventArgs e) 
    { 
     BindingSource bs = new BindingSource(); 
     bs.DataSource = dataGridView1.DataSource; 
     bs.Filter = "Bank like '%" + textBox4.Text + "%'"; 
     dataGridView1.DataSource = bs; 
    } 

    private void textBox5_TextChanged(object sender, EventArgs e) 
    { 
     BindingSource bs = new BindingSource(); 
     bs.DataSource = dataGridView1.DataSource; 

     bs.Filter = "Bank like '%" + textBox4.Text + "%'"; 
     bs.Filter = "currency like '" + textBox5.Text + "'"; 

     dataGridView1.DataSource = bs; 
    } 

답변

1

는 다음과 같이하십시오.

qualityBindingSource.Filter = string.Format("Date_ >= '{0}' AND Date_ <= '{1}'", dateTimePicker1.Text, dateTimePicker2.Text); 
0

BindingSource.DataSource는 ({DataTable을}) MVVM을 사용

BindingSource source1 = new BindingSource(); 
source1.DataSource = new DataView(ThreadModule.CaseManagerThread.caseListDataTable); 
source1.Filter = "status = 0"; 
this.NewCaseTabControl.newCaseDataGridView.DataSource = source1; 

BindingSource source2 = new BindingSource(); 
source2.DataSource = new DataView(ThreadModule.CaseManagerThread.caseListDataTable); 
source2.Filter = "status = 1"; 
this.FinishCaseTabControl.finishCaseDataGridView.DataSource = source2; 
+0

당신이 첫 번째 라인으로 무엇을 의미합니까? – DanM7

0

간단한 WPF 응용 프로그램, 필터 등 세 개의 텍스트 상자와 하나의 데이터 그리드를 새로운 DataView를 만듭니다.

MainWindow.xml

<Grid> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="30"/> 
     <RowDefinition Height="*"/> 
    </Grid.RowDefinitions> 
    <StackPanel Grid.Row="0" Orientation="Horizontal"> 
     <TextBox Text="{Binding Filter1, UpdateSourceTrigger=PropertyChanged}" Width="100"/> 
     <TextBox Text="{Binding Filter2, UpdateSourceTrigger=PropertyChanged}" Width="100"/> 
     <TextBox Text="{Binding Filter3, UpdateSourceTrigger=PropertyChanged}" Width="100"/> 
    </StackPanel> 
    <DataGrid Grid.Row="1" ItemsSource ="{Binding ItemView}" AutoGenerateColumns="False"> 
     <DataGrid.Columns> 
      <DataGridTextColumn Header="Head 1" Binding="{Binding Text1}"/> 
      <DataGridTextColumn Header="Head 2" Binding="{Binding Text2}"/> 
      <DataGridTextColumn Header="Head 3" Binding="{Binding Text3}"/> 
     </DataGrid.Columns> 
    </DataGrid> 
</Grid> 

ViewModel.cs

public class ViewModel : INotifyPropertyChanged 
{ 
    public event PropertyChangedEventHandler PropertyChanged; 
    List<Items> _items; 
    Items _item; 
    private static Random random = new Random(); 
    const string chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; 
    private string _filter1 = ""; 
    private string _filter2 = ""; 
    private string _filter3 = ""; 

    public ViewModel() 
    { 
     _items = new List<Items>(); 

     for (int i = 0; i < 1000; i++) 
     { 
      _item = new Items(); 
      _item.Text1 = new string(Enumerable.Repeat(chars, 10).Select(s => s[random.Next(s.Length)]).ToArray()); 
      _item.Text2 = new string(Enumerable.Repeat(chars, 10).Select(s => s[random.Next(s.Length)]).ToArray()); 
      _item.Text3 = new string(Enumerable.Repeat(chars, 10).Select(s => s[random.Next(s.Length)]).ToArray()); 
      _items.Add(_item); 
     } 
     ItemList = new ObservableCollection<Items>(_items); 
     ItemView = (CollectionView)CollectionViewSource.GetDefaultView(ItemList); 
     ItemView.Filter = TextFilter; 

    } 
    private bool TextFilter(object obj) 
    { 
     var data = obj as Items; 
     if (data != null) 
     { 
      return data.Text1.StartsWith(_filter1) && data.Text2.StartsWith(_filter2) && data.Text3.StartsWith(_filter3); 
     } 
     return false; 
    } 

    private void NotifyPropertyChanged(string property) 
    { 
     PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(property)); 
    } 

    public ObservableCollection<Items> ItemList { get; set; } 
    public CollectionView ItemView { get; set; } 
    public string Filter1 
    { 
     get { return _filter1; } 
     set 
     { 
      _filter1 = value; 
      NotifyPropertyChanged("Filter1"); 
      ItemView.Refresh(); 
     } 
    } 
    public string Filter2 
    { 
     get { return _filter2; } 
     set 
     { 
      _filter2 = value; 
      NotifyPropertyChanged("Filter2"); 
      ItemView.Refresh(); 

     } 
    } 
    public string Filter3 
    { 
     get { return _filter3; } 
     set 
     { 
      _filter3 = value; 
      NotifyPropertyChanged("Filter3"); 
      ItemView.Refresh(); 
     } 
    } 

} 

public class Items 
{ 
    public string Text1 { get; set; } 
    public string Text2 { get; set; } 
    public string Text3 { get; set; } 

}