asp.net 如何从SQL Server数据库动态填充RadioButtonList

kgsdhlau  于 2023-02-26  发布在  .NET
关注(0)|答案(1)|浏览(164)

我们有一个带有Yes或No选项的RadioButonList,但是,我们希望从数据库中动态填充这些选项。
数据库中的列名(其值要填充到RadioButtonList中)名为IsVetoVote,其数据类型为Bit,值为1表示Yes,0表示No。
例如,如果用户在数据库中查询特定提案以查看该提案是否已被投票,如果答案为是(或1),则希望选中单选按钮列表是框。如果答案为否(或0),则选中单选按钮列表否框。
我的代码未提供"是"或"否"值。
当我在SSMS中运行代码的查询部分时,我得到了正确的结果1或0,但是没有检查RadioButtonList。
这是我的当前代码:

<asp:RadioButtonList ID ="VetoVote" RepeatDirection="Horizontal" runat="server">
    <asp:ListItem Value="Yes"></asp:ListItem>
    <asp:ListItem Value="No"></asp:ListItem>
</asp:RadioButtonList>    
   
   
Sub LoadData()
        Dim strSQL As String = "Select IsVetoVote from Ballots where choices Like '%' + @vetono + '%'"
        Dim cmdSQL As New SqlCommand(strSQL)
        With cmdSQL.Parameters
            .Add(New SqlParameter("@vetono", SqlDbType.NVarChar).Value = address.Replace("'", "''").Trim())
            End With

        Dim rstData As DataTable = MyrstP(cmdSQL)

        With rstData.Rows(0)
            ' now set the radio button, we have a true/false column "Active"
            ' in the table. So, if true - set Radbio bt1 index 0 (first choice)
            ' if false, then set RB index 1 = (2nd choice).

         VetoVote.SelectedIndex = Not (.Item("IsVetoVote"))    ' sql returns 1 for true, 0 for false

      End With
     End Sub
     
     Public Function MyrstP(cmdSQL As SqlCommand) As DataTable

        Dim rstData As New DataTable

        Using mycon As New SqlConnection(conString)
            Using (cmdSQL)
                cmdSQL.Connection = mycon
                mycon.Open()
                rstData.Load(cmdSQL.ExecuteReader)
            End Using
        End Using
        Return rstData
    End Function

//检查用户帐单地址是否与邮寄地址相同的复选框。

<td style="width:5%;" class="align-left"><span style="color:darkred;font-weight:600;font-size:14pt;" class="rMyChoice"> Check box if billing address is same as mailing address <img src="Images/hand-arrow.jpg" class="rMyChoice" style="vertical-align:middle !important;" alt="Check the checkbox" /><asp:CheckBox style="height:45px;width:45px;" ID="SameAsMailing" class="rMyChoice" runat="server" /></span></td>
3mpgtkmj

3mpgtkmj1#

好吧,你应该不需要任何循环。
假设我有一个酒店记录,我决定使用RB列表代替复选框。
因此,如果hotel active =真,则设置RB第一选择。
因此,如果旅馆活动=假,则设置RB第二选择。
所以,假设这个标记:

<h2>Hotel information</h2>
    <div style="float: left" class="iForm">
        <label>HotelName</label>
        <asp:TextBox ID="txtHotel" runat="server" Width="280" />
        <br />
        <label>First Name</label>
        <asp:TextBox ID="tFN" runat="server" f="FirstName" Width="140" />
        <br />
        <label>Last Name</label>
        <asp:TextBox ID="tLN" runat="server" f="LastName" Width="140" />
        <br />
        <label>City</label>
        <asp:TextBox ID="tCity" runat="server" f="City" Width="140" /><br />
        <label>Prov</label>
        <asp:TextBox ID="tProvince" runat="server" f="Province" Width="75"></asp:TextBox>
        <br />
    </div>
    <div style="float: left; margin-left: 20px" class="iForm">
        <label>Description</label>
        <br />
        <asp:TextBox ID="txtNotes" runat="server" Width="400" TextMode="MultiLine"
            Height="150px" f="Description"></asp:TextBox>
        <br />
    </div>
    <div style="clear:both"></div>

    <asp:RadioButtonList ID="VetoVote" RepeatDirection="Horizontal"
        runat="server" CssClass="rMyChoice" >
        <asp:ListItem Text="Hotel Active" Value="Yes"></asp:ListItem>
        <asp:ListItem Text="Hotel Closed for Season" Value="No"></asp:ListItem>
    </asp:RadioButtonList>
</div>

和要加载的代码:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

    If Not IsPostBack Then
        LoadData
    End If

End Sub

Sub LoadData()

    Dim strSQL As String =
        "SELECT * FROM tblHotelsA WHERE id = 16"
    Dim cmdSQL As New SqlCommand(strSQL)

    Dim rstData As DataTable = MyrstP(cmdSQL)

    With rstData.Rows(0)
        txtHotel.Text = .Item("HotelName")
        tFN.Text = .Item("FirstName")
        tLN.Text = .Item("LastName")
        tCity.Text = .Item("City")
        tProvince.Text = .Item("Province")
        txtNotes.Text = .Item("Description")

        ' now set the radio button, we have a true/false column "Active"
        ' in the table. So, if true - set Radbio bt1 index 0 (first choice)
        ' if false, then set RB index 1 = (2nd choice).

        VetoVote.SelectedIndex = Not (.Item("Active"))    ' sql returns 1 for true, 0 for false

    End With

