Vb.net 如何基于单元格中的sql db数据启用多个按钮

Vb.net 如何基于单元格中的sql db数据启用多个按钮,vb.net,visual-studio,sql-server-2012-express,Vb.net,Visual Studio,Sql Server 2012 Express,我的项目进展顺利,部分要感谢你们的帮助!我在路上遇到了另一个颠簸。我需要根据sql db中的单元格是否有“y”、“n”或为空来启用(最多8个)按钮。我可以用一个按钮让它工作,但不能用两个或更多。在我向您展示我的代码之前,让我再详细一点:我的数据库存储有关学生和成绩的信息(还有许多其他信息,但它们与这个问题无关)。每个学生必须完成全部八(8)门课程才能毕业。在db中,我为八个类中的每一个都标记了列。如果他们上了这门课,那一排就是“y”。如果他们上课不及格,那是个“n”。如果他们尚未获取该单元格或该

我的项目进展顺利,部分要感谢你们的帮助!我在路上遇到了另一个颠簸。我需要根据sql db中的单元格是否有“y”、“n”或为空来启用(最多8个)按钮。我可以用一个按钮让它工作,但不能用两个或更多。在我向您展示我的代码之前,让我再详细一点:我的数据库存储有关学生和成绩的信息(还有许多其他信息,但它们与这个问题无关)。每个学生必须完成全部八(8)门课程才能毕业。在db中,我为八个类中的每一个都标记了列。如果他们上了这门课,那一排就是“y”。如果他们上课不及格,那是个“n”。如果他们尚未获取该单元格或该单元格正在进行中,则当我在sql server management studio中查看该单元格时,该单元格为空,因为他们既没有完成也没有失败,因此尚未输入任何数据

我有八(8)个按钮,每个类都有标签。当用户输入studentId并搜索数据库时,我希望根据数据库值启用按钮。我有一个工作,但就是这样,我不知道为什么。如果有人能指出我代码中的错误并为我指出正确的方向,我将不胜感激

    Try
        Using connection As New SqlConnection("Data Source=?;Initial Catalog=?;Persist Security Info=True;User ID=?;Password=?")
            connection.Open()
            Dim dt As New DataTable
            Dim ds As New DataSet
            Dim da As New SqlDataAdapter
            ds.Tables.Add(dt)
            da = New SqlDataAdapter("select g1, g2, af1, af2, af3, pp1, pp2, pp3 from student_info where studentId = '" & stunumtxtbox.Text & "'", connection)
            Dim count = da.Fill(dt)
            If count = 1 Then
                G1Button.Enabled = True
            End If
            If count = 2 Then
                G2Button.Enabled = True
            End If
            If count = 3 Then
                AF1Button.Enabled = True
            End If
            If count = 4 Then
                AF2Button.Enabled = True
            End If
            If count = 5 Then
                AF3Button.Enabled = True
            End If
            If count = 6 Then
                PP1Button.Enabled = True
            End If
            If count = 7 Then
                PP2Button.Enabled = True
            End If
            If count = 8 Then
                PP3Button.Enabled = True
            End If
        End Using
    Catch se As SqlException
        MsgBox(se.Message)
    Finally
    End Try

提前谢谢你

您可以使用
LINQ
来实现这一点。如果表格包含指定字段/列具有值
y
n
的行,则以下代码将启用该按钮。否则,该按钮将被禁用

