Явная итерация в Gridview и использование FindControl ничего не возвращает

#asp.net #vb.net

#asp.net #vb.net

Вопрос:

Я пытаюсь выполнить цикл через элемент управления GridView. Он содержит переключатель, и я хотел бы установить его свойство checked на основе определенного условия. Однако метод FindControl ничего не возвращает.

Вот код aspx:

 <asp:GridView ID="GridViewInfo"
                runat="server"
                AutoGenerateColumns="False"
                DataKeyNames="Result_ID">
    <Columns>
        <asp:TemplateField HeaderStyle-Width="3%" HeaderText="SELECT">
            <ItemTemplate>
                <input name="RadioButtonResultID" 
                       id="RadioButtonResultID" type="radio" 
                       value='<%# Eval("Result_ID") %>'/>
            </ItemTemplate>
        </asp:TemplateField>
        <asp:BoundField HeaderText="Characteristics" 
                        DataField="Characteristics" />
    </Columns>
</asp:GridView>
 

Код, лежащий в основе:

     Private Sub HighlightSelectedRow(ByVal id As String)
        Dim rowCount As Int32 = 0

        For Each row As GridViewRow In GridViewLabInfo.Rows
            If (GridViewLabInfo.DataKeys(rowCount).Value.ToString() = id) Then
                row.CssClass = "SelectedRowStyle"

                'Both of the below lines are failing
                TryCast(row.FindControl("RadioButtonResultID"), RadioButton).Checked = True
                CType(row.FindControl("RadioButtonResultID"), RadioButton).Checked = True

            End If
            rowCount = rowCount   1
        Next
    End Sub
 

Комментарии:

1. Почему мы не можем установить здесь проверенное значение? пожалуйста, любая ссылка.

2. поместите runat=server в теги этого элемента управления.

Ответ №1:

Вы привели неверно. Это не asp.net переключатель (RadioButton), но является HTML-кнопкой,

Таким образом, ваше приведение в этом случае должно быть:

 TryCast(row.FindControl("RadioButtonResultID"), HtmlInputRadioButton ).Checked = True
 

И вам даже не нужно приведение, но это должно сработать:

 Dim MyRadioBut As HtmlInputRadioButton = row.FindControl("RadioButtonResultID")
MyRadioBut.Checked = True
 

Однако в ОБОИХ вышеуказанных случаях? Вы не можете получить элемент управления в коде, если не укажете, что этот элемент управления отображается сервером.

Вам нужно добавить runat=»server» .

например, это:

  <input name="RadioButtonResultID" 
                   id="RadioButtonResultID" type="radio" 
                   value='<%# Eval("Result_ID") %>' runat="server" />