Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

freaklori

[Asp.net 2.0] CheckBoxLists

Mensagens Recomendadas

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


FAÇO TUDO COM DUAS LINHAS DE CÓDIGO;

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
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


Ligação para a mensagem
Partilhar noutros sites
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


FAÇO TUDO COM DUAS LINHAS DE CÓDIGO;

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
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... :/


FAÇO TUDO COM DUAS LINHAS DE CÓDIGO;

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
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


Ligação para a mensagem
Partilhar noutros sites
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


Ligação para a mensagem
Partilhar noutros sites
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


FAÇO TUDO COM DUAS LINHAS DE CÓDIGO;

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
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


Ligação para a mensagem
Partilhar noutros sites
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


FAÇO TUDO COM DUAS LINHAS DE CÓDIGO;

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
freaklori

    Sub ItemChecadoAlterado(ByVal sender As Object, ByVal e As System.EventArgs)
    Msgbox("OLA")
    End Sub


FAÇO TUDO COM DUAS LINHAS DE CÓDIGO;

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
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


Ligação para a mensagem
Partilhar noutros sites
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...


FAÇO TUDO COM DUAS LINHAS DE CÓDIGO;

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
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....


FAÇO TUDO COM DUAS LINHAS DE CÓDIGO;

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
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


Ligação para a mensagem
Partilhar noutros sites
freaklori

Nao.. mas tenho If Not IsPostBack

Mas isso é so para carregar a pagina...

vou tentar sem isso


FAÇO TUDO COM DUAS LINHAS DE CÓDIGO;

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
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


Ligação para a mensagem
Partilhar noutros sites
freaklori

Exacto... mas nao estou a usar ajax... sabes de alguma solução?? posso implementar a tecnologia ajax!


FAÇO TUDO COM DUAS LINHAS DE CÓDIGO;

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
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


Ligação 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. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.