#vb.net #winforms
#vb.net #winforms
Вопрос:
Возможно ли создать список переключателей, как у нас есть checked List box? На самом деле я хочу загрузить все параметры из базы данных в список, но не хочу, чтобы пользователь разрешал проверять более одного элемента.
Также, как это прочитать (скажем, пункт 4 списка) Я хочу сохранить его значение в переменной.
Спасибо и с наилучшими пожеланиями. Furqan
Комментарии:
1. Является ли это ASP.Net Веб-приложение?
2. VB.Net это только язык, а не технология (например, ASP. Net или Windows Forms). Хорошо, тогда посмотрите мой обновленный ответ.
Ответ №1:
Если вы имеете в виду ASP.Net RadioButtonList-Элемент управления попробуйте этот пример:
aspx (вы можете настроить источник данных в конструкторе (показать смарт-тег):
<asp:RadioButtonList ID="RadioButtonList1" runat="server" DataSourceID="SqlDataSource1"
DataTextField="ClaimStatusName" DataValueField="idClaimStatus">
</asp:RadioButtonList>
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:RM2ConnectionString %>"
SelectCommand="SELECT [idClaimStatus], [ClaimStatusName] FROM [dimClaimStatus]">
</asp:SqlDataSource>
Список Radiobuttonlist позволяет пользователю по умолчанию выбирать только один элемент.
Выбранный элемент сохраняется в RadioButtonList1.SelectedItem
.
РЕДАКТИРОВАТЬ: Поскольку теперь вы ясно указали, что это проблема с Winform, вам нужен GroupBox, позволяющий пользователю выбирать только один.
Чтобы динамически создавать радиокнопки из источника данных и добавлять их в Groupbox, взгляните на мой samplecode:
Private Sub Form_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim allStatus As DataSet2.StatusDataTable = New DataSet2TableAdapters.StatusTableAdapter().GetData()
For i As Int32 = 0 To allStatus.Rows.Count - 1
Dim status As DataSet2.StatusRow = allStatus(i)
Dim rb As New RadioButton()
rb.Text = status.ClaimStatusName
rb.Tag = status.idClaimStatus
rb.Location = New Point(Me.GroupBox1.Location.X 5, Me.GroupBox1.Location.Y i * rb.Height)
AddHandler rb.CheckedChanged, AddressOf RBCheckedChanged
Me.GroupBox1.Controls.Add(rb)
Next
Me.GroupBox1.Visible = allStatus.Rows.Count > 0
If allStatus.Rows.Count > 0 Then
Dim width, height As Int32
Dim lastRB As Control = Me.GroupBox1.Controls(GroupBox1.Controls.Count - 1)
width = lastRB.Width 20
height = lastRB.Height
Me.GroupBox1.Size = New Size(width, allStatus.Rows.Count * height 20)
End If
End Sub
Private Sub RBCheckedChanged(ByVal sender As Object, ByVal e As EventArgs)
Dim source As RadioButton = DirectCast(sender, RadioButton)
Dim checkedRB As RadioButton = getCheckedRadioButton(Me.GroupBox1)
'source and checkedRB are the same objetcs because we are in CheckedChanged-Event'
'but getCheckedRadioButton-function works from everywhere'
End Sub
Private Function getCheckedRadioButton(ByVal group As GroupBox) As RadioButton
For Each ctrl As Control In group.Controls
If TypeOf ctrl Is RadioButton Then
If DirectCast(ctrl, RadioButton).Checked Then Return DirectCast(ctrl, RadioButton)
End If
Next
Return Nothing
End Function
Помните, что вы должны заменить мои объекты данных своими.
Комментарии:
1. Извините, мне это не нужно в asp. Мне это нужно в winforms