DropDownList如何设置DataSource

时间:2010-12-29 15:34:07

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

嗨,我有一个DropDownList。

我需要在其中可视化一个SINGLE值(ListItem)当前登录用户,如

<asp:ListItem>Joe</asp:ListItem>

这是我的错误代码,如果UserName是“Joe”,DropDownList会为ListItem的每个字母显示: 例如:

<asp:ListItem>J</asp:ListItem>
<asp:ListItem>o</asp:ListItem>
<asp:ListItem>e</asp:ListItem>

这是我的代码:

<asp:DropDownList ID="uxUserListSelector" runat="server"></asp:DropDownList>

        MembershipUser myCurrentUser = Membership.GetUser();
        myUserList.DataSource = myCurrentUser.UserName;
        myUserList.DataBind();

知道怎么解决吗?感谢

1 个答案:

答案 0 :(得分:7)

您正在将DataSource设置为字符串(myCurrentUser.UserName),因此它会将其解释为字符数组并相应地绑定它。

至于如何修复它,你究竟想做什么?为什么使用DropDownList来显示单个项目?为什么不是TextBoxLabel

目前,我假设您希望DropDownList包含所有用户,并预先选择当前用户。它是否正确?如果是这样,那么您将需要一种方法来获取所有用户的名称并将DropDownList绑定到该名称列表。 (可能会有一个简单的IList<string>用户名,但如果您希望更好地控制DataTextItemDataValueItem,那么自定义对象的IList<>可能会更好。)

一旦绑定到用户名的列表,就可以将所选值设置为当前用户名。

修改:根据您的回复,整体代码如下所示:

// You'll need a method to get all of the users, this one is just for illustration
myUserList.DataSource = userRepository.GetAllUsers();
// Set this to the property on the user object which contains the username, to display in the dropdownlist
myUserList.DataTextField = "Username";
// Set this to the property on the user object which contains the user's unique ID, to be the value of the dropdownlist (this might also be the username)
myUserList.DataValueField = "UserID";
myUserList.DataBind();
// There are a number of different ways to pre-select a value, this is one
myUserList.Items.FindByText(myCurrentUser.UserName).Selected = true;

当然,您希望将其中的一部分包含在正确的错误处理中。例如,如果在列表中找不到提供的用户名,则最后一行将抛出异常。