状态下拉列表不是通过DLL升序进入的

本文关键字:升序 DLL 下拉列表 状态 | 更新日期: 2023-09-27 18:17:31

我有一个下拉列表,其中的值来自表。但问题是,它不是按字母顺序排列的。我希望这个城市的名字应该按字母顺序排列。请参考代码

 private void LoadDropDowns()
{
    var states = _careerHelper.GetStates(ddlCountry.SelectedValue);
    states.Insert(0, "--Select--");
    ddlState.DataSource = states;
    ddlState.DataBind();
}

我调用DLL文件的状态呈现,请同时查看dll代码:-

   public List<string> GetStates(string country)
    {
        if (country == "")
        {
            return null;
        }
        else
        {
            return _rblDataContext.Locations.Where(m => m.CountryName.ToLower() == country.ToLower()).Select(m => m.StateName).Distinct().ToList();
        }
    }

状态值来了,但不是按升序排列,我希望以升序显示。我试着把states.Insert()放在DataBind()下面,但它不起作用。请帮助

状态下拉列表不是通过DLL升序进入的

为什么期望数据被排序当你不排序任何地方?如果你没有明确地在你的SQL查询中排序(你的linq查询结果),那么SQL Server(我在这里假设)将不会保证任何特定的结果顺序。

要解决这个问题,您需要添加一个OrderBy(...)

return _rblDataContext.Locations
    .Where(m => m.CountryName.ToLower() == country.ToLower())
    .Select(m => m.StateName)
    .Distinct()
    .OrderBy(m => m)
    .ToList();

如果你不能通过SQL改变行顺序,那么你可以为数据表创建一个DataView,如:

DataView dvTable = new DataView(DataTableName);
dvTable.Sort = "CityName asc/desc"; //asc in the case of this question.
ddlState.DataSource = dvTable;
ddlState.DataValueField = "PK_State";
ddlState.DataTextField = "CityName";
ddlState.DataBind();