【问题标题】:c# Datagridview multiple filtersc# Datagridview 多个过滤器
【发布时间】:2013-10-31 14:24:50
【问题描述】:

我正在尝试过滤具有两个或更多文本框的数据网格。 有没有一种简单的方法来启用它?就像现在一样,数据网格仅根据最后检查的条件进行过滤。

我找了一天也没找到解决办法。

这是两个盒子的代码。我在最后一个框中添加了两个过滤器,但这只是一个猜测,我知道它可能不起作用。

谢谢,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;
    }

【问题讨论】:

    标签: c# datagridview filter


    【解决方案1】:

    试试这样的。

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

    【讨论】:

      【解决方案2】:

      BindingSource.DataSource 创建新的 DataView({DataTable})

      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;
      

      【讨论】:

      • 第一行是什么意思?
      【解决方案3】:

      使用 MVVM、三个 Textbox 作为过滤器和一个数据网格的简单 wpf 应用程序。

      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 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
          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; }
      
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-11-19
        • 1970-01-01
        • 2016-04-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多