如何使用c#中的combobox在datagridview上过滤SQL Server中的数据?

时间:2018-03-14 05:22:07

标签: c# filter datagridview combobox

我的datagridview包含学生信息,包括他们的班级(1A,1B,1C,2A,2B,2C)。现在我想在datagridview上面添加组合框,以便根据组合框选择过滤哪个类将在datagridview上显示。 这是我表单上的代码:

private void frmdbStudent_Load(object sender, EventArgs e)
    {
        db = new StudentSMSEntities();
        studenttableBindingSource.DataSource = db.studenttable.ToList();
        classBindingSource.DataSource = db.class.ToList();
        GenderBindingSource.DataSource = db.gender.ToList();
        religionBindingSource.DataSource = db.religion.ToList();
        dataGridViewstudent.DataSource = db.studenttable.ToList();      
        count();
        cboClassList.DataSource = db.Class.ToList();//combobox

这是组合框的代码:

private void cboDaftarKelas_SelectedIndexChanged(object sender, EventArgs e)
    {
        dataGridViewStudent.DataSource = db.studenttable.Where(stdnt => stdnt.ClassId == cboClassList.SelectedIndex).ToList();
    }

代码有效,但是当选择1A级时,datagridview什么都没有显示,当我选择1B级时,datagridview显示来自1A级的学生,依此类推。我想知道为什么会这样,我试图解决这个问题问题好几个小时但仍无法找到解决方案。

1 个答案:

答案 0 :(得分:0)

当您将Class列表绑定到组合框DataSource时,设置组合框的DisplayMemberValueMember,如下所示

cboClassList.DataSource = db.Class.ToList();

cboClassList.DisplayMember = "Name"; // value is an example
cboClassList.ValueMember = "Id"; // value is an example

然后在过滤网格视图数据源时执行以下操作

dataGridViewStudent.DataSource = db.studenttable.Where(stdnt => stdnt.ClassId == (int) cboClassList.SelectedValue).ToList();

或者获取所选项目并将其投放到Class课程并使用其Id字段

dataGridViewStudent.DataSource = db.studenttable.Where(stdnt => stdnt.ClassId == ((Class) cboClassList.SelectedItem).Id).ToList();