Nebenbei bemerkt, теперь это тоже отлично работает:

вопрос трансформировался из предыдущегоВот.

Кажется, что проблема на самом деле заключается в том, что не удается распознать флажки как таковые - действительно ли существует проблема с обновлением базы данных после решения этой головоломки, еще предстоит выяснить.

Итак, вот код:

Protected Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Dim connStr As String = "SERVER=PLATYPUS42;DATABASE=duckbilldata;UID=entenhausen;PWD=pondscum"
    Dim upd8DML As String = "UPDATE CustomerCategoryLog SET Category = 'Exploding' WHERE Unit = @Unit And MemberNo = @MemberNo AND Custno = @CustNo"

    Dim coName As String
    Dim argVals(2) As String
    Dim _Unit As String
    Dim _MemberNo As String
    Dim _CustNo As String
    Dim curCheckboxIDVal As String
    Label2.Text="label 2 text from button1_click"
    LabelDebug.Text="label debug text from button1_click"

    For Each cntrl As Control In Me.Controls
            Label2.Text="label 2 text from foreach"
            If TypeOf cntrl Is CheckBox Then
                Label2.Text="label 2 text from is checkbox"
                If DirectCast(cntrl, CheckBox).Checked = True Then
                    Label2.Text="label 2 text from checked"
                    curCheckboxIDVal = CStr(DirectCast(cntrl, CheckBox).ID)
                    coName = GetLabelTextForID(curCheckboxIDVal)
                    argVals = GetArgValsForCompanyName(coName)
                    _Unit = argVals(0)
                    _MemberNo = argVals(1)
                    _CustNo = argVals(2)
                Label2.Text=_Unit
                LabelDebug.Text=_MemberNo
                    Using conn As New SqlConnection(connStr), _
                        cmd As New SqlCommand(upd8DML, conn)
                        cmd.Parameters.Add("@Unit", SqlDbType.VarChar, 50).Value = _Unit
                        cmd.Parameters.Add("@MemberNo", SqlDbType.VarChar, 50).Value = _MemberNo
                        cmd.Parameters.Add("@CustNo", SqlDbType.VarChar, 50).Value = _CustNo
                        conn.Open
                        cmd.ExecuteScalar()
                    End Using
                End If
            End If
        Next
End Sub

Я обновляю Label2.Text, чтобы увидеть, как далеко заходит код - и он попадает только в «foreach» - это последнее значение Label2.Text: «текст метки 2 от foreach»

Итак, эта строка:

If TypeOf cntrl Is CheckBox Then

... не может приравнять к истине.

Тем не менее, не только у меня есть много динамически созданных флажков в форме при нажатии кнопки, но есть и один, который я там сбросил во время разработки. Очевидно, что ни один из этих флажков не рассматривается как флажок.

Почему бы и нет? Почему тип элемента управления checkbox не оценивается как CheckBox?

ПРИМЕЧАНИЕ: когда я добавляю "весь шебанг", вот так:

System.Web.UI.WebControls.CheckBox

...это не имеет значения; на самом деле, он скрывает «System.Web.UI.WebControls». часть.

ОБНОВИТЬ

Эта идея от Перри Мейсона вдохновила меня попробовать это:

For Each cntrl As Control In Me.Controls
    Label2.Text = "label 2 text from foreach"
    LabelDebug.Text = LabelDebug.Text+" "+cntrl.GetType().ToString+" "
    If TypeOf cntrl Is System.Web.UI.WebControls.CheckBox Then

... который показывает это:

Таким образом, флажок (среди прочего) воспринимается просто как «LiteralControl». Кажется довольно расплывчатым ...

ОБНОВЛЕНИЕ 2

В ответ на Брэдли Аффнера вот код, который добавляет флажки:

For i As Integer = 0 To categoryDT.Rows.Count - 1
    ' for testing, limit count
    If i > 3 Then 'There are thousands...just grab enough to fit on the page without scrolling for now...
        Exit For
    End If
    Dim coName = New Label()
    ' Must prepend with something, as controls cannot share the same ID
    coName.ID = "lbl" + i.ToString()
    coName.Text = categoryDT.Rows(i)(0).ToString()
    formCustCatMaint.Controls.Add(coName)

    Dim chk = New CheckBox()
    chk.ID = "ckbx" + i.ToString()
    chk.Checked = True
    formCustCatMaint.Controls.Add(chk)

    ' Add a "line break" after each checkbox
    Dim l = New Label()
    l.Text = "<br>"
    formCustCatMaint.Controls.Add(l)
Next
ОБНОВЛЕНИЕ 3

Третья мысль: возможно, дело не в том, что флажки рассматриваются как System.Web.UI.LiteralControl, а в том, что они вообще не видны - даже те, которые были сброшены на форму / страницу во время разработки.

Почему я предлагаю эту радикальную идею? Потому что перечисляются только следующие элементы управления:

