Как фильтровать DataGridView, используя несколько ComboBox? - PullRequest
0 голосов
/ 09 декабря 2018

Я очень плохо знаком с программированием и пытаюсь изучить C # с помощью небольшого проекта.
Я потратил неделю или больше, пытаясь найти решение, но, хотя есть много потоков, ни один из них не имел смысла для меня и не могзаставить его работать.

У меня есть форма с DataGridView, и я хочу создать 6 ComboBox для фильтрации.Все с одним и тем же источником данных.
До сих пор мне удалось заставить DataGridView работать с одним ComboBox, но я не знаю, как добавить еще их.

Мой код:

using System.Data;
using System.Data.SqlClient;

public partial class frmEmpList : Form
{
    private void frmEmpList_Load(object sender, EventArgs e)
    {
        this.PopulateCombobox();
        this.PopulateDataGridView();
    }

    private void PopulateCombobox()
    {
        string qry = "SELECT DISTINCT LastName FROM Employees";
        string constr = @"Data Source=DESKTOP-Q2B3UUH\SQLEXPRESS;Initial Catalog=PeopleManager;Integrated Security=True";

        using (SqlConnection con = new SqlConnection(constr))
        using (SqlDataAdapter sda = new SqlDataAdapter(qry, con))
        {
            DataTable dt = new DataTable();
            sda.Fill(dt);

            DataRow row = dt.NewRow();
            row[0] = "";
            dt.Rows.InsertAt(row, 0);

            cbLastName.DataSource = dt;
            cbLastName.DisplayMember = "LastName";
            cbLastName.ValueMember = "LastName";
        }
    }

    private void PopulateDataGridView()
    {
        string query = "SELECT EmpID, FirstName, LastName, Role, Grade, Dept, Shift FROM Employees";
        query += " WHERE LastName = @LastName";
        query += " OR ISNULL(@LastName, '') = ''";
        string constr = @"Data Source=DESKTOP-Q2B3UUH\SQLEXPRESS;Initial Catalog=PeopleManager;Integrated Security=True";

        using (SqlConnection con = new SqlConnection(constr))
        using (SqlCommand cmd = new SqlCommand(query, con))
        {
            cmd.Parameters.AddWithValue("@LastName", cbLastName.SelectedValue);
            using (SqlDataAdapter sda = new SqlDataAdapter(cmd))
            {
                DataTable dt = new DataTable();
                sda.Fill(dt);
                dgEmpList.DataSource = dt;
            }
        }
    }

    private void cbLastName_SelectionChangeCommitted(object sender, EventArgs e)
    {
        this.PopulateDataGridView();
    }
}

Ответы [ 2 ]

0 голосов
/ 09 декабря 2018

Спасибо Wanton за быстрый ответ!Ненавижу говорить, но я, кажется, не работаю для меня, если я не применил это правильно.Пожалуйста, посмотрите на приложенное фото: введите описание изображения здесь

0 голосов
/ 09 декабря 2018

Я бы изменил ("@LastName", cbLastName.SelectedValue) на ("@LastName", string.IsNullOrWhiteSpace(cbLastName.SelectedValue as string) ? DBNull.Value : ((string)cbLastName.SelectedValue).Trim())

Затем

query += " WHERE LastName = @LastName";
query += " OR ISNULL(@LastName, '') = ''";

На

query += " WHERE (@LastName IS NULL OR LastName = @LastName)";

Если вам нужно больше фильтров для вашего запроса, просто добавьте большеФильтры, подобные этому

query += " AND (@FooBar IS NULL OR FooBar = @FooBar)";

Вы также можете создать динамический скрипт, включив в него только те фильтры, которые вам нужны.Первый фильтр должен использовать WHERE и другие AND

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...