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

时间:2014-08-12 09:49:39

标签: c# sorting

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

 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()下面,但它没有用。请帮忙

2 个答案:

答案 0 :(得分:2)

为什么在不进行任何排序的情况下期望对数据进行排序?如果你没有在sql-query(你的linq查询导致的)中明确地命令,那么SQL Server(我假设在这里)将不保证结果的任何特定顺序。

要解决此问题,您需要添加OrderBy(...)

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

答案 1 :(得分:1)

如果无法通过SQL更改行的顺序,则可以为DataTable创建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();