截至目前,我有一个ddl,我已经填充了表中的信息。它是设置为自动回发的客户列表。我遇到的问题是,默认选择始终是列表中的第一个客户,当您单击一个客户时,回发并获取所需的所有信息,并将选择设置为第一个客户,并且不做回帖。
所以我想到并且一直试图实现的修复是在ddl中设置一个空值,就像“请选择客户”一样。 我已经进入了DDL编辑项目并添加了这个,但是对表的调用它不包括它。有没有办法让它被包括在内。
使用Mozilla Firefox,我不会遇到这个问题,因为在回发后它会停留在同一个客户身上。如果我可以清除任何内容,我将尽我所能,如果有任何代码可能有用,我可以提供它
//save the value of the current selection to reselect later if still exists
string origSelectedItem = ddlSelectedCustomer.SelectedValue;
//clear and refill the list
ddlSelectedCustomer.Items.Clear();
//check what role the user is in
string usersRole = Roles.GetRolesForUser(Membership.GetUser().UserName)[0];
MembershipUser user = Membership.GetUser();
switch (usersRole)
{
case "SalesRep":
ddlSelectedCustomer.DataSource =
DAL.Util.getSalesRepCustomers((Guid)user.ProviderUserKey);
ddlSelectedCustomer.DataBind();
break;
case "BasicUser":
case "Customer":
ddlSelectedCustomer.DataSource =
DAL.Util.getCustomersListForUser((Guid)user.ProviderUserKey);
ddlSelectedCustomer.DataBind();
break;
case "Admin":
case "SuperAdmin":
ddlSelectedCustomer.DataSource = DAL.Util.getAllCustomersList();
ddlSelectedCustomer.DataBind();
break;
default:
break;
}
//if user had a company selected, reselect it if it exists
if (origSelectedItem != string.Empty)
ddlSelectedCustomer.SelectedValue = origSelectedItem;
else if (ddlSelectedCustomer.Items.Count == 1)
//if only one item in the list, select it
ddlSelectedCustomer.Items[0].Selected = true;
此外,这是在网站母版页的代码隐藏中。
谢谢
答案 0 :(得分:3)
您需要将AppendDataBoundItems
设置为true,然后才能添加空的第一项。
<asp:DropDownList ID="DropDownList1" runat="server" AppendDataBoundItems="true">
<asp:ListItem Text="" Value="" /> <!-- empty first item -->
</asp:DropDownList>
重要的是要注意,如果您多次绑定列表,则需要清除列表,以免附加重复的项目。
如果要在代码隐藏中添加空项,清除列表后,可以这样做:
DropDownList1.Items.Clear();
DropDownList1.Items.Add(new ListItem(string.Empty, string.Empty));
//bind list
答案 1 :(得分:1)
我知道这个问题已经存在,但是也可以将其添加到代码隐藏中而不触及aspx将是:使用您的变量:
ddlSelectedCustomer.Items.Insert(0, new ListItem("Please Select"));
这会在您的ddl
中添加“请选择”作为您的第一个项目