【问题标题】:How do I only check one checkbox at a time within a ListView?如何在 ListView 中一次只选中一个复选框?
【发布时间】:2012-02-28 10:49:40
【问题描述】:

我有一个 ListView,每行包含 3 个复选框。我想设置它,以便一次只能选择一个复选框。这是我目前的 CodeBehind...

Public Class MyClass

    Dim Checkbox1 As Checkbox
    Dim Checkbox2 As Checkbox
    Dim Checkbox3 As Checkbox

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

        InitializeDisplay()

        If Not IsPostBack Then
           UpdateDisplay()
        End If

    End Sub

    Protected Sub UpdateDisplay()

        Dim Table As DataTable
        Table = GetDataTable()

        ListView.DataSource = Table
        ListView.DataBind()  

    End Sub

    Private Sub ListView_ItemDataBound( sender, e ) Handles ListView.ItemDataBound

        Dim item As ListViewItem = e.Item

        Checkbox1 = item.FindControl("Checkbox1")
        Checkbox2 = item.FindControl("Checkbox2")
        Checkbox3 = item.FindControl("Checkbox3")

    End Sub

    Public Sub CheckBox1_CheckedChanged(ByVal sender As Object, ByVal e As EventArgs)

        Dim Checkbox2 As CheckBox = TryCast(sender, CheckBox)
        Dim Checkbox3 As CheckBox = TryCast(sender, CheckBox)

        Checkbox2.Checked = False
        Checkbox3.Checked = False        

    End Sub

    Public Sub CheckBox2_CheckedChanged(ByVal sender As Object, ByVal e As EventArgs)

        Dim Checkbox1 As CheckBox = TryCast(sender, CheckBox)
        Dim Checkbox3 As CheckBox = TryCast(sender, CheckBox)

        Checkbox1.Checked = False
        Checkbox3.Checked = False        

    End Sub

    Public Sub CheckBox3_CheckedChanged(ByVal sender As Object, ByVal e As EventArgs)

        Dim Checkbox1 As CheckBox = TryCast(sender, CheckBox)
        Dim Checkbox2 As CheckBox = TryCast(sender, CheckBox)

        Checkbox1.Checked = False
        Checkbox2.Checked = False        

    End Sub

End Class

来自 ListView 的实际 WebForm ItemTemplate

<ItemTemplate>
<asp:Checkbox ID="CheckBox1" OnCheckedChanged="CheckBox1_CheckedChanged" runat="server" />
<asp:Checkbox ID="CheckBox2" OnCheckedChanged="CheckBox2_CheckedChanged" runat="server" />
<asp:Checkbox ID="CheckBox3" OnCheckedChanged="CheckBox3_CheckedChanged" runat="server" />
</ItemTemplate>

如果我需要添加任何其他内容,请告诉我。现在,当我单击一个复选框并选中另一个复选框时,两个复选框都被选中,而不仅仅是新的...有什么想法吗?谢谢!

【问题讨论】:

  • 不要radio buttons这样做
  • @TomIngram,我尝试使用单选按钮,但效果仍然相同。除了他们不会“取消选中”之外,我还想使用复选框,因为如果可能的话它们看起来更好。谢谢!
  • 我认为作为用户,您希望能够从一组复选框中进行多项选择,并从一组单选按钮中进行一次选择,恕我直言,多年来这一直是一种内在的 UI 设计@ 987654322@ 用于演示使用 jquery 以允许不可选中的单选按钮

标签: asp.net vb.net listview checkbox


【解决方案1】:
$(document).ready(function(){

   $("input[type=checkbox]").click(function(eventData){

        var checked = $(eventData.currentTarget).prop("checked");

        if(checked){

             $("input[type=checkbox]").prop("checked", false);//uncheck everything.
             $(eventData.currentTarget).prop("checked", "checked");//recheck this one. 
        }
   });

});

【讨论】:

    【解决方案2】:

    您需要在每个复选框上设置 AutoPostBack="true" (Doco here)。否则,在以其他方式触发回发之前,您的服务器端代码将永远不会运行。

    我个人更喜欢使用 jQuery 来完成,以避免往返服务器。为此,请尝试类似

    $(document).ready(function(){
       $("input[type=checkbox]").click(function(eventData){
            var checked = $(eventData.currentTarget).prop("checked");
            if(checked === "checked"){
                 $("input[type=checkbox]").prop("checked", false);//uncheck everything.
                 $(eventData.currentTarget).prop("checked", "checked");//recheck this one. 
            }
       });
    });
    

    【讨论】:

      【解决方案3】:

      我已经做了一个,我相信你可以弄清楚其余的需要什么。这也可以通过为所有 3 个复选框创建一个处理程序来解决

      我不太擅长 .net,但我知道这是可能的。

      .....

         Public Sub CheckBox1_CheckedChanged(ByVal sender As Object, ByVal e As EventArgs)

            将 Checkbox2 调暗为 CheckBox = TryCast(sender, CheckBox) Dim Checkbox3 As CheckBox = TryCast(sender, CheckBox)

            Checkbox2.Checked = 不是发件人.checked Checkbox3.Checked = Not sender.checked

          结束子

        尽管如上所述,单选按钮通常更适合此应用程序。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-07-11
        • 1970-01-01
        相关资源
        最近更新 更多