如何从`DropDownList`存储以前选择的项目

时间:2012-08-18 13:11:53

标签: c# asp.net

我有一个DropDownList,我必须使用它来存储数据库中CheckBoxList的一些值。

在我从DropDownList中选择另一个索引之前,必须存储CheckBoxList中的值,并提示用户提示“在继续之前保存”。

我能够显示上面提到的警告信息。但问题是,一旦我将索引更改为DropDownList,之前选择的索引就会丢失。

有人可以帮助我获取之前选择的值并在DropDownList中动态选择相同值。因为该值需要存储在数据库中。

显示警告信息的代码是:

protected void LOC_LIST2_SelectedIndexChanged(object sender, EventArgs e)
    {
        if (CheckBoxList2.Items.Count > 0)
        {
            Label7.Visible = true;
            Label7.Text = "*Save List Before Proceeding";
        }

5 个答案:

答案 0 :(得分:1)

使用全局变量。

使用以下代码。 PreviousIndex将保留前一个,CurrentIndex将保持最新状态。

int PreviousIndex = -1;
int CurrentIndex = -1;

protected void LOC_LIST2_SelectedIndexChanged(object sender, EventArgs e)
{
    PreviousIndex = CurrentIndex;
    CurrentIndex = myDropdownList.Position; // Or whatever the get position is.
    if (CheckBoxList2.Items.Count > 0)
    {
        Label7.Visible = true;
        Label7.Text = "*Save List Before Proceeding";
    }
}

答案 1 :(得分:1)

您可以在第一次加载页面时获取所选值

 protected void Page_Load(object sender, EventArgs e)
 {

    if (!IsPostBack) // Because When postback occurs the selected valued changed.
    {
        ViewState["PreviousValue"] = ddl.SelectedValue;
    }
 }

并在您选择的索引更改事件中将新值更新为以前的值

protected void ddl_SelectedIndexChanged(object sender, EventArgs e)
{
    ViewState["NewValue"] = ddl.SelectedValue;

    // Do your work with PreviousValue and then update it with NewValue so next you can acces your previousValue using ViewState["PreviousValue"]

    ViewState["PreviousValue"] = ViewState["NewValue"];   
}

或如果要访问不同页面上的选定值,请将其保存在会话中。

答案 2 :(得分:0)

您可以尝试使用此代码 - 使用会话缓存

public string YourOldValue
{
  get
  {
     if(Session["key"] != null) 
        return (string) Session["key"];
  }
  set
  {
     Session["key"] = value;
  }   

 }

 //Set value
 YourOldValue = yourControl.SelectedValue; 

答案 3 :(得分:0)

    protected void LOC_LIST2_SelectedIndexChanged(object sender, EventArgs e)
        {
            Session["SavedItem"] =  LOC_LIST2.SelectedItem;
            if (CheckBoxList2.Items.Count > 0)
            {
                Label7.Visible = true;
                Label7.Text = "*Save List Before Proceeding";
            }
        }

after you access on value or text
SelectedItem item = Session["SavedItem"] as SelectedItem;
if(item !=null)
{
string something= item.Value;
string otherthing =item.Text;
}

答案 4 :(得分:0)

这就是最终对我有用的东西。以上答案的组合。

您必须在页面/控件的OnLoad处理程序中跟踪先前和当前选定的索引/值。

private int PreviousSelectedIndex
{
    get { return (Page.ViewSate["prevIdx"] == null) ? -1 : (int)ViewSate["prevIdx"]; }
    set { Page.ViewSate["prevIdx"] = value; }
}

private int CurrentSelectedIndex
{
    get { return (Page.ViewSate["currIdx"] == null) ? -1 : (int)ViewSate["currIdx"]; }
    set { Page.ViewSate["currIdx"] = value; }
}

protected override void OnLoad(EventArgs e)
{
    if (!Page.IsPostBack)
    {
        PreviousDropDownValue = ddlYourDropDownList.SelectedValue;
        CurrentDropDownValue = ddlYourDropDownList.SelectedValue;
    }
    else if (Page.IsPostBack && CurrentDropDownValue != ddlYourDropDownList.SelectedValue)
    {
        PreviousDropDownValue = CurrentDropDownValue;
        CurrentDropDownValue = ddlYourDropDownList.SelectedValue;
    }
}

之后,您可以将之前的值和当前的值相互比较。