End Sub

结果是这样的:

所以,你不是试图"填充" RB按钮,你想设置第一个选择,和/或第二个选择的基础上,一个单一的真/假列。
我注意到了上面的内容,因为RB列表可以被"馈送"到一个数据源。
我可能希望用户从列表中选择一家酒店,因此我可以将RB列表的"value"设置为酒店的数据库PK id,然后将文本部分设置为酒店名称。
我可以把RB列表放到一个页面上

<h3>Please pick ONE hotel</h3>
        <asp:RadioButtonList ID="RBHotels" runat="server"
            DataValueField="ID"
            DataTextField="HotelName"
            CssClass="rMyChoice">
        </asp:RadioButtonList>

然后这个代码:

Sub LoadRB()

    Dim strSQL As String =
        "SELECT ID, HotelName FROM tblHotelsA ORDER BY HotelName"

    Dim cmdSQL As New SqlCommand(strSQL)

    RBHotels.DataSource = MyrstP(cmdSQL)
    RBHotels.DataBind()

End Sub

现在我们有一个列表,您只能选择一家酒店:
例如:

所以,我们在这里被抛出了一个循环,你建议你用数据来填充一个RB列表。
不,您只是想根据数据库中一条记录的一个真/假值设置第一个选择或第二个选择。
因此,您可以设置selected index = 0(第一选择),或者设置selected index = 1(第二选择)。
作为一个提示,我已经厌倦了一遍又一遍地输入代码来获取一些数据,所以上面的例子使用了这个helper例程:

Public Function MyrstP(cmdSQL As SqlCommand) As DataTable

    Dim rstData As New DataTable

    Using mycon As New SqlConnection(GetConstr)
        Using (cmdSQL)
            cmdSQL.Connection = mycon
            mycon.Open()
            rstData.Load(cmdSQL.ExecuteReader)
        End Using
    End Using
    Return rstData
End Function

编辑:RB测试示例

所以,让我们建立一个100%新的页面,只有这样的标记:

<asp:Button ID="Button1" runat="server" Text="Set RB Index = 0"
            OnClick="Button1_Click"
            />
        <br />
        <asp:Button ID="Button2" runat="server" Text="sET RB index = 1" 
            onclick="Button2_Click"
            />
        <br />
        <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
        <br />
        <asp:RadioButtonList ID="VetoVote" RepeatDirection="Horizontal" runat="server">
            <asp:ListItem Value="Yes"></asp:ListItem>
            <asp:ListItem Value="No"></asp:ListItem>
        </asp:RadioButtonList>

后面的代码是这样的:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

End Sub

Protected Sub Button1_Click(sender As Object, e As EventArgs)

    TextBox1.Text = "RB set to 0 index value"

    VetoVote.SelectedIndex = 0

End Sub

Protected Sub Button2_Click(sender As Object, e As EventArgs)

    TextBox1.Text = "RB set to 1 index value"

    VetoVote.SelectedIndex = 1

End Sub

我们现在看到这个:

编辑#2:我的RB列表css

如果你有这个:

<asp:RadioButtonList ID ="VetoVote" RepeatDirection="Horizontal" runat="server">
    <asp:ListItem Value="Yes"></asp:ListItem>
    <asp:ListItem Value="No"></asp:ListItem>
</asp:RadioButtonList>

然后我们看到/得到这个:

但是,如果我们在该页添加以下内容:
编辑:更新样式表-删除复选框

<style>
    .rMyChoice h1 {
        color: hsla(215, 5%, 10%, 1);
        margin-bottom: 2rem;
    }

    .rMyChoice section {
        display: flex;
        flex-flow: row wrap;
    }

    section > div {
        flex: 1;
        padding: 0.5rem;
    }

    .rMyChoice input[type=radio] {
        display: none;
        cursor: pointer;
    }

    .rMyChoice label {
        display: block;
        background: white;
        border: 2px solid hsla(150, 5%, 75%, 1);
        border-radius: 25px;
        padding-left: 8px;
        padding-right: 8px;
        text-align: center;
        box-shadow: 0px 3px 20px -2px hsla(150, 5%, 65%, 0.5);
        position: relative;
        margin-right: 9px;
        height: 30px;
        padding-top: 8px;
    }

    .rMyChoice input[type="radio"]:checked + label {
        background: hsla(150, 5%, 75%, 1);
        color: hsla(215, 0%, 100%, 1);
        box-shadow: 0px 0px 20px hsla(150,5%, 75%, 0.75);
    }

    .rMyChoice input[type="radio"] {
        background: red;
        border-color: red;
    }

    .rMyChoice p {
        font-weight: 900;
    }
</style>

然后这个

<asp:RadioButtonList ID="VetoVote" RepeatDirection="Horizontal" runat="server"
    CssClass="rMyChoice"
    >
    <asp:ListItem Value="Yes"></asp:ListItem>
    <asp:ListItem Value="No"></asp:ListItem>
</asp:RadioButtonList>

然后我们得到/看到这个:

相关问题