下拉列表绑定,自动选择一个项目/先创建一个特定项目
本文关键字:一个 项目 创建 绑定 下拉列表 选择 | 更新日期: 2023-09-27 18:27:04
我的国家页面上有一个下拉列表,这是我获取ddl id并绑定数据源的代码:
DropDownList ddlSalary = (DropDownList)this.FindControl(MyControls.CountryDDL);
if (ddlSalary != null)
{
ddlSalary.DataSource = MyMethods.LoadCountries();
ddlSalary.DataValueField = "Value";
ddlSalary.DataTextField = "Text";
ddlSalary.DataBind();
}
我写的国家是按字母顺序排列的。但我喜欢将特定的一个移动到列表顶部的选项,或者可能是自动选择。示例"英国"在列表中排名第一做这件事最有效的方法是什么?
我认为这个逻辑更适合放在您的服务/模型提供程序(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 ;
}
这里有一个快速&用SQL做这件事的肮脏方式。我更喜欢在数据库级别
- 我正在做的是在列表中首先选择您想要的项目
-
将ALL与列表中您想要的项目按名称升序合并,不包括我的第一个查询中的项目
-
无论第二个查询如何,结果都是第一个项目在顶部
从中选择*(从中选择Empcode,EmpnamemySchema.EmpCode不在(90)中的Employees)UNION ALL
从mySchema中选择EmpCode,EmpName。EmployeeshereEmpCode=EmpName的90个订单)作为z
-
您也可以将页面上选择的值Load设置为
ddlYourDropDownList.SelectedValue="90";
数据绑定数据源后,只需对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);
}
}
我通常在数据绑定事件中执行此操作
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);
}
Edit:此方法更适合添加一个"Other"类型选项,而该选项不是由数据源提供的。安比的解决方案比这更好。