Как установить только один флажок за раз в ListView? - PullRequest
0 голосов
/ 07 февраля 2012

У меня есть 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

Фактический шаблон элемента WebForm из ListView

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

Дайте мне знать, если мне нужно включить что-нибудь еще.Прямо сейчас, когда я нажимаю на флажок и выбирается другой флажок, выбираются оба, а не только новый ... Есть идеи?Спасибо!

Ответы [ 3 ]

1 голос
/ 07 февраля 2012

Вам необходимо установить AutoPostBack = "true" для каждого флажка (Doco здесь ). В противном случае ваш код на стороне сервера никогда не будет запущен, пока обратный вызов не будет запущен каким-либо другим способом.

Я бы лично предпочел использовать для этого 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 голосов
/ 02 сентября 2013
$(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. 
        }
   });

});
0 голосов
/ 07 февраля 2012

Я сделал один, я уверен, что вы можете выяснить, что требуется для остальных. Также этого можно избежать, создав один обработчик для всех 3 флажков

Я не очень хорош в .net, но я знаю, что это возможно.

.....

Public Sub CheckBox1_CheckedChanged (отправитель ByVal как объект, ByVal e как EventArgs)

Dim Checkbox2 As CheckBox = TryCast (отправитель, CheckBox) Dim Checkbox3 As CheckBox = TryCast (отправитель, CheckBox)

Checkbox2.Checked = Not sender.checked Checkbox3.Checked = Not sender.checked

End Sub

Хотя, как упоминалось выше, переключатели обычно больше подходят для этого приложения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...