LiteralControl
HtmlHead
LiteralControl
HtmlForm
LiteralControl

Тем не менее, есть гораздо больше элементов управления, даже если не учитывать динамически генерируемые флажки. Нет кнопки, если только она не является одним из «LiteralControl».

Что-то гнилое, как все здесь.

ОБНОВЛЕНИЕ 4

Изменение Page_Load на Page_Init (по предложению Перри Мейсона) имело значение; Я получаю это:

Multiple controls with the same ID 'lbl0' were found. Trace requires that controls have unique IDs. 
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.Web.HttpException: Multiple controls with the same ID 'lbl0' were found. Trace requires that controls have unique IDs.

Source Error: 

An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.
ОБНОВЛЕНИЕ 5

Я действительно не понимаю, почему есть несколько «lbl0», потому что i в цикле должен автоматически увеличиваться, верно? Это код:

For i As Integer = 0 To categoryDT.Rows.Count - 1
    ' for testing, limit count
    If i > 3 Then 'There are thousands...just grab enough a few for now...
        Exit For
    End If
    Dim coName = New Label()
    ' Must prepend with something, as controls cannot share the same ID
    coName.ID = "lbl" + i.ToString()
    coName.Text = categoryDT.Rows(i)(0).ToString()
    formCustCatMaint.Controls.Add(coName)

    Dim chk = New CheckBox()
    chk.ID = "ckbx" + i.ToString()
    chk.Checked = True
    formCustCatMaint.Controls.Add(chk)

    ' Add a "line break" after each checkbox
    Dim l = New Label()
    l.Text = "<br>"
    formCustCatMaint.Controls.Add(l)
Next

...а такжеi очевидно увеличивается, потому что в противном случае «If i> 3» никогда не будет истинным, что и есть, потому что количество пар Label / CheckBox действительно сокращено.

Может ли быть так, что Page_Init вызывается несколько раз, и во второй раз он пытается добавить второй lbl0, и тогда происходит вышеописанное?

ОБНОВЛЕНИЕ 6

Это действительно должно быть правдой (этот Page_Init) достигается несколько раз, потому что следующий код предотвратил ошибку:

Dim PageAlreadyInitted As Boolean = False

Protected Sub Page_Init(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    If PageAlreadyInitted = True Then Exit Sub
    PageAlreadyInitted = True

... но это не имеет значения, поскольку флажки находятся в цикле через элементы управления - я все еще получаю только LiteralControls, без кнопок, флажков и т. д.

ОБНОВЛЕНИЕ 7

FWIW, элементы управления создаются, как и ожидалось, как видно из этого фрагмента через «View Source»:

<span id="lbl0"> AMC THEATRES - TYSON CORNER 16</span><input id="ckbx0" type="checkbox" name="ckbx0" checked="checked" /><span><br></span><span id="lbl1"> GSO AIRPORT - ACC</span><input id="ckbx1" type="checkbox" name="ckbx1" checked="checked" /><span><br></span><span id="lbl2"> LONGHORN - DES PLAINS</span><input id="ckbx2" type="checkbox" name="ckbx2" checked="checked" /><span><br></span><span id="lbl3"> MAGGIE'S </span><input id="ckbx3" type="checkbox" name="ckbx3" checked="checked" /><span><br></span><span id="lbl4"> OAKRIDGE NURSING & REHAB NO LGER FB 11296</span><input id="ckbx4" type="checkbox" name="ckbx4" checked="checked" /><span><br></span><span id="lbl5"> SKYPORT - WOODY CREEK B&C DIA C-C </span><input id="ckbx5" type="checkbox" name="ckbx5" checked="checked" /><span><br></span><span id="lbl6"> UNIV NORTH CAROLINA - CHARLOTTE - BAKERY #32936</span><input id="ckbx6" type="checkbox" name="ckbx6" checked="checked" /><span><br></span><span id="lbl7">"DRAKE ""SIMPLY TO GO/OLMSTED #2"</span><input id="ckbx7" type="checkbox" name="ckbx7" checked="checked" /><span><br></span><span id="lbl8">"DRAKE CENTER   SCS""OLD ACCOUNT"""</span><input id="ckbx8" type="checkbox" name="ckbx8" checked="checked" /><span><br></span><span id="lbl9">"HUT, THE - EMORY & HENRY"</span><input id="ckbx9" type="checkbox" name="ckbx9" checked="checked" /><span><br></span><span id="lbl10">"THOMAS MORE COLLEGE   SCS ""OLD"""</span><input id="ckbx10" type="checkbox" name="ckbx10" checked="checked" /><span><br></span><span id="lbl11">"WRIGHT STATE ""C"" STORE  SCS"</span><input id="ckbx11" type="checkbox" name="ckbx11" checked="checked" /><span><br></span>

Ответы на вопрос(1)

Ваш ответ на вопрос