微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何防止选择具有相同 ID 值的单选按钮列表中的所有单选按钮?

如何解决如何防止选择具有相同 ID 值的单选按钮列表中的所有单选按钮?

我有多个单选按钮列表。他们中的每一个显示在下拉列表索引已更改。我的问题是当我从特定的单选按钮列表中选择一个单选按钮时,所有其他单选按钮列表都会选择自己的单选按钮,这些单选按钮与我选择的单选按钮具有相同的 ID 值。 所以当我选择一个时,所有其他人都选择他们自己的。 我正在使用 Vb.NET Web 表单,并将单选按钮列表设置为自动回发为 true,并且它们是动态创建的。 当我创建一个唯一的 ID 时,它不允许我进行选择,因此当我选择它时,不会选择单选按钮。

解决方法

这可能是既定目标更有价值的案例之一。

您没有提及或说明您的数据来自何处。

假设我有一个酒店列表。我想要一个酒店“评级”的单选按钮列表。

好吧,在表单设计器中 - 放入网格视图。生成列。 (然后从标记中删除该数据源。并在属性表中删除 dataSource1 设置。

好的,到目前为止?这大约是 2 分钟的时间。

现在,放入单选按钮列表。 (有时我会将它放在网格外的表单上。选择单选列表,然后添加选项(0-5 评级)。

现在将该单选按钮列表移动到网格视图中。您必须将其包裹在项目模板周围。

所以请注意我在这里大部分时间是如何使用构建器的。 (即使对于单选按钮列表中的选项,我也使用了设计器的构建器)。

好的,现在我们的标记看起来像这样:

<br />
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False">
    <Columns>
        <asp:BoundField DataField="ID" HeaderText="ID" InsertVisible="False" 
            ReadOnly="True" SortExpression="ID" />
        <asp:BoundField DataField="HotelName" HeaderText="HotelName" SortExpression="HotelName" />
        <asp:BoundField DataField="City" HeaderText="City" SortExpression="City" />

        <asp:TemplateField HeaderText="Rating For Hotel">
            <ItemTemplate>
            <asp:RadioButtonList ID="RadioButtonList2" runat="server" RepeatDirection="Horizontal" 
                SelectedValue = '<%# Bind("Rating") %>'
                >
                <asp:ListItem Value="0">No Rating</asp:ListItem>
                <asp:ListItem Value="1">Poor</asp:ListItem>
                <asp:ListItem Value="2">Fair</asp:ListItem>
                <asp:ListItem Value="3">Good</asp:ListItem>
                <asp:ListItem Value="4">Excellent</asp:ListItem>
            </asp:RadioButtonList>
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>
<br />
<br />
<asp:Button ID="Button1" runat="server" Text="Update Choices" />
<br />

到目前为止?这几乎是所有的拖放操作。如前所述,我使用了 RadioButton 列表构建器,如下所示:

enter image description here

然后我添加了我的选择:

enter image description here

然后,如上所述,我将该单选按钮列表剪切+粘贴到网格中。

现在,在我的加载中,我有这个代码:

   If IsPostBack = False Then

        Dim strSQL As String = "SELECT TOP 10 ID,HotelName,City,Rating from tblHotels ORDER BY HotelName"

        Dim cmdSQL As New SqlCommand(strSQL,New SqlConnection(My.Settings.Test3))
        cmdSQL.Connection.Open()

        GridView1.DataSource = cmdSQL.ExecuteReader
        GridView1.DataBind()
        GridView1.Columns(0).Visible = False

        cmdSQL.Connection.Close()
        Session("cmd") = cmdSQL

    End If

现在我明白了: enter image description here

想想这是多么容易。 到目前为止,我只写了大约 7 行代码。

现在用户可以更改/选择单选按钮设置。

我现在如何将行更新回数据库?

好吧,更新按钮将如下所示:

    Dim dr As GridViewRow
    Dim cmdSQL As SqlCommand = Session("cmd")
    cmdSQL.Connection.Open()

    Dim rst As New DataTable
    rst.Load(cmdSQL.ExecuteReader)

    For Each dr In GridView1.Rows
        Dim rbL As RadioButtonList = dr.FindControl("RadioButtonList2")
        rst.Rows(dr.RowIndex).Item("Rating") = rbL.SelectedValue
    Next

    Dim daUpdate As New SqlDataAdapter(cmdSQL)
    Dim cmdUpdate As New SqlCommandBuilder(daUpdate)

    daUpdate.Update(rst)
    cmdSQL.Connection.Close()

    'cmdSQL.Dispose()

因此,这会将选择发送回数据库。

再一次,看看这是多么少的代码和努力。

因此,在用户在该单选按钮中做出选择后,您可能想要扩展您想要执行的操作。所以你想查看/检查值?

是否要将选项发送回数据库?

正如您在上面看到的,我们真的不关心(或不需要)每个单选按钮列表的某些事件。

如果这是某种调查系统?然后我将再次从数据库中驱动选择。如果有 5 个答案或其他答案,则按上述显示结果。

记住,它是一个列表视图、网格视图,还是作为“中继器”的控件块?

那么上面的代码模式就差不多了。

现在,在上面我可以/可以为单选按钮列表中的给定选择触发行事件 - 但此时我不相信这实际上是一个要求 - 但你可以获取/抓住该事件如果您愿意,可以对每一行采取行动,并作为选择单选按钮列表(更改值)的结果。

即使您的目标不是更新数据库并且有一个“N”(未知)选择列表,某种类型的数据网格或列表视图或数据转发器也可以轻松解决这个问题 - 并且如你所见?

我写的代码很少。我让 VS 和表单设计师为我编写了 99% 的标记——几乎没有手动编码标记——我让设计师和向导为我做所有肮脏的工作。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。