下拉列表绑定,自动选择一个项目/先创建一个特定项目

本文关键字:一个 项目 创建 绑定 下拉列表 选择 | 更新日期: 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做这件事的肮脏方式。我更喜欢在数据库级别

  1. 我正在做的是在列表中首先选择您想要的项目
  2. 将ALL与列表中您想要的项目按名称升序合并,不包括我的第一个查询中的项目

  3. 无论第二个查询如何,结果都是第一个项目在顶部

    从中选择*(从中选择Empcode,EmpnamemySchema.EmpCode不在(90)中的Employees)UNION ALL

    从mySchema中选择EmpCode,EmpName。EmployeeshereEmpCode=EmpName的90个订单)作为z

  4. 您也可以将页面上选择的值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"类型选项,而该选项不是由数据源提供的。安比的解决方案比这更好。