我的国家页面上有一个下拉列表,这里是我的代码,我抓住了ddl id,并绑定了我的数据源:
DropDownList ddlSalary = (DropDownList)this.FindControl(MyControls.CountryDDL);
if (ddlSalary != null)
{
ddlSalary.DataSource = MyMethods.LoadCountries();
ddlSalary.DataValueField = "Value";
ddlSalary.DataTextField = "Text";
ddlSalary.DataBind();
}
我所写的国家是按字母顺序排列的。但是id就像将特定的一个移动到列表顶部的选项,或者可能是自动选择。示例“英国”是列表中的第一个 这样做最有效的方法是什么?
答案 0 :(得分:2)
我认为这种逻辑更适合放在您的服务/模型提供者(MyMethods.LoadCountries();)中。
类似的东西:
public static List<Country> LoadOrderedCountries(){
var orderedCounteries = MyMethods.LoadCountries();
orderedCounteries .Sort(); // Just to make sure alphabetical order, assuming that Country implements IComparable
var defaultCountry = Country.GetDefault();
orderedCounteries .Remove(defaultCountry);
orderedCounteries .Insert(0, defaultCountry);
return orderedCounteries ;
}
答案 1 :(得分:0)
这是一个快速的&amp;用SQL做脏的方法。我更喜欢在数据库级别
使用名称按升序排列列表中所需项目的联盟ALL,不包括我第一次查询中的项目
无论第二个查询是什么,结果都是第一个项目
select * from((选择Empcode,Empname from。) mySchema.Employees,其中EmpCode不在(90))UNION ALL
从mySchema.Employeeswhere中选择EmpCode,EmpName EmpCode =按EmpName的90顺序)为z
您还可以将pageLoad上选择的值设置为
ddlYourDropDownList.SelectedValue = “90”;
答案 2 :(得分:-1)
我通常在数据绑定事件中执行此操作
DropDownList ddlSalary = (DropDownList)this.FindControl(MyControls.CountryDDL);
if (ddlSalary != null)
{
ddlSalary.DataSource = MyMethods.LoadCountries();
ddlSalary.DataValueField = "Value";
ddlSalary.DataTextField = "Text";
ddlSalary.DataBind();
ddlSalary.DataBound += ddlSalary_DataBound;
}
protected void ddlSalary_DataBound(object sender, EventArgs e)
{
ListItem MovingItem = ddlSalary.Items.FindByValue("yourvalue");
ddlSalary.Items.Remove(MovingItem);
ddlSalary.Items.Insert(0, MovingItem);
}
编辑:此方法更适合添加&#34;其他&#34;类型选项,不是由您的数据源提供的。 Amby的解决方案比这更好。
答案 3 :(得分:-1)
对数据源进行数据绑定后,您只需对ListItems
更好的方法是在数据源中进行排序(您没有提供有关从何处获取数据的足够信息)
private void SortDDL(ref DropDownList objDDL)
{
ArrayList textList = new ArrayList();
ArrayList valueList = new ArrayList();
foreach (ListItem li in objDDL.Items)
{
textList.Add(li.Text);
}
textList.Sort();
foreach (object item in textList)
{
string value = objDDL.Items.FindByText(item.ToString()).Value;
valueList.Add(value);
}
objDDL.Items.Clear();
for(int i = 0; i < textList.Count; i++)
{
ListItem objItem = new ListItem(textList[i].ToString(), valueList[i].ToString());
objDDL.Items.Add(objItem);
}
}