Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c#Datagridview多个过滤器_C#_Datagridview_Filter - Fatal编程技术网

c#Datagridview多个过滤器

c#Datagridview多个过滤器,c#,datagridview,filter,C#,Datagridview,Filter,我正在尝试用两个或多个文本框过滤数据网格。 有没有一个简单的方法来实现这一点?现在,datagrid只根据上次检查的条件进行过滤 我找了一整天,找不到解决办法 这是两个框的代码。我在最后一个框中添加了两个过滤器,但这只是一个猜测,我知道这可能行不通 谢谢,A private void textBox4_TextChanged(object sender, EventArgs e) { BindingSource bs = new BindingSource();

我正在尝试用两个或多个文本框过滤数据网格。 有没有一个简单的方法来实现这一点?现在,datagrid只根据上次检查的条件进行过滤

我找了一整天,找不到解决办法

这是两个框的代码。我在最后一个框中添加了两个过滤器,但这只是一个猜测,我知道这可能行不通

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

试试这样的

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

qualityBindingSource.Filter=string.Format(“日期”='{0}和日期”BindingSource.DataSource创建新的数据视图({DataTable})


使用MVVM、三个文本框作为过滤器和一个数据网格的简单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; }

}
公共类视图模型:INotifyPropertyChanged
{
公共事件属性更改事件处理程序属性更改;
列出项目;
项目(u项目),;
私有静态随机=新随机();
常量字符串chars=“abcdefghijklmnopqrstuvwxyz012456789”;
私有字符串_filter1=“”;
私有字符串_filter2=“”;
私有字符串_filter3=“”;
公共视图模型()
{
_项目=新列表();
对于(int i=0;i<1000;i++)
{
_项目=新项目();
_item.Text1=新字符串(可枚举。重复(字符,10)。选择(s=>s[random.Next(s.Length)]).ToArray();
_item.Text2=新字符串(可枚举。重复(字符,10)。选择(s=>s[random.Next(s.Length)]).ToArray();
_item.Text3=新字符串(可枚举。重复(字符,10)。选择(s=>s[random.Next(s.Length)]).ToArray();
_项目。添加(_项目);
}
ItemList=新的可观察集合(_项);
ItemView=(CollectionView)CollectionViewSource.GetDefaultView(ItemList);
ItemView.Filter=TextFilter;
}
私有布尔文本过滤器(对象obj)
{
var数据=作为项目的obj;
如果(数据!=null)
{
返回data.Text1.StartsWith(_filter1)和&data.Text2.StartsWith(_filter2)和&data.Text3.StartsWith(_filter3);
}
返回false;
}
私有void NotifyPropertyChanged(字符串属性)
{
PropertyChanged?.Invoke(这是新的PropertyChangedEventArgs(property));
}
公共ObservableCollection项列表{get;set;}
公共集合视图项视图{get;set;}
公共字符串过滤器1
{
获取{return\u filter1;}
设置
{
_过滤器1=数值;
NotifyPropertyChanged(“过滤器1”);
Refresh();
}
}
公共字符串过滤器2
{
获取{return\u filter2;}
设置
{
_过滤器2=数值;
NotifyPropertyChanged(“过滤器2”);
Refresh();
}
}
公共字符串过滤器3
{
获取{return\u filter3;}
设置
{
_过滤器3=数值;
NotifyPropertyChanged(“过滤器3”);
Refresh();
}
}
}
公共类项目
{
公共字符串Text1{get;set;}
公共字符串Text2{get;set;}
公共字符串Text3{get;set;}
}

你说的第一行是什么意思?
    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; }

}