2012-02-06 79 views
0

我有一个ListView,每行包含3个复选框。我想设置它,以便一次只能选择一个复选框。这是我当前的CodeBehind ......从ListView控件如何在ListView中一次只检查一个复选框?

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 

实际的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> 

让我知道如果我需要包括别的。现在,当我点击一个复选框,并选择了另一个复选框时,两者都被选中,而不仅仅是新的...任何想法?谢谢!

+2

不[单选按钮](http://msdn.microsoft.com/en-us/library/xke2zw4x(V = vs.71)的.aspx )做到这一点 – 2012-02-06 23:42:02

+0

@TomIngram,我试图用单选按钮,仍然有同样的效果。除了他们不会“取消选中”,我还想使用复选框,因为如果可能的话,它们看起来更好。谢谢! – daveomcd 2012-02-06 23:44:44

+0

我认为,作为一个用户,你希望能够从一组复选框中做出多个选择,并从一组单选按钮中选择一个,这使得IMHO成为多年来的固有UI设计[见这里](http:///jsfiddle.net/AFDZh/)使用jquery进行演示,以允许不可检查的单选按钮 – 2012-02-07 00:15:20

回答

1

您需要在每个复选框上设置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. 
     } 
    }); 
}); 
0

我已经做了一个,我确定你可以找出剩下的需要什么。这也可以通过为所有3个复选框创建一个处理程序来完成。

我对.net不是很好,但我知道它是可能的。

.....

公用Sub CheckBox1_CheckedChanged(BYVAL发件人为对象,BYVALË作为EventArgs的)

昏暗Checkbox2作为复选框= TryCast(发件人,复选框) 昏暗Checkbox3作为复选框= TryCast(发件人,复选框)

Checkbox2.Checked =未sender.checked Checkbox3.Checked =未sender.checked

End Sub

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

0
$(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. 
     } 
    }); 

}); 
相关问题