Dim g1 As List(Of String) = (From r As DataRow In dt Where r.Field(Of String)("g1") = "y" Or r.Field(Of String)("g1") = "n" Select r.Field(Of String)("g1")).ToList()
Dim g2 As List(Of String) = (From r As DataRow In dt Where r.Field(Of String)("g2") = "y" Or r.Field(Of String)("g2") = "n" Select r.Field(Of String)("g2")).ToList()
Dim af1 As List(Of String) = (From r As DataRow In dt Where r.Field(Of String)("af1") = "y" Or r.Field(Of String)("af1") = "n" Select r.Field(Of String)("af1")).ToList()
Dim af2 As List(Of String) = (From r As DataRow In dt Where r.Field(Of String)("af2") = "y" Or r.Field(Of String)("af2") = "n" Select r.Field(Of String)("af2")).ToList()
Dim af3 As List(Of String) = (From r As DataRow In dt Where r.Field(Of String)("af3") = "y" Or r.Field(Of String)("af3") = "n" Select r.Field(Of String)("af3")).ToList()
Dim pp1 As List(Of String) = (From r As DataRow In dt Where r.Field(Of String)("pp1") = "y" Or r.Field(Of String)("pp1") = "n" Select r.Field(Of String)("pp1")).ToList()
Dim pp2 As List(Of String) = (From r As DataRow In dt Where r.Field(Of String)("pp2") = "y" Or r.Field(Of String)("pp2") = "n" Select r.Field(Of String)("pp2")).ToList()
Dim pp3 As List(Of String) = (From r As DataRow In dt Where r.Field(Of String)("pp3") = "y" Or r.Field(Of String)("pp3") = "n" Select r.Field(Of String)("pp3")).ToList()

Me.G1Button.BackColor = If(g1.Contains("y"), Color.Green, If(g1.Contains("n"), Color.Red, SystemColors.Control))
Me.G1Button.Enabled = (g1.Count > 0)

Me.G2Button.BackColor = If(g2.Contains("y"), Color.Green, If(g2.Contains("n"), Color.Red, SystemColors.Control))
Me.G2Button.Enabled = (g2.Count > 0)

Me.AF1Button.BackColor = If(af1.Contains("y"), Color.Green, If(af1.Contains("n"), Color.Red, SystemColors.Control))
Me.AF1Button.Enabled = (af1.Count > 0)

Me.AF2Button.BackColor = If(af2.Contains("y"), Color.Green, If(af2.Contains("n"), Color.Red, SystemColors.Control))
Me.AF2Button.Enabled = (af2.Count > 0)

Me.AF3Button.BackColor = If(af3.Contains("y"), Color.Green, If(af3.Contains("n"), Color.Red, SystemColors.Control))
Me.AF3Button.Enabled = (af3.Count > 0)

Me.PP1Button.BackColor = If(pp1.Contains("y"), Color.Green, If(pp1.Contains("n"), Color.Red, SystemColors.Control))
Me.PP1Button.Enabled = (pp1.Count > 0)

Me.PP2Button.BackColor = If(pp2.Contains("y"), Color.Green, If(pp2.Contains("n"), Color.Red, SystemColors.Control))
Me.PP2Button.Enabled = (pp2.Count > 0)

Me.PP3Button.BackColor = If(pp3.Contains("y"), Color.Green, If(pp3.Contains("n"), Color.Red, SystemColors.Control))
Me.PP3Button.Enabled = (pp3.Count > 0)

1.
这是什么意思?“基于sql db中是否有单元格的按钮”,即“单元格”
2.
至少有2个表单接口不是更好吗?因此,您可以根据条件而不是每个控件来翻转它们?我试图询问如何通过搜索sql数据库来启用多个按钮(button.enabled=true),以及我想要的值是否存在于单元格、行中,然后启用一个或多个按钮。仅举一个简单的场景:sql表有5个字段,每个字段都引用特定按钮的启用值。假设您的学生id是验证的关键,并且验证完成后,您可以完整地获取该表sql,并通过每个值循环,直到结束。就像循环一个
数组一样。然后更改
if
条件以支持所有按钮。如果相关列(g1、g2…)不为null或dt中的默认值,则不计算作为整数的计数。在选择它们时,它们将始终存在,因此尝试使用列计数(?)是行不通的。我不想根据单元格中是否有值来启用按钮,我想根据单元格中的特定值来启用按钮-例如,如果它们完成了G1、G2和AF1类,但没有其他类,我只想要G1,G2和AF1按钮将被启用。单元格可以有“y”或“n”或为空。@Bjorn,但我如何解释细节?例如,您提供的代码确实有效,但它只是检查字段是否为空。我还需要检查字段中是否有“y”或“n”。我怎么解释呢?如果字段不为空,如果有“y”,我想启用按钮。如果有“n”,则将按钮颜色更改为绿色,如果有“n”,则将按钮更改为启用“静止”,但也将颜色更改为红色。你太棒了!!这个很好用!!非常感谢你!!