排序下拉列表

时间:2013-03-27 10:07:04

标签: c# database entity-framework

我正在使用实体框架数据库,我想从表中填充我的下拉列表,但顺序正确。

现在我正在使用代码:

var databaseList = from p in db.TECHNICAL_SKILLS
                   where p.skill_type == "Database"
                   select new EmployeeTechnicalSkillInfo
                       {
                           TechnicalSkillId = p.technical_skill_id,
                           SkillType = p.skill_type,
                           SkillName = p.skill_name
                       };

        List<object> sDataValue = new List<object>();
        sDataValue.Add("- Select -");
        sDataValue.Remove("Other");

        foreach (var vData in databaseList)
        {
            sDataValue.Add(vData.SkillName);
        }

        sDataValue.Add("Other");

        DropDownListDB.DataSource = sDataValue.ToArray();
        DropDownListDB.DataBind(); 

这是解决方案

    var databaseList = from p in db.TECHNICAL_SKILLS
           where p.skill_type == "Database"
           orderby p.skill_name != "Other" descending, p.skill_name
           select new EmployeeTechnicalSkillInfo
               {
                   TechnicalSkillId = p.technical_skill_id,
                   SkillType = p.skill_type,
                   SkillName = p.skill_name
               };

4 个答案:

答案 0 :(得分:3)

从列表中删除条目-Select-,并将其作为第一项附加到List<object>

List<object> sDataValue = new List<object>();
sDataValue.Add("-Select-");
foreach (var vData in databaseList){}
我认为,

是最简单的方法。

修改

然后你会使用if/else,也许和

foreach (var vData in databaseList){} //fill your list
sDataValue.Add("-Other-");

答案 1 :(得分:1)

这样做:

从databaseList中删除-Select-Other,如下所示:

var databaseList = from p in db.TECHNICAL_SKILLS
                   where p.skill_type == "Database"
                     && p.skill_name.ToLower() !="other"
                     && p.skill_name.ToLower() !="-select-"

                   select new EmployeeTechnicalSkillInfo
                       {
                           TechnicalSkillId = p.technical_skill_id,
                           SkillType = p.skill_type,
                           SkillName = p.skill_name
                       };

然后执行此操作:

DropDownListDB.DataSource = sDataValue.ToArray().OrderBy(s=>s);
DropDownListDB.Items.Insert(0, "-Select-");
DropDownListDB.Items.Add("Other");

如果你必须从数据库中带来-Select-和Other字段,将它们绑定到DropDownList然后删除它们并再次将它们插入适当的位置就不那么昂贵了。

您根本不从数据库中选择这两行。它会更有效率。

答案 2 :(得分:1)

您可以在数据库中添加“section id”:0表示“-Select-”,2表示“Other”,1表示其余部分。然后排序1)部分ID,2)名称。

但最好不要存储“-Select-”(它不代表有效值)并将其添加到数据绑定后的正确位置。

答案 3 :(得分:0)

您可以尝试使用布尔值

播放orderby
orderby p.skill_name != "Other" descending, p.skill_name

在您的代码中=&gt;

var databaseList = from p in db.TECHNICAL_SKILLS
               where p.skill_type == "Database"
               orderby p.skill_name != "Other" descending, p.skill_name
               select new EmployeeTechnicalSkillInfo
                   {
                       TechnicalSkillId = p.technical_skill_id,
                       SkillType = p.skill_type,
                       SkillName = p.skill_name
                   };

    List<object> sDataValue = new List<object>();
    sDataValue.Add("- Select -");

    foreach (var vData in databaseList)
    {
        sDataValue.Add(vData.SkillName);
    }

    DropDownListDB.DataSource = sDataValue.ToArray();
    DropDownListDB.DataBind();