如何将listitem添加到代码隐藏中生成的下拉列表中?

时间:2014-05-31 09:45:15

标签: c# asp.net drop-down-menu

我在后面的代码中动态创建下拉列表。我想添加一个listitem,它是下拉列表的默认选择。

int Persons= int.Parse(TextBox_persons.Text) + 1;

for (int i = 1; i < Persons; i++)
{
     DropDownList DropDownList_menuchoice = new DropDownList();
     DropDownList_menuchoice.DataSource = Menu.GetAllMenus();
     DropDownList_menuchoice.CssClass = "form-control";
     DropDownList_menuchoice.Items.Add(new ListItem("please select a menu", "-1"));
     DropDownList_menuchoice.DataTextField = "titel";
     DropDownList_menuchoice.DataValueField = "titel";
     DropDownList_menuchoice.DataBind();
     Panel1.Controls.Add(DropDownList_menuchoice);
}

为什么这不起作用?我一直在网上寻找答案,然而,每个人都建议使用items.add代码并且它对我不起作用。它只显示我从数据库中检索的数据,而不是我在上面的代码中添加的listitem。

如果您知道原因,请帮助我。

2 个答案:

答案 0 :(得分:2)

首先,你需要在调用DataBind方法之后添加项目。 像这样:

DropDownList DropDownList_menuchoice = new DropDownList();
DropDownList_menuchoice.DataSource = Menu.GetAllMenus();
DropDownList_menuchoice.CssClass = "form-control";
DropDownList_menuchoice.DataTextField = "titel";
DropDownList_menuchoice.DataValueField = "titel";
DropDownList_menuchoice.DataBind();
DropDownList_menuchoice.Items.Add(new ListItem("please select a menu", "-1"));

然后你需要使用Insert方法将它添加到索引0(作为第一项):

DropDownList_menuchoice.Items.Insert(0, new ListItem("please select a menu", "-1"));

您也可以先将项添加到数据中,然后设置DataSource属性。像这样的东西:

var data = Menu.GetAllMenus();
data.Insert(0, new Menu { titel = "please select a menu" });
DropDownList_menuchoice.DataSource = data;
...

答案 1 :(得分:0)

您需要在pre_init事件中重新创建下拉列表。

protected override void OnPreInit(EventArgs e)
{
    base.OnPreInit(e);
    //create your dropdown here
}

编辑-1

int Persons= int.Parse(TextBox_persons.Text) + 1;
Session["Persons"]=Person;

on pre_init

protected override void OnPreInit(EventArgs e)
{
    int Persons=0;
    if(Session["Persons"]!=null)
    Persons= int.Parse(Session["Persons"].ToString()) + 1;
    for (int i = 1; i < Persons; i++)
    {
        DropDownList DropDownList_menuchoice = new DropDownList();
        DropDownList_menuchoice.DataTextField = "titel";
        Panel1.Controls.Add(DropDownList_menuchoice);
     }
    base.OnPreInit(e);
}