Usuário com melhor resposta
armazenar valor antes do postback

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
Respostas
-
armazena o valor no campo hidden assim :
state.vale = ddlstate.selected.item.value;
Junior
- Sugerido como Resposta Ricardo Barbosa Cortes sexta-feira, 30 de maio de 2014 10:34
- Marcado como Resposta Ricardo Barbosa Cortes sexta-feira, 30 de maio de 2014 17:45
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.
- Sugerido como Resposta Ricardo Barbosa Cortes terça-feira, 27 de maio de 2014 17:44
-
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
- Sugerido como Resposta Ricardo Barbosa Cortes terça-feira, 27 de maio de 2014 17: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;
} -
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;
} -
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;
} -
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> -
armazena o valor no campo hidden assim :
state.vale = ddlstate.selected.item.value;
Junior
- Sugerido como Resposta Ricardo Barbosa Cortes sexta-feira, 30 de maio de 2014 10:34
- Marcado como Resposta Ricardo Barbosa Cortes sexta-feira, 30 de maio de 2014 17:45