Recuperar controles de uma página com master page.

01/06/2008

Olá a todos.

Montei uma rotina no meu sistema que percorre todos os controles de uma pagina e habilita ou desabilita eles ´Enabled´ funcionava que é uma beleza, mas o pessoal do design meteu uma masterpage e agora o código não recupera mais! Alguem sabe como eu faço para referenciar esses controles que agora estão numa página com master page?


Hal9000

Respostas

01/06/2008

Hal9000

Nãi é possível passei a manhã no google e nada! Como eu consigo fazer um for each para pegar todos os controles que estão na minha página com Master Page? Já use Master, ContentPlaceHolder! Tudo! Alguém sabe?!?! :cry:


Responder Citar

02/06/2008

Ricardo Silva

veio....

qndo vc coloca uma masterPage... os nome do Documentos HTML muda um poquim...

pra descobrir os Novos nome, vc executa o seu projeto e vai no codigo fonte do seu HTML.
provavelmente ele vai estar assim: ctl00_ContentPlaceHolder1_TextBox1, o que muda é o nome do do ContentPlaceHouder que armazena todos os controles

na duvida soh posta


Responder Citar

02/06/2008

Hal9000

Então. esse lance de mudar o nome dos controles eu já to por dentro.

o meu problema é que preciso de um método genérico que percorra todos os controles da minha página.

eu fiz assim e sem master funciona:

    Public Sub DesligaSubmit(ByVal Pagina As Page)
        For Each Controle As Control In Pagina.Controls
            If TypeOf Controle Is Button Then
                Dim Botao As New Button
                Botao = DirectCast(Controle, Button)
                Botao.UseSubmitBehavior = False
            End If
        Next
    End Sub



Eu passo a página e quero recuperar os controles, mas na master a coleção de controles vem com um único item. a própria master :(


Responder Citar

02/06/2008

Ricardo Silva

se eu não me engano.. vc vai ter q colocar outro lupe dentro desse foreach. tipo assim... na sua pagina ele vai encontar um controle que eh o ContentPlaceHolder, os controles estão dentro deles.
Public Sub DesligaSubmit(ByVal Pagina As Page)
        For Each Controle As Control In Pagina.Controls
            For Each Ctr As Control In Controle
                If TypeOf Ctr Is Button Then
                Dim Botao As New Button
                Botao = DirectCast(Ctr, Button)
                Botao.UseSubmitBehavior = False
               End If
           Next
       Next
    End Sub 


não manjo nada de VB mais axo qw ficaria assim, pois fiz algo parecido em C# na facu... ve se da certo e posta ai....
Ah outra dica, é ir debugando e procurando os Objetos ai fica facil

na duvida soh posta


Responder Citar

02/06/2008

Hal9000

Testei sua idéia Rica mas o tipo Control não é um Array de controles

entao a linha:

For Each Ctr As Control In Controle dá pau
:(

Alguma idéia nova? Eu continuo procurando...


Responder Citar

03/06/2008

Ricardo Silva

entaum no lugar de for each faz simplesmente um for...
Public Sub DesligaSubmit(ByVal Pagina As Page)
        For Each Controle As Control In Pagina.Controls
            For(int i = 0; i >  Controle.count - 1; i++)
                If TypeOf Controle[i&93; Is Button Then
                   Dim Botao As New Button
                   Botao = DirectCast(Controle&91;i&93;, Button)
                   Botao.UseSubmitBehavior = False
               End If
           Next
       Next
    End Sub 


ja... sei meu for ta em C (rsrsrsr) não sei como é em VB
mas creio q seja assim, pois se o componente não for uma coleção o count dele sera 1 logo ele vai pro proximo controle ateh axar uma coleção ai ele netra no for... e sucetivamente.

tenta lah....


Responder Citar

03/06/2008

Hal9000

Olha só testei com um for ´simples´

    For Each Controle As Control In Pagina.Controls
            For ind = 0 To Controle.Controls.Count - 1
                If TypeOf Controle.Controls(ind) Is Button Then
                    Dim Botao As New Button
                    Botao = DirectCast(Controle.Controls(ind), Button)
                    Botao.UseSubmitBehavior = False
                End If
            Next
        Next


Mas passa batido rs.
Vou tentar passar o ContentPlaceHolder ao invés da página...


Mas só para constar:

o For do VB é bem mais elegante... rs :wink:

For ind = 0 To Controle.Controls.Count - 1

Ok ok.. Os dois fazem a mesma coisa...

Vou testar e volto a postar...


Responder Citar

05/06/2008

Hal9000

Rica.. Resolvi o problema. Vc tinha razão quanto a pesquisar a controles dentro de controles, mas para funcionar tem que usar recursividade.

olha só:

  Public Sub DesligaSubmit(ByVal Pagina As Control)
        For Each Controle As Control In Pagina.Controls
            If TypeOf Controle Is Button Then
                Dim Botao As New Button
                Botao = DirectCast(Controle, Button)
                Botao.UseSubmitBehavior = False
            Else
                ´RECURSIVIDADE AQUI
                DesligaSubmit(Controle)
            End If
        Next
    End Sub


Valeu pela ajuda...


Responder Citar

05/06/2008

Ricardo Silva

Ah... muleeeeeque...

é issso ai...
fiquei morrendo de medo de mandar vc usar recurssividade pra vc naum assusta - vai q vc manda eu vazer um exemplo VB (rsrsrs)- mas é isso ai.... vc vez certim.

Parabens...


Responder Citar

05/06/2008

Hal9000

Rica, segue post para o pessoal do C# num ficar brabo comigo.. rs

 public void DesligaSubmit(Control Pagina)
 {
     foreach (Control Controle in Pagina.Controls) {
         if (Controle is Button) {
             Button Botao = new Button();
             Botao = (Button)Controle;
             Botao.UseSubmitBehavior = false;
         }
         else {
             //RECURSIVIDADE AQUI
             DesligaSubmit(Controle);
         }
     }
 }



Responder Citar