我有一个下拉列表,其值来自表格。但问题在于它不是按字母顺序排列的。我希望这个城市的名字应该按字母顺序排列。请参阅代码供您参考。
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()下面,但它没有用。请帮忙
答案 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();