ASP.NET ListBox将ListItem从文本,值转换为文本,文本

时间:2013-06-26 15:35:29

标签: c# asp.net listbox listboxitem

我在asp.net中遇到了ListBox控件的问题。我使用以下代码:

List<ListItem> users = new List<ListItem>();
foreach (DataRow dr in dtUsers.Rows)
{
     users.Add(new ListItem(dr["name"].ToString(), dr["userID"].ToString()));
}
lb_users.DataSource = users;
lb_users.DataBind();

用户包括以下内容:

ListItem("Hans", "1")
ListItem("Janus", "2")
ListItem("Michael", "3")

然而,在写出listitems时,绑定到ListBox(lb_users),我得到以下内容:

ListItem("Hans", "Hans")
ListItem("Janus", "Janus")
ListItem("Michael", "Michael")

我使用以下ListBox代码:

<asp:ListBox ID="lb_users" runat="server" SelectionMode="Multiple" ClientIDMode="Static" />

有人可以解释为什么会这样或如何解决它?

谢谢,

/汉斯

3 个答案:

答案 0 :(得分:1)

您需要设置数据文本和值字段,例如:

lbl_users.DataSource = users;
lbl_users.DataValueField = "userID";
lbl_users.DataTextField = "name";
lbl_users.DataBind();

答案 1 :(得分:1)

您可以像这样手动添加ListItem -

foreach (DataRow dr in dtUsers.Rows)
{
    lb_users.Items.Add(new ListItem(dr["name"].ToString(), dr["userID"].ToString())));    
}

或者您可以直接从datatable绑定。

lb_users.DataSource = dtUsers;
lb_users.DataValueField = "userID";
lb_users.DataTextField = "name";
lb_users.DataBind();

答案 2 :(得分:1)

实际上因为你绑定到listitem,你需要指定ListItem对象的属性Text和Value,所以代码应该是这样的:

lbl_users.DataSource = users;
lbl_users.DataValueField = "Value";
lbl_users.DataTextField = "Text";
lbl_users.DataBind();