none
armazenar valor antes do postback RRS feed

  • Pergunta

  • Prezados, boa tarde.

    Tenho dois dropdownlists, ddlstates e ddlcitys.

    O ddlstates tem a relação de estados brasileiros que ao ser clicado, carrega o ddlcitys com as cidades daquele estado. Até ai, tudo funciona corretamente, porém ao clicar no botão salvar que faz verificação dos campos preenchidos ou não, o ddlcitys volta para a primeira opção. Como armazenar a informação do ddlcitys antes do postback ?

    No code behind, tenho o código que carrega o ddlcitys:

                if (ddlstates.Text != "")
                {
                    List<ListItem> cidades = new List<ListItem>();               
                    SqlConnection conn = new SqlConnection(mytools.stringconection);
                    SqlDataReader dr = null;
                    conn.Open();
                    SqlCommand cmd = new SqlCommand("select ciddesc from cidades where cidestsigla = '" + ddlstates.SelectedValue.ToString() + "' order by 1 asc");
                    cmd.Connection = conn;
                    dr = cmd.ExecuteReader();
                    ddlcitys.Items.Clear();
                    while (dr.Read())
                    {
                        cidades.Add(new ListItem(dr[0].ToString()));
                    }
                    dr.Close();
                    conn.Close();
                    ddlcitys.DataTextField = "Text";
                    ddlcitys.DataValueField = "Value";
                    ddlcitys.DataSource = cidades;
                    ddlcitys.DataBind();                                  
                } 

    Se eu conseguir pegar o valor do ddlcitys antes do postback, já me atenderia.

    Testei no evento ddlcitys_SelectedIndexChanged para pegar o indice do ddlcitys mas não deu certo.



    • Editado Daniel Village terça-feira, 27 de maio de 2014 16:00 complemento de informação
    terça-feira, 27 de maio de 2014 15:42

Respostas

