Разрешить проверять только некоторые флажки. Загружен на page_load

Я динамически добавляю флажки asp на свою страницу, основываясь на количестве строк в моей таблице базы данных, по идентификатору. Также флажок присваивается идентификатор из таблицы БД. Я также две колонки в моей таблице базы данных "numberOffered" и "numberAllowed". Моя идея заключается в том, чтобы при загрузке страницы только пользователь мог отметить, скажем, 3 из 10 показанных флажков. Я удалил много кода, который, по моему мнению, был бы ненужным. Заранее большое спасибо.

For Each Arow As Object In ATable.Rows
    For Each Brow As Object In BTable.Rows
        If Brow(1) = a_ID Then
            If Brow(2) = b_ID Then
                Dim cbShown As Integer = Arow(5)
                Dim cbAllowed As Integer = Arow(6)
                Dim checkBox As New CheckBox()
            End If
        End If
    Next
Next

checkBox.ID = Crow(0)
divcontrol.Controls.Add(checkBox)

РЕДАКТИРОВАТЬ: полная страница подкачки

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        If Not (Session("studentLoggedIn") Or Session("adminLoggedIn")) Then
            Routines.LogOut()
        End If

        If Session("adminLoggedIn") = True Then
            castVote.Enabled = False
            castVote.CssClass = "btnDisabled"
            Dim p As New HtmlGenericControl()
            p.TagName = "p"
            p.InnerText = "Vote button disabled. Only students may vote."
            adminMsg.Controls.Add(p)
        End If

        Dim ballot_ID As Integer = CType(Session.Item("ballot_ID"), Integer)
        Dim ballotName As String = CType(Session.Item("ballotName"), String)

        Dim ballotsAdapter As New eVoteTableAdapters.ballotsTableAdapter()
        Dim ballotsTable As New eVote.ballotsDataTable
        ballotsTable = ballotsAdapter.GetDataBy3getBallotsByID(ballot_ID)

        Dim sectionsAdapter As New eVoteTableAdapters.sectionsTableAdapter()
        Dim sectionsTable As New eVote.sectionsDataTable
        sectionsTable = sectionsAdapter.GetDataBygetsectionsByBallotID(ballot_ID)

        Dim candidatesAdapter As New eVoteTableAdapters.candidatesTableAdapter()
        Dim candidatesTable As New eVote.candidatesDataTable
        candidatesTable = candidatesAdapter.GetDataBygetCandidatesByballotID(ballot_ID)

        openBallotName.InnerText = ballotName

        Dim section_ID
        For Each row As Object In sectionsTable.Rows
            If row(1) = ballot_ID Then
                section_ID = row(0)
                Dim sectionName As New HtmlGenericControl()
                Dim sectionDescription As New HtmlGenericControl()
                Dim divcontrol As New HtmlGenericControl()
                Dim br As New HtmlGenericControl()
                divcontrol.Attributes("ID") = section_ID
                divcontrol.Attributes("runat") = "server"
                divcontrol.Attributes("style") = "border: solid;"
                divcontrol.TagName = "div"
                br.TagName = "br"
                sectionName.TagName = "h4"
                sectionDescription.TagName = "p"
                mainBallotDiv.Controls.Add(divcontrol)
                mainBallotDiv.Controls.Add(br)
                sectionName.InnerText = row(2)
                sectionDescription.InnerText = row(3)
                divcontrol.Controls.Add(sectionName)
                divcontrol.Controls.Add(sectionDescription)


                For Each Crow As Object In candidatesTable.Rows
                    If Crow(1) = ballot_ID Then
                        If Crow(2) = section_ID Then
                            Dim checkBox As New CheckBox()
                            Dim canImg As New Image()
                            Dim canName As New HtmlGenericControl()
                            Dim canBio As New HtmlGenericControl()
                            Dim rmImg As New Image()
                            Dim rmName As New HtmlGenericControl()
                            Dim rmBio As New HtmlGenericControl()
                            Dim canBytes As Byte() = Crow(6)
                            Dim canBase64String As String = Convert.ToBase64String(canBytes, 0, canBytes.Length)
                            Dim rmBytes As Byte() = Crow(11)
                            Dim rmBase64String As String = Convert.ToBase64String(rmBytes, 0, rmBytes.Length)
                            checkBox.ID = Crow(0)
                            canName.TagName = "h3"
                            canBio.TagName = "p"
                            rmName.TagName = "h3"
                            rmBio.TagName = "p"
                            canName.InnerText = Crow(4) & " " & Crow(5)
                            canBio.InnerText = Crow(7)
                            canImg.ImageUrl = Convert.ToString("data:image/png;base64,") & canBase64String
                            canImg.Height = 120
                            rmName.InnerText = Crow(9) & " " & Crow(10)
                            rmBio.InnerText = Crow(12)
                            rmImg.ImageUrl = Convert.ToString("data:image/png;base64,") & rmBase64String
                            rmImg.Height = 120
                            divcontrol.Controls.Add(checkBox)
                            divcontrol.Controls.Add(canImg)
                            divcontrol.Controls.Add(canName)
                            divcontrol.Controls.Add(canBio)
                            If row(4) = True Then
                                divcontrol.Controls.Add(rmImg)
                                divcontrol.Controls.Add(rmName)
                                divcontrol.Controls.Add(rmBio)
                            End If
                        End If
                    End If
                Next
            End If
        Next
    End Sub

1 ответ

Вам понадобится переменная (целое число) для количества разрешенных флажков, затем другая переменная для количества проверенных флажков, наконец, список, содержащий имя каждого флажка (все эти переменные должны быть полями классов)

тогда в вашем обработчике событий что-то вроде

Sub Check_Clicked(sender As Object, e As EventArgs)

checked += 1        
        If checked >= NumberAllowedChecked Then
            For Each a As CheckBox In MyCheckBoxList
                   If Not CheckBox.Checked Then CheckBox.Enabled = False               
                Next
        End If
End Sub

Я не слишком знаком с VB, но я думаю, что это должно направить вас на правильный путь к тому, как реализовать это для себя

Редактировать: вы захотите добавить логику, если пользователь снимает флажок, чтобы вычесть один из 'флажок;

Другие вопросы по тегам