Member 12943813 Ответов: 1

Я хочу использовать selectedvalue из listbox для фильтрации datagridview


Привет,

Я пытаюсь передать SelectedValue из моего списка для использования в качестве фильтра для моего DataGridView. Оба объекта используют мою базу данных SQL Azure для получения своих данных.

namespace myNameSpace
{
    public partial class CompanyForm : Form
    {
        public CompanyForm()
        {
            InitializeComponent();
            Load += new EventHandler(dataEmployees_Load);
            Load += new EventHandler(companyList_Load);
        }
        //Connection String
        string cs = ConfigurationManager.ConnectionStrings["MyCS"].ConnectionString;
        
        // Load all companies
        private void companyList_Load(object sender, EventArgs e)
        {
            SqlConnection con;
            SqlCommand cmd;
            SqlDataAdapter adapter = new SqlDataAdapter();
            DataSet ds = new DataSet();
            string sql = "Select companyName from dbo.Company";
            con = new SqlConnection(cs);
            try
            {
                con.Open();
                cmd = new SqlCommand(sql, con);
                adapter.SelectCommand = cmd;
                adapter.Fill(ds);
                adapter.Dispose();
                cmd.Dispose();
                con.Close();
                companyList.DataSource = ds.Tables[0];
                companyList.ValueMember = "companyName";

            }
            catch (Exception ex)
            {
                MessageBox.Show("There are no companies to display");
            }
        }

Приведенный выше код-это код для создания списка из моей базы данных SQL

// Load all employees
private void dataEmployees_Load(object sender, EventArgs e)
{
    using (SqlConnection con = new SqlConnection(cs))
    {
        con.Open();
        SqlCommand cmd = new SqlCommand
        (
            "Select fname,ename
             FROM dbo.Users u
             inner join dbo.Company c on c.companyName = u.company", con
        ); //I would like to add to the select clause the variable "selectedValue" that can work in my conditional logic to filter the data in the datagrid
        SqlDataReader dr = cmd.ExecuteReader();
        DataTable dt = new DataTable();
        dt.Load(dr);
        dataEmployees.DataSource = dt;
    }
}


Таким образом, пользователь создает компанию с сотрудниками, а затем хочет выбрать компанию и получить только тех, кто работает в этой конкретной компании в DataGridView

Что я уже пробовал:

Я пробовал несколько различных подходов, пытаясь поместить его в переменную, но тогда данные не загружаются в listbox или DataGridView.

1 Ответов

Рейтинг:
10

Wendelius

Простой способ может быть следующим:

- Постройте SQL-оператор без условий
- Если выбрана компания, измените SQL, чтобы он содержал предложение WHERE, и добавьте параметр
- выполните команду и выполните

SqlCommand cmd = new SqlCommand(); 
cmd.Connection = con;
string sql  = @"Select fname,ename 
                FROM dbo.Users u 
                inner join dbo.Company c on c.companyName = u.company"
if (companyList.SelectedIndex > -1) {
   sql = sql + " WHERE c.companyName = @companyname";
   cmd.Parameters.AddWithvalue("@companyname", companyList.SelectedItem);
}
cmd.CommandText = sql;
con.Open();
SqlDataReader dr = cmd.ExecuteReader();
...