我正在制定大学时间表,我遇到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)
。
如果有人能为我制作它,我会非常感激。
答案 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
。