Jump to content

como guardar um sessao ou 2 sessoes de dropDownList?


Sergio990
 Share

Recommended Posts

Boas,

Eu tenho 2 dropDownLists iguais mas em 2 paginas diferentes.

O que eu queria era que ao seleccionar uma coisa qualquer na 1º drop depois clicasse pagina seguinte e a dropDownList2 manter o valor seleccionado na pagina anterior.

Com os melhores Cumprimentos,

Sérgio Rodrigues

Link to comment
Share on other sites

1ª página:

<asp:DropDownList runat="server" ID="c1" AutoPostBack="true" 
            onselectedindexchanged="c1_SelectedIndexChanged">
            <asp:ListItem Text="1" Value="1" />
            <asp:ListItem Text="2" Value="2" />
            <asp:ListItem Text="3" Value="3" />
        </asp:DropDownList>

protected void c1_SelectedIndexChanged(object sender, EventArgs e)
    {
        if (Session["combo"] != null)
            Session["combo"] = c1.SelectedValue;
        else
            Session.Add("combo", c1.SelectedValue);
    }

Depois na 2ª pagina tens algo como:

<asp:DropDownList runat="server" ID="c2">
            <asp:ListItem Text="1" Value="1" />
            <asp:ListItem Text="2" Value="2" />
            <asp:ListItem Text="3" Value="3" />
        </asp:DropDownList>

protected void Page_Load(object sender, EventArgs e)
    {
        if (Session["combo"] != null)
        {
            try
            {
                c2.SelectedValue = Session["combo"].ToString();
            }
            catch (Exception)
            {

                throw;
            }
        }
    }
Link to comment
Share on other sites

Ok ele funciona a passar para a outra pagina e mantém os valores da dropDownList, mas se eu quiser trocar os valores ou voltar a pagina anterior, ele da erro.

Eu so queria que na dropDownList1 selecciona-se faz de conta 2, e ao ir para a pagina seguinte ele tivesse la o 2 seleccionado (que é o que esta a funcionar), mas se eu quiser colocar 3 na dropDownList2 ele já me da erro. Ou a voltar para a pagina anterior ele também da erro.

Link to comment
Share on other sites

O erro é:

'DDL_Cliente' has a SelectedValue which is invalid because it does not exist in the list of items.

Parameter name: value

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.ArgumentOutOfRangeException: 'DDL_Cliente' has a SelectedValue which is invalid because it does not exist in the list of items.

Parameter name: value

Line 30:             catch (Exception)
Line 31:             {
Line 32:                 throw;
Line 33:             }
Line 34:         }

Source File: c:\Users\Sérgio\Documents\Visual Studio 2010\WebSites\cadastroGlobal\inserirEquipamentoPag2.aspx.cs    Line: 32

Stack Trace:

[ArgumentOutOfRangeException: 'DDL_Cliente' has a SelectedValue which is invalid because it does not exist in the list of items.

Parameter name: value]

  System.Web.UI.WebControls.ListControl.set_SelectedValue(String value) +1744144

  inserirEquipamentoPag2.Page_Load(Object sender, EventArgs e) in c:\Users\Sérgio\Documents\Visual Studio 2010\WebSites\cadastroGlobal\inserirEquipamentoPag2.aspx.cs:32

  System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) +14

  System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +35

  System.Web.UI.Control.OnLoad(EventArgs e) +91

  System.Web.UI.Control.LoadRecursive() +74

  System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +2207

Link to comment
Share on other sites

Já funciona certinho 😉

Obrigado 🙂

Ok como eu disse funciona bem para uma dropDownList 😛

Mas com duas como funciona?

Eu coloquei isto na 1º pagina:

<asp:DropDownList ID="DDL_Cliente1" runat="server" AutoPostBack="True" 
                    DataSourceID="SqlDataSource8" DataTextField="nomeCliente" 
                    DataValueField="idCliente" onselectedindexchanged="DDL_Cliente1_SelectedIndexChanged">
                </asp:DropDownList>

<asp:DropDownList ID="DDL_Site1" runat="server" AutoPostBack="True" 
                    DataSourceID="SqlDataSource3" DataTextField="nome" DataValueField="idSite" onselectedindexchanged="DDL_Site1_SelectedIndexChanged">
                </asp:DropDownList>

 protected void DDL_Cliente1_SelectedIndexChanged(object sender, EventArgs e)
    {
        if (Session["Cliente1"] != null)
            Session["Cliente1"] = DDL_Cliente1.SelectedValue;
        else
            Session.Add("Cliente1", DDL_Cliente1.SelectedValue); 
    }
        
    protected void DDL_Site1_SelectedIndexChanged(object sender, EventArgs e)
    {
        if (Session["Site1"] != null)
            Session["Site1"] = DDL_Site1.SelectedValue;
        else
            Session.Add("Site1", DDL_Site1.SelectedValue);

    }    

E isto na 2º:

<asp:DropDownList ID="DDL_Cliente2" runat="server" AutoPostBack="True" 
                    DataSourceID="SqlDataSource12" DataTextField="nomeCliente" 
                    DataValueField="idCliente" >
                </asp:DropDownList>

<asp:DropDownList ID="DDL_Site2" runat="server" AutoPostBack="True" 
                    DataSourceID="SqlDataSource13" DataTextField="nome" 
                    DataValueField="idSite">
                </asp:DropDownList>

    protected void Page_Load(object sender, EventArgs e)
    {
        if (Session["Cliente1"] != null)
        {
            try
            {
                DDL_Cliente2.SelectedValue = Session["Cliente1"].ToString();
                Session["Cliente1"] = null;
            }
            catch (Exception)
            {
            }
        }
        if (Session["Site1"] != null)
        {
            try
            {
                DDL_Site2.SelectedValue = Session["Site1"].ToString();
                Session["Site1"] = null;
            }
            catch (Exception)
            {
            }
        }
    }

Mas so que isso nao funciona para a dropDownList Site, ou seja eu mudo so a do cliente e ele coloca bem a do cliente mas se mudar a do site ele coloca sempre a 1º que esta na dropDownList e nunca a que selecciono na 1º pagina.

Isto faz isso por causa de um controlo que eu tenho na DropDownList do Site2 que é:

SelectCommand="SELECT * FROM [site] WHERE ([idCliente] = @idCliente)">

Ou seja como faço para contornar esta situação? Visto que se eu tirar o where o codigo ja funciona bem mas eu preciso do where.

E obrigado 😄

Link to comment
Share on other sites

Eu ja tirei XD

Mas tipo o problema mantem-se a drop do Cliente fica bem com o valor que tinha selecionado mas so que a do site nao, fica sempre com o 1º campo por definiçao.

Se eu retirasse o where do select ele ja colocava o site que tinha seleccionado na pagina anterior mas ai ele ia apresentar todos os sites da base de dados e eu so quero que ele apresente os sites de acordo com o cliente.

Eu também já a tentei colocar um controlo de sessão em vez do select mas ai ele só me ia colocar o site da sessão. E eu queria que ele me desse a possibilidade de alterar o site de acordo com o cliente seleccionado.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.