如何使用ComboBox过滤datagridview

问题描述 投票:0回答:1

我有一个dataGridView包含学生信息(类,性别,出生日期,父母姓名等)datagridview被绑定到sql server对象数据源。我想在datagridview上面添加组合框来根据学生类过滤datagridview,所以当用户选择某个类(例如IIA类)时,datagridview只显示来自IIA类的学生。这是我的代码:

 private void frmdbSiswa_Load(object sender, EventArgs e)
    {
        db = new SiswaSMSEntities();
        tabelSiswaBindingSource.DataSource = db.Tabel_Siswa.ToList();
        kelasBindingSource.DataSource = db.Kelas.ToList();
        jenisKelaminBindingSource.DataSource = db.Jenis_Kelamin.ToList();
        agamaSiswaBindingSource.DataSource = db.Agama_Siswa.ToList();
        dataGridViewSiswa.DataSource = db.Tabel_Siswa.ToList();//agardataselalutampil
        cboKelas.DataSource = db.Kelas.ToList();
        count();
    }

这是搜索数据的代码:

enter code he  private void txtCariNama_TextChanged(object sender, EventArgs e)
    {
        dataGridViewSiswa.DataSource = db.Tabel_Siswa.Where(x => x.NamaSiswa.Contains(txtCariNama.Text)).ToList();

    }

这段代码有效。我只需输入他们的名字即可快速搜索学生。

这是过滤datagridview的代码:

private void cboKelas_SelectedIndexChanged(object sender, EventArgs e)
    {
        dataGridViewSiswa.DataSource = db.Tabel_Siswa.Where(x => x.IdKelas == cboKelas.SelectedIndex).ToList();
    }

这段代码确实有效,但问题是当我选择类IA(Id 1)时,datagridview什么都没显示,当我选择IB类(Id 2)时,datagridview显示来自IA类的学生。当我选择第一个类image 1时,datagridview什么都没显示。当我选择第二个classImage 2时,datagridview显示来自头等舱的学生。所以谁知道我做错了什么?

c# sql-server datagridview filter combobox
1个回答
0
投票

那么使用存储过程来执行此过程又如何创建存储过程并构建查询以作为参数执行包含您将其放在组合框中的组的名称,然后在组合事件内写入大量if条件Box SelectedIndexChanged。最后检查组名并将其作为参数发送到存储过程...

// 1 - 创建存储过程

Create proc CheckClass 
 @ClassID 
 as
 Select * from TableName 
 where ClassID = @ClassID`

First ClassID属于表中的字段,第二个属于参数,因此它只是存储过程不包含更多信息。如果您有一个数据访问层,只需构建您的类进行检查并输入您的if条件。

© www.soinside.com 2019 - 2024. All rights reserved.