我在后面的代码中动态创建下拉列表。我想添加一个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。
如果您知道原因,请帮助我。
答案 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
}
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);
}