Todas as Respostas

  • Verifique no Page_Load se existe algum código que altere a seleção do "ddlcitys".

    Se houver, coloque dentro do if "if(!isPostBack)" para só ser executado quando a página for carregada na primeira vez, e não em todo postback.

    terça-feira, 27 de maio de 2014 16:09
  • vc pode já trzer o dropdownlist com um valor selecionado, e vc tb pode criar um <input id=state type="hidden" runat="server" />

    ai vc guarda o que o usuário selecionou, mais o dropdownlist é para preservar a opção selecionada, a mesma sugestão do Edno te dei no seu post passado.


    Junior

    terça-feira, 27 de maio de 2014 17:02
  • Edno

    Esse é o código que está no Page_Load:

    if (ddlstates.Text != "")
                {
                    List<ListItem> cidades = new List<ListItem>();               
                    SqlConnection conn = new SqlConnection(mytools.stringconection);
                    SqlDataReader dr = null;
                    conn.Open();
                    SqlCommand cmd = new SqlCommand("select ciddesc from cidades where cidestsigla = '" + ddlstates.SelectedValue.ToString() + "' order by 1 asc");
                    cmd.Connection = conn;
                    dr = cmd.ExecuteReader();
                    ddlcitys.Items.Clear();
                    while (dr.Read())
                    {
                        cidades.Add(new ListItem(dr[0].ToString()));
                    }
                    dr.Close();
                    conn.Close();
                    ddlcitys.DataTextField = "Text";
                    ddlcitys.DataValueField = "Value";
                    ddlcitys.DataSource = cidades;
                    ddlcitys.DataBind();                                  
                } 

    Como você pode ver, o dropdownlist de cidades (ddlcitys) é carregado com base no estado selecionado.

    Ele sempre volta para a primeira posição ... eu preciso apenas pegar a posição atual do ddlcitys para poder setar depois que houver o postback. 

    Já tentei pelo textchange do ddlcitys mas não deu certo ... veja o codigo:

            protected void ddlcitys_TextChanged(object sender, EventArgs e)
            {
                int indice = ddlcitys.SelectedIndex;
            }

    terça-feira, 27 de maio de 2014 18:40
  • Junior,

    crei o campo hidden como vc mencionou ... mas eu não estou sabendo como armazenar o valor nele...

    Como realizar o procedimento ???

    Eu preciso apenas pegar o indice atual do ddlcitys para poder setar depois que houver o postback.

    Tentei pelo textchange do ddlcitys mas não deu certo ... veja o codigo:

            protected void ddlcitys_TextChanged(object sender, EventArgs e)
            {
                state.value = ddlcitys.text;
            }

    terça-feira, 27 de maio de 2014 18:44
  • Edno

    Esse é o código que está no Page_Load:

    if (ddlstates.Text != "")
                {
                    List<ListItem> cidades = new List<ListItem>();               
                    SqlConnection conn = new SqlConnection(mytools.stringconection);
                    SqlDataReader dr = null;
                    conn.Open();
                    SqlCommand cmd = new SqlCommand("select ciddesc from cidades where cidestsigla = '" + ddlstates.SelectedValue.ToString() + "' order by 1 asc");
                    cmd.Connection = conn;
                    dr = cmd.ExecuteReader();
                    ddlcitys.Items.Clear();
                    while (dr.Read())
                    {
                        cidades.Add(new ListItem(dr[0].ToString()));
                    }
                    dr.Close();
                    conn.Close();
                    ddlcitys.DataTextField = "Text";
                    ddlcitys.DataValueField = "Value";
                    ddlcitys.DataSource = cidades;
                    ddlcitys.DataBind();                                  
                } 

    Como você pode ver, o dropdownlist de cidades (ddlcitys) é carregado com base no estado selecionado.

    Ele sempre volta para a primeira posição ... eu preciso apenas pegar a posição atual do ddlcitys para poder setar depois que houver o postback. 

    Já tentei pelo textchange do ddlcitys mas não deu certo ... veja o codigo:

            protected void ddlcitys_TextChanged(object sender, EventArgs e)
            {
                int indice = ddlcitys.SelectedIndex;
            }

    Porque esta lógica não está dentro do evento "OnSelectedIndexChanged" do ddlStates? Quando você coloca isso no Page_Load, toda vez que a página der algum Post Back o código vai ser executado, por isso ta voltando o item selecionado no ddlcitys, já que em todo post back ele carrega novamente o dropdown
    terça-feira, 27 de maio de 2014 18:55
  • Coloquei a logica no evento OnSelectedIndexChanged porém o problema persiste.

    Aqui está o html da pagina:

    <div class="col-lg-12 col-md-12 col-sm-6">
                                    <div class="formBlock">
                                        <label for="states">Estado</label><br/>
                                        <asp:ScriptManager ID="ScripManager1" runat ="server">
                                        </asp:ScriptManager>
                                        <asp:UpdatePanel runat="server" RenderMode="Inline" ID="UpdatePanel1">                       
                                            <ContentTemplate>
                                                <asp:DropDownList ID="ddlstates" AutoPostBack="true" CssClass ="formDropdown" OnTextChanged="ddlstates_TextChanged" runat="server" OnSelectedIndexChanged="ddlstates_SelectedIndexChanged">
                                                <asp:ListItem Value=""></asp:ListItem>
                                                <asp:ListItem Value="AC">Acre</asp:ListItem>
                                                <asp:ListItem Value="AL">Alagoas</asp:ListItem>
                                                <asp:ListItem Value="AP">Amapá</asp:ListItem>
                                                <asp:ListItem Value="AM">Amazonas</asp:ListItem>
                                                <asp:ListItem Value="BA">Bahia</asp:ListItem>
                                                <asp:ListItem Value="CE">Ceará</asp:ListItem>
                                                <asp:ListItem Value="DF">Distrito Federal</asp:ListItem>
                                                <asp:ListItem Value="ES">Espírito Santo</asp:ListItem>
                                                <asp:ListItem Value="GO">Goiás</asp:ListItem>
                                                <asp:ListItem Value="MA">Maranhão</asp:ListItem>
                                                <asp:ListItem Value="MT">Mato Grosso</asp:ListItem>
                                                <asp:ListItem Value="MS">Mato Grosso do Sul</asp:ListItem>
                                                <asp:ListItem Value="MG">Minas Gerais</asp:ListItem>
                                                <asp:ListItem Value="PA">Pará</asp:ListItem>
                                                <asp:ListItem Value="PB">Paraíba</asp:ListItem>
                                                <asp:ListItem Value="PR">Paraná</asp:ListItem>
                                                <asp:ListItem Value="PE">Pernambuco</asp:ListItem>
                                                <asp:ListItem Value="PI">Piauí</asp:ListItem>
                                                <asp:ListItem Value="RJ">Rio de Janeiro</asp:ListItem>
                                                <asp:ListItem Value="RN">Rio Grande do Norte</asp:ListItem>
                                                <asp:ListItem Value="RS">Rio Grande do Sul</asp:ListItem>
                                                <asp:ListItem Value="RO">Rondônia</asp:ListItem>
                                                <asp:ListItem Value="RR">Roraima</asp:ListItem>
                                                <asp:ListItem Value="SC">Santa Catarina</asp:ListItem>
                                                <asp:ListItem Value="SP">São Paulo</asp:ListItem>
                                                <asp:ListItem Value="SE">Sergipe</asp:ListItem>
                                                <asp:ListItem Value="TO">Tocantis</asp:ListItem>
                                            </asp:DropDownList>
                                        </ContentTemplate>
                                        </asp:UpdatePanel>
                                    </div>
                                </div>
                                <div class="col-lg-12 col-md-12 col-sm-6">
                                    <div class="formBlock">
                                        <label for="state">Cidade</label>
                                        <asp:UpdatePanel runat="server" RenderMode="Block" ID="UpdatePanel3">                       
                                            <ContentTemplate>
                                                <asp:DropDownList ID="ddlcitys" CssClass ="formDropdown"  runat="server" OnTextChanged="ddlcitys_TextChanged2">
                                                    <asp:ListItem Value=""></asp:ListItem>
                                                </asp:DropDownList>                                            
                                              </ContentTemplate>
                                            </asp:UpdatePanel>
                                        </div>
                                </div>

    terça-feira, 27 de maio de 2014 19:32
  • armazena o valor no campo hidden assim :

    state.vale = ddlstate.selected.item.value;


    Junior

    terça-feira, 27 de maio de 2014 19:36