如何基于多个选项过滤DataGridView?

Af'*_*faq 1 c# gridview datagridview winforms

我有一个名为dgvAllBikes的gridView控件.在表单加载时,我加载dgvAllBikes.现在我想基于三个选项和一个搜索按钮过滤这个基于dgvAllBikes的gridView.

1)CC

2)模型

3)颜色

当我点击搜索按钮时,我想根据这三个选项过滤dgvAllBikes.

这是我的LoadGrid代码

 private DataTable LoadGrid()
    {

        using (SqlConnection con = new SqlConnection(CS))
        {
            SqlCommand cmd = new SqlCommand("spGetAllBikes", con);
            cmd.CommandType = CommandType.StoredProcedure;
            con.Open();
            SqlDataReader r = cmd.ExecuteReader();
            dtAllBike = new DataTable();

            dtAllBike.Load(r);

        }
        return dtAllBike;
    }
Run Code Online (Sandbox Code Playgroud)

我在类级别声明了DataTable

string CS;
    protected DataTable dtAllBike;
    public SaleBike()
    {
        InitializeComponent();
        CS = ConfigurationManager.ConnectionStrings["BikeDB"].ConnectionString;
    }
Run Code Online (Sandbox Code Playgroud)

这是图片 在此输入图像描述

这是btnSearch的代码.

private void btnSearch_Click(object sender, EventArgs e)
    {
        BindingSource bs = new BindingSource();
        bs.DataSource = dgvAllBikeDetails.DataSource;
        bs.Filter = dgvAllBikeDetails.Columns["CC"].HeaderText.ToString() + " LIKE '%" + tbCCSearch.Text + "%'";
        dgvAllBikeDetails.DataSource = bs;
Run Code Online (Sandbox Code Playgroud)

它基于CC进行过滤,但我无法绑定其他两个选项.非常感谢您的帮助.

Jos*_*ong 5

使用ORAND运算符创建可处理多个值的过滤器.

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

    string filter = "";

    // Check if text fields are not null before adding to filter. 
    if (!string.IsNullOrEmpty(tbCCSearch.Text)) 
    {
        filter += dgvAllBikeDetails.Columns["CC"].HeaderText.ToString() + " LIKE '%" + tbCCSearch.Text + "%' ";
    }
    if (!string.IsNullOrEmpty(tbModelSearch.Text)) 
    {
        if (filter.length > 0) filter += "OR ";
        filter += dgvAllBikeDetails.Columns["Model"].HeaderText.ToString() + " LIKE '%" + tbModelSearch.Text + "%' ";
    }
    if (!string.IsNullOrEmpty(tbCCSearch.Text)) 
    {
        if (filter.length > 0) filter += "OR ";
        filter += dgvAllBikeDetails.Columns["Color"].HeaderText.ToString() + " LIKE '%" + tbColorSearch.Text + "%' ";
    }

    bs.Filter = filter;
    dgvAllBikeDetails.DataSource = bs;
}
Run Code Online (Sandbox Code Playgroud)