DropDownList在数据绑定上丢失了值

Mr *_*nes 8 c# asp.net

我有以下DropDownList

<asp:DropDownList ID="ddlStartMonth" runat="server" />
Run Code Online (Sandbox Code Playgroud)

我正在设置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();
Run Code Online (Sandbox Code Playgroud)

一旦我打电话DataBind(),每个项目的值都会被其文本值覆盖(例如,文本 - 值对("1月","1")变为("1月","1月").所以,如果我要做某事喜欢

int month = 1;
ddlStartMonth.SelectedValue = month.ToString();
Run Code Online (Sandbox Code Playgroud)

"January"将是DropDownList中的选定项,但是忽略该操作,DropDownList维护先前选择的值.我一定在这里遗漏了什么......有什么想法?

注意:需要以编程方式创建这些值.

Kod*_*hor 12

尝试设置DataTextFieldDataValueField属性:

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();
Run Code Online (Sandbox Code Playgroud)

或者您也可以声明性地设置它们:

<asp:DropDownList ID="ddlStartMonth" DataTextField="Text" DataValueField="Value" runat="server" /
Run Code Online (Sandbox Code Playgroud)

  • 我没有对象,因此我没有任何键或值名称来分配给这些属性.你会认为DropDownList默认会将这些属性映射到ListItem的文本和值字段. (2认同)
  • @KodeKreachor +1.只需将Text和Value属性设置为DataTextField和DataValueField即可.如果未设置这些属性,则会在数据源对象的每个项上调用ToString()方法. (2认同)