ComboBox过滤(级联)

时间:2013-12-10 17:30:45

标签: c# sql

我正在制定大学时间表,我遇到ComboBox级联问题,但我还没有找到答案。 所以我想要做的是根据CATHEDRA和YEAR过滤COURSE。 所以CATHEDRA是comboBox1,YEAR是comboBox2,COURSE是comboBox3。 Cathedra的数据是从数据库中使用的,但是YEAR numers是从comboBox2 EDIT ITEMS中使用的(我把它们自己像LIKE:1,2,3,4)。 这是我正在使用的查询,这让我犯了一个错误:

cmd.CommandText = ("SELECT idlcourse, name_of_course FROM tblCOURSE WHERE cathedra =@cathedra AND year=@year");     
cmd.Parameters.AddWithValue("@cathedra", comboBox1.Text);
cmd.Parametes.AddWithValue("@year", comboBox2.Text);

我正在尝试不同类型的代码,但没有人工作,所以如果你能把整个代码寄给我,那将是非常好的

PS:YEARS属性类型为Numeric(18)。 如果有人能为我制作它,我会非常感激。

1 个答案:

答案 0 :(得分:0)

好的,你的问题还有一些缺失的信息,但这就是我所看到的。

  • YEAR是一种数字类型,因此您应该将值作为小数传递

  • 的确,你确实有一个语法问题,在你拼写的最后一行Parametes而不是Parameters(也许这只是问题中拼写错误的情况)

  • 您不会验证您在查询中添加的值。如果由于某种原因,ComboBox2.Text不是数字的字符串表示形式,则查询将出错。如果组合框文本值为String.Empty(如果未设置索引,则默认为初始加载),您的查询将运行但不会返回正确的结果。

所以,这是你可以做的:

decimal yearValue = 0;          //local var to store year

//Check that user has selected something
if(!String.IsNullOrWhiteSpace(comboBox1.Text) 
   && !String.IsNullOrWhiteSpace(comboBox2.Text) 
   && Decimal.TryParse(comboBox2.Text, out yearValue))
{
    cmd.CommandText = ("SELECT idlcourse, name_of_course FROM tblCOURSE WHERE cathedra=@cathedra AND year=@year");      
    cmd.Parameters.AddWithValue("@cathedra", comboBox1.Text);
    cmd.Parameters.AddWithValue("@year", yearValue);      //Replaced with yearValue
}
else
{
    //Handle else case (e.g Display msg to user)
}

基本上,我会检查if语句中的组合框值。 我还使用了Decimal.TryParse(),如果它可以将字符串转换为小数,则只返回true。好像你已经将数字/整数值放在组合框中了,但是做一些额外的执行并没有什么坏处。现在,如果它通过所有这些检查,它将运行查询。如果它没有通过,那取决于你如何处理它。

至于如何将这些结果放在comboBox3中,将查询结果放在List对象中并将其绑定到DataSource