0

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

我已经搜索了一整天,找不到解决方案。

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

谢谢。

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;
    }
4

3 回答 3

1

尝试这样的事情。

qualityBindingSource.Filter = string.Format("Date_ >= '{0}' AND Date_ <= '{1}'", dateTimePicker1.Text, dateTimePicker2.Text);
于 2014-02-13T23:35:43.723 回答
0

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;
于 2014-09-04T19:10:45.727 回答
0

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

主窗口.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>

视图模型.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; }

}
于 2017-05-12T13:04:38.770 回答