2012-02-06 78 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. 
     } 
    }); 

}); 
相關問題