2012-02-06 20 views
0

私は行ごとに3つのチェックボックスを含むListViewを持っています。一度に1つのチェックボックスしか選択できないように設定したいと思います。ここでは、リストビューListView内で一度に1つのチェックボックスのみをチェックするにはどうすればよいですか?

<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> 

から私の現在の分離コード...

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 

実際のWebフォームItemTemplateには、私が何かを含める必要があるなら、私を知ってみましょうです。今すぐチェックボックスをクリックして別のチェックボックスを選択すると、新しいものの代わりに両方が選択されます...任意のアイデアですか?ありがとう!

+2

ない[ラジオボタン](http://msdn.microsoft.com/en-us/library/xke2zw4x(V = vs.71).aspxのような何かを試してみてください)do do –

+0

@TomIngram、ラジオボタンで試してみましたが、それでも同じ効果がありました。彼らは "チェックを外す"ことを除いて、私はまた、可能な場合は、よりよく見えるので、チェックボックスを使用したいと思います。ありがとう! – daveomcd

+0

私は、あなたがチェックボックスのグループから複数の選択を行うことができると期待し、ラジオボタンのグループからの単一の選択は、IMHOが長年にわたり本質的なUI設計であったと思う(http:/jsfiddle.net/AFDZh/)jqueryを使ってデモを行い、チェック不可能なラジオボタンを許可する –

答えて

1

各チェックボックス(Doco here)にAutoPostBack = "true"を設定する必要があります。それ以外の場合は、ポストバックが何らかの方法でトリガーされるまで、サーバーサイドのコードは実行されません。

サーバーへのラウンドトリップを避けるために、私は個人的に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

私は1つをしました、あなたは残りの部分に必要なものを見つけ出すことができます。また、これは3つのチェックボックスすべてに対して1つのハンドラを作成することできれいにすることができます

私はその可能性はよく知っています。

.....

パブリックサブCheckBox1_CheckedChanged(オブジェクトとしてByVal送信者のEventArgsとしてByVal e)のチェックボックス= TryCast(送信者は、チェックボックス)チェックボックス= TryCastとして 暗いCheckbox3(AS

薄暗いCheckbox2送信者は、チェックボックス)

は をsender.checkedない= Checkbox2.Checked Checkbox3.Checkedは をsender.checkedありません= 0 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. 
     } 
    }); 

}); 
関連する問題