我有一个下拉列表,其中的值来自表。但问题是,它不是按字母顺序排列的。我希望这个城市的名字应该按字母顺序排列。请参考代码
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()下面,但它不起作用。请帮助
为什么期望数据被排序当你不排序任何地方?如果你没有明确地在你的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();