【问题标题】:Transfer items between drop-down lists in different webForms在不同 webForms 的下拉列表之间传输项目
【发布时间】:2015-04-12 03:59:30
【问题描述】:

我不是一个经验丰富的程序员,只是一个菜鸟爱好者。

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

还有另一个包含另一个下拉列表的网络表单,我希望第二个“ddl”显示我添加到“第一个 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();

我无法对 ddl 做同样的事情,因为与 DataSet 和 Data Table 不同,当我尝试在 webForm 的“背后代码”中声明它们时,ddl 是从设计器视图创建的,其中“原始” ddl 存在我收到关于对象重复的错误,这是有道理的。

感谢您的宝贵时间

@埃尔卡纳

在第一个 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();            
    }

再次感谢!

【问题讨论】:

  • 为什么不用数据库来维护这种工作
  • 嗨 - 这只是我必须展示的一个原型,然后只需要运行时的值。
  • 此外页面是无状态的。你不能指望他会在被销毁后保留他的数据。
  • 您可以使用 cookie、查询字符串、本地存储、会话存储等将数据从一个页面传递到另一个页面

标签: c# asp.net webforms


【解决方案1】:

为什么不使用会话:

在第一页:

Session["myddlstore"] = myFirstDDL.DataSource;

在第二页

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

更新

如果 dropdowlinst 项目是由用户添加的,那么您可以在 button click 中实现类似的操作,将项目添加到下拉列表中:

  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&lt;ObjectType&gt;)。

【讨论】:

  • 在第一页,将“myFirstDDL.DataSource;”将所有项目从 ddl 传递到会话变量?我问是因为在第一页中,ddl 是从文本框中的用户输入提供的。
  • Erkaner,我将列表声明为“按钮单击”功能。我看到项目被添加到第一个 ddl,不幸的是这些项目没有加载到第二个 ddl。我在“ddl_ingenieros.DataSource = Session["myItems"];" 的第二个网络表单中设置了一个断点...会话变量正在某处丢失其内容。
  • @DMS 哦,我们从未在会话中存储数据!在此txt_newAdmin.Text = ""; 之后添加此Session["myItems"] = myItems;
  • 成功了!我现在看到第二个 ddl 了!非常感谢 Erkaner
猜你喜欢
  • 2011-10-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-25
相关资源
最近更新 更多