У меня есть таблица, сгенерированная кодом с радиокнопкой типа ввода. Это выглядит так
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim sbTable As New StringBuilder
Dim btn As HtmlInputRadioButton = New HtmlInputRadioButton()
btn.Attributes.Add("onclick", "addLayer()")
' cell.Controls.Add(btn)
sbTable.Append("<table border='1px solid black' id='myTable' runat='server'> ")
sbTable.Append("<thead>")
sbTable.Append("<tr>")
sbTable.Append("<th >No.</th>")
sbTable.Append("<th >Division</th>")
sbTable.Append("<th >Show</th>")
sbTable.Append("</thead>")
sbTable.Append("<tbody>")
sbTable.Append("<tr>")
sbTable.Append("<td>1</td>")
sbTable.Append("<td>A</td>")
sbTable.Append("<td><input type='radio' name='Overall' runat='server' id='radioA' value='A' OnServerChange='RadioButton_CheckedChanged' AutoPostBack='true'/></td>")
sbTable.Append("</tr>")
sbTable.Append("<tr>")
sbTable.Append("<td>2</td>")
sbTable.Append("<td>B</td>")
sbTable.Append("<td><input type='radio' name='Overall' runat='server' id='radioB' value='B' OnServerChange='RadioButton_CheckedChanged' AutoPostBack='true'/></td>")
sbTable.Append("</tr>")
sbTable.Append("</tbody>")
sbTable.Append("</table>")
phTrendUk.Controls.Add(New Literal() With {.Text = sbTable.ToString})
End Sub
Я хочу иметь событие, когда я нажимаю переключатель, он меняет значение метки
Protected Sub RadioButton_CheckedChanged(ByVal sender As Object, ByVal e As System.EventArgs)
idlbl.Text = "Click"
End Sub
Я уже добавил RadioButton_CheckedChanged, но это не сработало. Кто-нибудь может помочь с этим делом?
...и почему вы так генерируете HTML? Почему вы не помещаете его в файл .aspx/.ascx как настоящую разметку? Кроме того, runat = "server" так не работает...
на самом деле мне нужно динамически генерировать таблицу, поэтому я создаю такой код @Dai
Поверьте мне, когда я говорю, что гораздо проще отобразить HTML-разметку <table> в файле .aspx, чем ужасно злоупотреблять StringBuilder.
Итак, можно ли включить событие, когда я использую StringBuilder? @Дай
Нет; невозможно использовать серверные события WebForms, используя ваш текущий подход.
любое предложение, пожалуйста? Требование: я должен динамически генерировать данные внутри таблицы с переключателем для каждой строки. Поэтому, когда я нажимаю один из этих переключателей, он запускает какую-то функцию, например, создание таблицы или т. д. @Dai
Вы когда-нибудь использовали <asp:Repeater>?
Давайте продолжим обсуждение в чате.
Я рекомендую вам прочитать эти (старинные) статьи времен расцвета WebForms, в которых обсуждается, как использовать динамически создаваемые элементы управления в WebForms: web.archive.org/web/20110828071315/http://… /web/20110828195831/http://… web.archive.org/web/20110823031659/http://… web.archive.org/web/20110828200002/http://…
Посмотрите мой пример ниже — это очень просто — меньше работы, чем на любой другой платформе.






Конечно, вы можете это сделать.
Вопрос в том, откуда берется список опций для RadioButtonList?
Кроме того, вам не нужна ни таблица, ни весь этот код для создания разметки.
Просто перетащите список радиокнопок на веб-форму из панели инструментов.
Теперь у вас есть это:
<asp:RadioButtonList ID = "RadioButtonList1" runat = "server">
</asp:RadioButtonList>
И в представлении формы используйте это:
Итак, теперь мы можем редактировать/добавлять элементы с помощью дизайнера.
Итак, прибавляем 1, а текст Division
и 2 в целом,
Итак, это:
Теперь, конечно, приведенное выше создает эту разметку:
<asp:RadioButtonList ID = "RadioButtonList1" runat = "server"
AutoPostBack = "true">
<asp:ListItem Value = "1">Division</asp:ListItem>
<asp:ListItem Value = "2">Overall</asp:ListItem>
</asp:RadioButtonList>
<br />
<asp:Label ID = "Label1" runat = "server" Text = ""></asp:Label>
Итак, у нас есть autopostback=true и 2 варианта выше.
Итак, лист свойств, а затем вкладка событий и дважды щелкните событие SelectedIndexChanged отсюда:
Теперь мы можем написать код, чтобы установить значение метки, которая у нас есть ниже.
Protected Sub RadioButtonList1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles RadioButtonList1.SelectedIndexChanged
Dim strResult As String = ""
If RadioButtonList1.SelectedIndex = -1 Then
strResult = "No selection made"
Else
strResult = "Value selected = " & RadioButtonList1.SelectedItem.Value &
" Text selected value = " & RadioButtonList1.SelectedItem.Text
End If
Label1.Text = strResult
End Sub
Кроме того, мы можем настроить кнопки так, чтобы они двигались вертикально или горизонтально.
И мы даже можем добавить некоторые стили к кнопкам.
Итак, теперь у нас есть это:
И вы можете определенно использовать код, чтобы заполнить список вариантов.
Скажите так:
<asp:RadioButtonList ID = "RadioButtonList1" runat = "server"
AutoPostBack = "true"
DataValueField = "ID"
DataTextField = "HotelName">
</asp:RadioButtonList>
<br />
И на нашей странице загрузка, то этот код:
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Not IsPostBack Then
LoadButtonList
End If
End Sub
Sub LoadButtonList()
Dim strSQL As String =
"SELECT ID, HotelName FROM tblHotelsA ORDER BY HotelName"
Using conn As New SqlConnection(My.Settings.TEST4)
Using cmdSQL As New SqlCommand(strSQL, conn)
conn.Open()
RadioButtonList1.DataSource = cmdSQL.ExecuteReader
RadioButtonList1.DataBind()
End Using
End Using
End Sub
Тот же код для выбранного индекса изменился, и мы получили это:
Итак, используйте список переключателей.
И вы можете не только использовать редактор для добавления списка вариантов, но и второй пример показывает, как мы можем даже использовать базу данных для управления вариантами.
Обратите внимание, что у каждого выбора есть отображаемое текстовое значение, а затем скрытое значение выбора, и я полагаю, что также можно использовать индекс выбора.
А в коде позади вы можете свободно использовать код для добавления вариантов, если вы не хотите жестко кодировать разметку, или, как во втором примере, извлекать варианты из базы данных.
Или, может быть, из кода вам нужен выбор от 1 до 5.
Итак, тогда это:
<asp:RadioButtonList ID = "RadioButtonList1" runat = "server"
AutoPostBack = "true">
</asp:RadioButtonList>
И затем произнесите этот код при загрузке:
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Not IsPostBack Then
For i = 1 To 5
Dim OneChoice As New ListItem("Choice " & i, i)
RadioButtonList1.Items.Add(OneChoice)
Next
End If
End Sub
И теперь у нас есть это:
так что вы можете использовать встроенный редактор элементов, вы можете передать данные списка RB или даже просто зациклить и добавить варианты в код.
...почему вы используете WebForms в 2022 году?