Как включить несколько кнопок на основе данных sql db в ячейке

Мой проект успешно развивается, отчасти благодаря вашей помощи! Я наткнулся на еще одну неровность на дороге. Мне нужно включить (до 8) кнопок в зависимости от того, имеет ли ячейка в базе данных sql «y», «n» или null. Я могу заставить его работать на одну кнопку, но не на 2 или более. Прежде чем я покажу вам свой код, позвольте мне рассказать немного подробнее: в моей базе данных хранится информация об учениках и оценках (и множество других вещей, но они не относятся к этому вопросу). Каждый студент должен пройти все восемь (8) классов, чтобы получить высшее образование. В БД у меня есть столбцы, помеченные для каждого из восьми классов. Если они прошли курс, в строке стоит буква «y». Если они провалили урок, это «n». Если они еще не взяли его или он находится в процессе, ячейка имеет null, когда я просматриваю ее в студии управления сервером sql, потому что они не завершили ее и не завершили ее, поэтому данные еще не введены.

У меня есть восемь (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

Заранее спасибо!


person Community    schedule 22.02.2014    source источник
comment
1. Что это значит? кнопки основаны на том, является ли ячейка в базе данных sql, ячейка 2. Не лучше ли иметь по крайней мере 2 интерфейса формы? Таким образом, вы можете переключать их на основе критериев вместо того, чтобы переходить к каждому элементу управления?   -  person bonCodigo    schedule 22.02.2014
comment
Я попытался спросить, как включить несколько кнопок (button.enabled = true), выполнив поиск в базе данных sql, и если значение, которое я хочу, существует в ячейке, в строке, затем включило кнопку или кнопки.   -  person    schedule 22.02.2014
comment
Просто возьмем простой сценарий: таблица sql имеет 5 полей, каждое из которых относится к значению включения определенной кнопки. Предполагая, что ваш идентификатор студента является ключом для проверки, и как только проверка будет выполнена, вы можете полностью получить эту таблицу sql и loop через каждое значение до конца. Например, как вы зацикливаете array. Затем измените условие if, чтобы оно поддерживало все кнопки. Читать   -  person bonCodigo    schedule 22.02.2014
comment
вместо оценки count как целого числа оцените, не является ли связанный столбец (g1, g2...) нулевым или каким-либо значением по умолчанию в dt. При их выборе они всегда будут присутствовать, поэтому попытка использовать количество столбцов (?) не сработает.   -  person Ňɏssa Pøngjǣrdenlarp    schedule 22.02.2014


Ответы (1)


Вы можете использовать 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)
person Bjørn-Roger Kringsjå    schedule 22.02.2014
comment
Я не хочу включать кнопки в зависимости от того, находится ли значение в ячейке, я хочу включить их в зависимости от конкретного значения в ячейке, например, если они закончили классы G1, G2 и AF1, но не другие, я хочу, чтобы были включены только кнопки G1, G2 и AF1. Ячейка может содержать 'y' или 'n' или быть null. - person ; 22.02.2014
comment
@ Бьорн, а как мне учитывать специфику? Например, предоставленный вами код работает, но он только проверяет, не является ли поле нулевым. Мне также нужно проверить, есть ли в поле «y» или «n». Как бы я объяснил это? Я хочу включить кнопки, если поле не пустое, И если оно имеет «y», тогда я собираюсь изменить цвет кнопки на зеленый, а если у него есть «n», то измените кнопку, чтобы включить все еще, но также цвет к красному. - person ; 23.02.2014
comment
Ты жжешь!! Это отлично работает!! Большое спасибо!! - person ; 25.02.2014