none
Problemas em atualizar controle dentro de um UpdatePanel RRS feed

  • Pergunta

  • Prezados, bom dia.

     

    Antes de tudo, gostaria de agradecer pela atenção e pedir para que me informem se eu estiver infringindo alguma regra do fórum, pois sou novo em fóruns apesar de programar a algum tempo.

    Bem, eu tenho um user control, que tem como funcionalidade trazer o endereço pesquisado.  para isso, eu criei um update panel com os respectivos campos. 

    Logo em seguida, eu chamo este controle no cadastro de usuário, sendo que carrego sempre o drop de estado quando o usuário clica em editar ou quando for adicionar um novo usuário. Entretanto, no evento de editar um usuário, o sistema retorna um erro falando que o drop de cidade não possuí um item com o valor que estou informando, sendo que imediatamente antes de informar este valor, eu invoquei o método de indexchange do drop de estado (que limpa o drop cidade e popula o mesmo com o estado informado).

    para melhor exemplificar, segue o código:

    /*
    código chamado ao editar um usuário na pagina de gestão de usuário 
    */
                ControleEndereco.CarregarEstados();
                hiddenCodigousuarioEdicao.Value = Util.ConverterInteiroParaString(paramUsuario.Codigo);
                textCpf.Text = paramUsuario.CPF.ToString();
                textLogin.Text = paramUsuario.Login;
                textNome.Text = paramUsuario.Nome_usuario;
                textRg.Text = paramUsuario.RG;
                radioAtivo.SelectedValue = Util.ConverterBooleanParaString(paramUsuario.Ativo_cliente);
               /*método que chama o indexchange do drop de estado
               este método limpa o drop de cidade, e carega as cidades de acordo com o estado escolhido */
                ControleEndereco.DropEstado.SelectedValue = Util.ConverterInteiroParaString(paramUsuario.Cod_estado);
                ControleEndereco.dropEstado_SelectedIndexChanged(null,null);
                CarregarControleEnderecoDropCidade();
                ControleEndereco.DropCidade.SelectedValue = Util.ConverterInteiroParaString(paramUsuario.Cod_cidade);
                ControleEndereco.TextBairro.Text = paramUsuario.Bairro;
                ControleEndereco.TextCEP.Text = paramUsuario.Cep.ToString();
                ControleEndereco.TextLogradouro.Text = paramUsuario.Logradouro;
                ControleEndereco.TextNumero.Text = paramUsuario.Numero.ToString();
    
    e este é o código chamado na pagina do controle:
    aspx:
    <asp:UpdatePanel ID="updPanelEndereco" runat="server" UpdateMode="Conditional">
        <ContentTemplate>
        <fieldset class="fieldsetEndereco">
            
                <table>
                <tr>
                    <td class="tableEnderecoTrTd1"><label>Cep:</label></td>
                    <td class="tableEnderecoTrTd2">
                            <asp:TextBox ID="textCep" runat="server" onkeypress="funPressionarEnterCampoCEP(event);"></asp:TextBox>
                            <ajax:MaskedEditExtender ID="MaskEditCep" runat="server" Mask="99,999-999" TargetControlID="textCep"></ajax:MaskedEditExtender>
                            <asp:ImageButton ID="imageButtonPesquisar" runat="server" 
                              ImageUrl="http://www.ilumac.com.br/imagens/icone_lupa.png" 
                              onclick="imageButtonPesquisar_Click" />
                            <asp:Label ID="labelErro" runat="server" style="color:Red; font-size:small" Enabled="true" Visible="true"></asp:Label>
                    </td>
                </tr>
                <tr>
                    <td><label>Estado:</label></td>
                    <td><asp:DropDownList ID="dropEstado" runat="server" OnSelectedIndexChanged="dropEstado_SelectedIndexChanged" AutoPostBack="true"></asp:DropDownList></td>
                </tr>
                <tr>
                    <td><label>Cidade:</label></td>
                    <td><asp:DropDownList ID="dropCidade" runat="server"></asp:DropDownList></td>
                </tr>
                <tr>
                    <td><label>Bairro:</label></td>
                    <td><asp:TextBox ID="textBairro" runat="server" Width="250px"></asp:TextBox></td>
                </tr>        
                <tr>
                    <td><label>Logradouro:</label></td>
                    <td><asp:TextBox ID="textLogradouro" runat="server" Width="250px"></asp:TextBox></td>
                </tr>
                <tr>
                    <td><label>Numero:</label></td>
                    <td><asp:TextBox ID="textNumero" runat="server"></asp:TextBox></td>
                </tr>
                <tr>
                    <td><label>Complemento:</label></td>
                    <td><asp:TextBox ID="textComplemento" runat="server"></asp:TextBox></td>
                </tr>
                <tr>
                    <td><label>Ponto de Referência:</label></td>
                    <td><asp:TextBox ID="textPontoReferencia" runat="server"></asp:TextBox></td>
                </tr>
            </table>
            
            <asp:Repeater ID="repeaterEndereco" runat="server" OnItemDataBound="repeaterEndereco_ItemDataBound" OnItemCommand="repeaterEndereco_ItemCommand">
                <HeaderTemplate>
                    <table border="1">
                        <tr>
                            <th>#</th>
                            <th>Logradouro</th>
                            <th>Bairro</th>
                            <th>Cidade</th>
                            <th>Selecionar</th>
                        </tr>
                </HeaderTemplate>
    
                <ItemTemplate>
                    <tr>
                        <td>    
                            <asp:Label ID="labelNumeracao" runat="server"></asp:Label>
                            <asp:HiddenField ID="HiddenEstado" runat="server" />
                        </td>
                        <td><asp:Label ID="labelLogradouro" runat="server"></asp:Label></td>
                        <td><asp:Label ID="labelBairro" runat="server"></asp:Label></td>
                        <td><asp:Label ID="labelCidade" runat="server"></asp:Label></td>
                        <td><asp:Button ID="buttonSelecionar" runat="server" Text="Selecionar" CommandName="SELECIONAR"/></td>
                    </tr>
                    
                </ItemTemplate>
    
                <AlternatingItemTemplate>
                    <tr bgcolor="#99ccff">
                        <td>
                            <asp:Label ID="labelNumeracao" runat="server"></asp:Label>
                            <asp:HiddenField ID="HiddenEstado" runat="server" />
                        </td>
                        <td><asp:Label ID="labelLogradouro" runat="server"></asp:Label></td>
                        <td><asp:Label ID="labelBairro" runat="server"></asp:Label></td>
                        <td><asp:Label ID="labelCidade" runat="server"></asp:Label></td>
                        <td><asp:Button ID="buttonSelecionar" runat="server" Text="Selecionar" CommandName="SELECIONAR"/></td>
                    </tr>
                </AlternatingItemTemplate>
    
                <FooterTemplate>
                    </table>
                </FooterTemplate>
                
            </asp:Repeater>
        </fieldset>
        </ContentTemplate> 
            <Triggers> 
                <asp:AsyncPostBackTrigger ControlID="imageButtonPesquisar" EventName="Click"/>
            </Triggers>
        </asp:UpdatePanel>
    
    code behind
    /*
     pageload do controle
    */
    
    
            protected void Page_Load(object sender, EventArgs e)
            {
                if (!IsPostBack)
                {
                    CarregarEstados();
                }//if
            }
    
    
    /*
    Método chamado no page load, que carrega os estados
    */
    
            public void CarregarEstados()
            {
                bc_estado estados = new bc_estado();
    
                Util.CarregarControle(dropEstado, estados.Retornar(), bc_estado.CampoNome, bc_estado.CampoCodigo, new ListItem("Selecione", "0"));
    
                dropCidade.Items.Clear();
                dropCidade.Items.Insert(0, new ListItem("Selecione","0"));
            }//public
    
    
    /*
    evento de indexchange do dropdown de estado
    */
    
    
            public void dropEstado_SelectedIndexChanged(Object Sender, EventArgs e)
            {
                //Mudar para bc_cidades
                bc_cidade cidades = new bc_cidade();
    
                Util.CarregarControle(dropCidade, cidades.RetornarPorEstado(dropEstado.SelectedValue), bc_cidade.CampoNome, bc_cidade.CampoCodigo, new ListItem("Selecione", "0"));
            }
    
    

    Não tenho certeza, mas creio que pode ser alguma coisa relativa ao fato de que, ao carregar o a página, eu populo o drop e logo em seguida tento manipulá-lo novamente, e ele ainda não foi liberado da ação anterior.
    De qualquer maneira, agradeço pela atenção.

     

     

     


    sexta-feira, 9 de dezembro de 2011 13:13

Todas as Respostas