我有以下DropDownList
<asp:DropDownList ID="ddlStartMonth" runat="server" />
我正在按如下方式设置DataSource:
ListItemCollection items = new ListItemCollection();
items.Add(new ListItem("January", "1"));
items.Add(new ListItem("February", "2"));
items.Add(new ListItem("March", "3"));
items.Add(new ListItem("April", "4"));
items.Add(new ListItem("May", "5"));
items.Add(new ListItem("June", "6"));
items.Add(new ListItem("July", "7"));
items.Add(new ListItem("August", "8"));
items.Add(new ListItem("September", "9"));
items.Add(new ListItem("October", "10"));
items.Add(new ListItem("November", "11"));
items.Add(new ListItem("December", "12"));
ddlStartMonth.DataSource = items;
ddlStartMonth.DataBind();
一旦我调用DataBind()
,每个项目的值都会被其文本值覆盖(例如,文本 - 值对(“1月”,“1”)变为(“1月”,“1月”)。所以,如果我要做像
int month = 1;
ddlStartMonth.SelectedValue = month.ToString();
“January”将是DropDownList中的选定项,但是忽略该操作,DropDownList维护先前选择的值。我一定在这里遗漏了什么......有什么想法吗?
注意:需要以编程方式创建这些值。
答案 0 :(得分:12)
尝试设置DataTextField
和DataValueField
属性:
ListItemCollection items = new ListItemCollection();
items.Add(new ListItem("January", "1"));
items.Add(new ListItem("February", "2"));
items.Add(new ListItem("March", "3"));
items.Add(new ListItem("April", "4"));
items.Add(new ListItem("May", "5"));
items.Add(new ListItem("June", "6"));
items.Add(new ListItem("July", "7"));
items.Add(new ListItem("August", "8"));
items.Add(new ListItem("September", "9"));
items.Add(new ListItem("October", "10"));
items.Add(new ListItem("November", "11"));
items.Add(new ListItem("December", "12"));
ddlStartMonth.DataSource = items;
ddlStartMonth.DataTextField = "Text";
ddlStartMonth.DataValueField = "Value";
ddlStartMonth.DataBind();
或者您也可以声明性地设置它们:
<asp:DropDownList ID="ddlStartMonth" DataTextField="Text" DataValueField="Value" runat="server" /
答案 1 :(得分:-1)
每次页面循环(即初始加载和回发)时,您都需要创建ddlStartMonth项目列表。
执行此操作的正确位置是OnInit() - 而不是PageLoad() - 因为这会阻止将所有这些数据放入Viewstate