我不想承认它,但我正在构建一个vb.net winform,需要使用读取文本字段,复选框或单选按钮来构建SQL查询并返回结果。 sql查询部分非常有效,但是select case语句似乎没有正确地评估复选框或无线电检查状态。
Select Case True
Case txtFirstName.Text.Length > 0 & chkActive.CheckState
dgvEmployees.DataSource = employess.FindEmployee(txtFirstName.Text)
dgvEmployees.Visible = True
Case txtFirstName.Text.Length > 0 & chkActive.CheckState
dgvEmployees.DataSource = employess.FindEmployee(txtFirstName.Text, , , "Active")
chkInactive.Enabled = False
dgvEmployees.Visible = True
Case txtFirstName.Text.Length > 0 & chkInactive.CheckState
dgvEmployees.DataSource = employess.FindEmployee(txtFirstName.Text, , , "Inactive")
chkActive.Enabled = False
dgvEmployees.Visible = True
Case txtLastName.Text.Length > 0 & chkActive.CheckState
dgvEmployees.DataSource = employess.FindEmployee(, txtLastName.Text)
dgvEmployees.Visible = True
Case txtLastName.Text.Length > 0 & chkActive.CheckState
dgvEmployees.DataSource = employess.FindEmployee(, txtLastName.Text, , "Active")
chkInactive.Enabled = False
dgvEmployees.Visible = True
Case txtLastName.Text.Length > 0 & chkInactive.CheckState
dgvEmployees.DataSource = employess.FindEmployee(, txtLastName.Text, , "Inactive")
chkActive.Enabled = False
dgvEmployees.Visible = True
Case txtEmpCode.Text.Length > 0 & rdbActive.Checked
dgvEmployees.DataSource = employess.FindEmployee(, , txtEmpCode.Text)
dgvEmployees.Visible = True
Case txtEmpCode.Text.Length > 0 & chkActive.Checked
dgvEmployees.DataSource = employess.FindEmployee(, , txtEmpCode.Text, "Active")
chkInactive.Enabled = False
dgvEmployees.Visible = True
Case txtEmpCode.Text.Length > 0 & chkInactive.CheckState = CheckState.Checked
dgvEmployees.DataSource = employess.FindEmployee(, , txtEmpCode.Text, "Inactive")
chkActive.Enabled = False
dgvEmployees.Visible = True
Case Else
MessageBox.Show("please enter an employee code, firstname or lastname")
End Select
每次调试时我都会收到单选按钮或复选框的无效强制转换异常,我是否遗漏了某些内容?
答案 0 :(得分:2)
在Visual Basic中,&
performs a string concatenation。您希望使用And
或AndAlso
,如Plutonix所述。
AndAlso
将是更好的选择,因为如果第一个失败,它会跳过评估第二个条件。例如,如果txtFirstName.Text
的长度为0,则程序将无需检查chkActive.CheckState
的状态。实际上,正因为如此,从理论上讲,首先检查chkActive.CheckState
可能会更有效率 tiny 位,因为评估可能要快一点。