VB.NET中ListView单选按钮单选及选中行识别方案问询
在VB.NET ListView中实现单选按钮互选并获取选中行
一、前端模板修改(实现单选互斥)
要让ListView中的单选按钮同一时间只能选中一个,只需给所有RadioButton设置相同的GroupName属性,同时修正你模板里的HTML嵌套错误(第一个<td>里嵌套了其他<td>,会导致布局异常)。修改后的核心代码片段如下:
<ItemTemplate> <tr runat="server" id="trItem"> <td valign="middle" style="white-space: nowrap; text-align:center;"> <Asp:RadioButton runat="server" ID="rbtnPermit" GroupName="PermitGroup" /> </td> <td valign="middle" style="white-space: nowrap; text-align:center;"> <%# CheckNull(Eval("PERMIT_TYPE_DESC"))%> </td> <td valign="middle" style="white-space: nowrap; text-align:center;"> <%# CheckNull(Eval("PERMIT_TYPE_ID"))%> </td> </tr> <tr runat="server" ID="trMatchRow"> </tr> </ItemTemplate>
二、后台VB.NET代码(获取选中行)
你可以在触发事件(比如按钮点击)中遍历ListView的Items,定位选中的RadioButton,进而获取对应行的主键或其他数据:
' 示例:按钮点击事件中获取选中行数据 Protected Sub btnGetSelected_Click(sender As Object, e As EventArgs) Handles btnGetSelected.Click For Each item As ListViewItem In lsvPermits.Items Dim rbtn As RadioButton = DirectCast(item.FindControl("rbtnPermit"), RadioButton) If rbtn IsNot Nothing AndAlso rbtn.Checked Then ' 通过DataKeys获取主键PERMIT_TYPE_ID Dim permitTypeId As Integer = Convert.ToInt32(lsvPermits.DataKeys(item.DataItemIndex).Value) ' 也可以直接读取行内控件的值 Dim permitDesc As String = DirectCast(item.FindControl("这里替换为显示PERMIT_TYPE_DESC的控件ID"), Label).Text ' 后续业务逻辑处理 Response.Write($"选中的许可证ID:{permitTypeId},描述:{permitDesc}") Exit For ' 单选模式下找到后直接退出循环 End If Next End Sub
关键说明
GroupName是实现单选互斥的核心,同一组的RadioButton强制只能有一个被选中。- 使用ListView的
DataKeys获取主键值更安全,避免从页面控件读取带来的风险。 - 提前修正HTML嵌套错误,防止页面布局混乱影响功能交互。
内容的提问来源于stack exchange,提问作者Ann
相关产品推荐
相关产品推荐

