在不同的webForms中的下拉列表之间传输项目

时间:2015-04-12 03:59:30

标签: c# asp.net webforms

我是一位经验丰富的程序员,只是一位新秀爱好者。

我有一个webForm,我将项目添加到下拉列表中。

还有另一个包含另一个下拉列表的webform,我希望第二个“ddl”显示我添加到“first ddl”的项目。

在没有成功完成公共财产后,我试图以最直接的方式完成这项工作:

在designer.cs中,将第一个“ddl”从受保护的全局变为公共。

在我写的第二个webForm上:

 WebForm3 wf_ConfigurationPage = new WebForm3();

这些行的简短功能:

ddl_ingenieros.DataSource = wf_ConfigurationPage.ddl_Engineers;
ddl_ingenieros.DataBind();

我从PageLoad调用该函数,但不幸的是“ddl”没有显示其“DataSource ddl”中的项目。

另外,当我切换页面时,我添加到原始“ddl”的项目就会消失。

你能帮我解决这两个问题吗?

我设法为gridview做了类似的事情,如下所示:

在原始gridview所在的webform上:

static DataSet DS;
static DataTable tableRequests;

/*  -------------- Public Properties ---------------- */

public DataSet currentList //Allows access from other pages.
{
    get {
        return DS;
    }
}

public DataTable currentTable {
    get {
        return tableRequests;
    }
}

在第二个webForm上,我想显示gridview:

WebForm1 wf_ActiveReq = new WebForm1();

然后我从PageLoad调用的一个简短函数,它包含以下行:

gv_results.DataSource = wf_ActiveReq.currentList;
gv_results.DataBind();

我无法对ddls做同样的事情,因为与DataSet和数据表不同,ddl是从设计器视图创建的,当我试图在webForm的“代码隐藏”中声明它们时“原始” ddl存在我得到关于被复制的对象的错误,这是有道理的。

感谢您的时间

@Erkaner

在第一个webForm中:

static List<string> myItems = new List<string>();


    protected void btn_add_Click(object sender, EventArgs e)
    {

        if (Session["myItems"] != null)
        {
            myItems = (List<string>) Session["myItems"];

        }
        myItems.Add(txt_newAdmin.Text);
        ddl_Engineers.DataSource = myItems;
        ddl_Engineers.DataBind();
        txt_newAdmin.Text = ""; 
    }

在第二个webForm中,我编写了一个我从pageLoad调用的函数:

private void pull_engineersList()
    {

        ddl_ingenieros.DataSource = Session["myItems"];
        ddl_ingenieros.DataBind();            
    }

再次感谢!

1 个答案:

答案 0 :(得分:1)

为什么不使用Session:

在第一页:

Session["myddlstore"] = myFirstDDL.DataSource;

并在第二页

mySecondDDL.DataSource = Session["myddlstore"];
mySecondDDL.DataBind();

<强>更新

如果用户添加了下拉列表项,那么您可以在按钮单击中实现类似这样的内容,将项目添加到下拉列表中:

  List<string> myitems = new List<string> ();
  if(Session["myitems"] != null)
  {
      myitems = (List<string>) Session["myitems"];
  }

  myitems.Add(txt_NewItem.Text);

  myFirstDDL.DataSource = myitems;
  myFirstDDL.DataBind();

和类似的。在第二页

 mySecondDDL.DataSource = Session["myitems"];
 mySecondDDL.DataBind();
 Session["myitems"] = myitems;

如果在下拉列表中存储更复杂的对象,我将定义一个表示复杂对象的类,并仍然使用上述方法(List<ObjectType>)。