Ir para o conteúdo
freaklori

[Asp.net 2.0] CheckBoxLists

Mensagens Recomendadas

freaklori    0
freaklori

Boas, estou com uma pequena grande duvida.. é o seguinte...

Eu estou adicionar dinamicamente varias checklistbox ao webform conforme foi seleccionado anteriormente...

o problema é que eu quero associar um evento CHECKED a essas mesmas checkboxs... isto tudo em runtime...

Ja ouvi falar em Raise Events,Add Handlers.. alguem me pode ajudar??

Cumps

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
jpaulino    106
jpaulino

Olá,

Podes adicionar o evento através do AddHandler.

Exemplo:

Partial Class _Default
    Inherits System.Web.UI.Page

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

        Dim cb1 As New CheckBox
        With cb1
            .Text = "Check1"
            .AutoPostBack = True
        End With


        Dim cb2 As New CheckBox
        With cb2
            .Text = "Check2"
            .AutoPostBack = True
        End With

        AddHandler cb1.CheckedChanged, AddressOf cbCheckedChanged
        AddHandler cb2.CheckedChanged, AddressOf cbCheckedChanged

        Panel1.Controls.Add(cb1)
        Panel1.Controls.Add(cb2)

    End Sub

    Sub cbCheckedChanged(ByVal sender As Object, ByVal e As System.EventArgs)
        Dim cb As CheckBox = DirectCast(sender, CheckBox)
        Response.Write(String.Format("CheckBox: {0}, Estado: {1}", cb.Text, cb.Checked))
    End Sub

End Class

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
freaklori    0
freaklori

Nao funciona...


    Protected Sub bCarregarLabs_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles bCarregarLabs.Click

  'Criar um Check List Com os Labs
            Dim C As New CheckBoxList
            'C.ID = P.ID & "CL" & i
            C.AutoPostBack = True
            AddHandler C.SelectedIndexChanged, AddressOf IndexChange
End Sub
    Private Sub IndexChange(ByVal sender As Object, ByVal e As System.EventArgs)
Msgbox("OLA")
    End Sub

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
freaklori    0
freaklori

O teu exemplo funciona perfeitamento... mas o que estou a tentar fazer nao funciona... estranho.. apesar de ser uma CheckList eu estou associar o Adicionar o Handler associado ao SeletecIndexChange... uma manha nisto... :/

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
jpaulino    106
jpaulino

Nao funciona...

Mas tu não está a interir o teu controlo (que criaste) na página. Já tens a CheckBoxList na página, é isso ?

É que dinamicamente funciona bem:

Partial Class _Default
    Inherits System.Web.UI.Page

    Private c As CheckBoxList

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

        Dim item1 As New ListItem("aaa")
        Dim item2 As New ListItem("bbb")
        Dim item3 As New ListItem("ccc")
        Dim item4 As New ListItem("ddd")

        c = New CheckBoxList
        c.Items.AddRange(New ListItem() {item1, item2, item3, item4})
        c.AutoPostBack = True

        AddHandler c.SelectedIndexChanged, AddressOf IndexChanged
        Panel1.Controls.Add(c)

    End Sub

    Sub IndexChanged(ByVal sender As Object, ByVal e As System.EventArgs)
        For Each item As ListItem In Me.c.Items
            If item.Selected Then
                Response.Write(item.Text.ToString & "<br/>")
            End If
        Next

    End Sub

End Class

Se já tiveres a CheckBoxList ná página é só ires ao evento SelectedIndexChanged e usares o código que precisas. Só tens de colocar o AutoPostBack  = True.

PS: Desculpa mas não li bem e pensei que era CheckBox e não CheckBoxList  :)

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
jpaulino    106
jpaulino

O teu exemplo funciona perfeitamento... mas o que estou a tentar fazer nao funciona... estranho.. apesar de ser uma CheckList eu estou associar o Adicionar o Handler associado ao SeletecIndexChange... uma manha nisto... :/

Aprende-se muita coisa à cabeçada :)

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
freaklori    0
freaklori

Nao.. eu estou a criar os controles dinamicamente... um exemplo

DropList

1

2

3

4

Conforme o seleccionado... PostBack

Apresenta X grupos de CheckListBoxs

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
jpaulino    106
jpaulino

troquei as lista que tenho por checkboxs e nao funciona... :S

Já não entendo outra vez! Mas estás a usar checkbox ou checkboxlists?

Mostra lá o código que tens.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
freaklori    0
freaklori

Estou a usar Checkboxlist


Protected Sub bCarregarLabs_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles bCarregarLabs.Click
        For i As Integer = 1 To 4

                      'Criar um Check List Com os Labs
            Dim C As New CheckBoxList
            C.ID = P.ID & "CL" & i
            C.AutoPostBack = True
            'C.Attributes.Add("OnSelectedIndexChanged", "Check")
Carregar_CheckList(C, "SELECT Designacao, CodEmpresa FROM Empresas ORDER BY Designacao", "Designacao", "CodEmpresa")
            AddHandler C.SelectedIndexChanged, AddressOf ItemChecadoAlterado

           

            'Adicionar ao Panel 
            P.Controls.Add(C)
            'Adicionar ao PlaceHolderLabs
            ConteudoLabs.Controls.Add(P)

        Next

    End Sub

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
jpaulino    106
jpaulino

Vamos lá ver se eu entendo: tu crias 4 Checkboxlist e queres quando seleccionas um item crie uma nova Checkboxlist, correcto ?

E o Carregar_CheckList está correcto ? E o que não funciona exactamente ?

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
freaklori    0
freaklori

Nao...

O q ue pretendo é quando clico numa determinado valor da Checklistbox... ele me crie outra checklistbox mas com a informaçao limitada aquela escolha da checklistbox anterior...

Ou seja.. um exemplo

Tenho 2 CheckLisbox

[C1]

[C2]

Clico na um item da checklistbox do [C1]

e iremos ter

[C1] [C11]

[C2]

A [C11] Foi carregada apartir de um criterio seleccionado na [C1]

O problema aqui é que a [C1], [C2]... ate podem ser 10 sao carregadas atraves de uma droplist que diz... quero 1,2,4,5,6, Checklistbox

O objectivo final será

[DL] -> Quando Seleccionada uma Opçao Crias as CheckListbox

--------------

[C1][C11]

..

..

...

[C20][C21]

Quando Checo de uma das CheckListbOxs do lado esquerdo.. ira ser carregada uma outra Checklistbox ao lado com a informação

seleccionada da Checklistbox do lado esquerdo

Percebeste? Sei que é confuso...

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
freaklori    0
freaklori

é como eles sao geradas em run-time nao consigo associar o evento do SeletedIndexChanges nas Checklistbox do lado esquerdo.. para quando um ListItem for checado ele criar me uma checklisbox do lado direito....

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
jpaulino    106
jpaulino

Estranho ... comigo funciona bem !

Não estás a "esconder" código ? Não estás a criar isso dentro de um "If Not Page.IsPostBack Then " ?

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
jpaulino    106
jpaulino

Na mesma... mostra me como fizeste

Ok, já testei e já entendi.

Quando tu crias as checkboxes dinamicamente e seleccionas um item ele vai fazer o post back da página e a página fica sem informação e sem detectares o click. Estás a usar AJAX ?

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
jpaulino    106
jpaulino

Sem ajax uma solução muito simples é adicionares as CheckBoxLists à página sem itens (não fica visivel) e não dinamicamente. Depois preenches os dados quando seleccionas a dropdownlist e no evento SeletedIndexChange de cada uma colocas o código para as novas CheckBoxLists.

Assim já funciona.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora


×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade