2

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

现在我正在使用代码:

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

4 回答 4

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-");
于 2013-03-27T10:10:31.933 回答
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 然后删除它们并再次将它们插入到适当的位置并不昂贵。

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

于 2013-03-27T10:13:25.510 回答
1

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

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

于 2013-03-27T10:16:36.183 回答
0

您可以尝试使用带有布尔值的 orderby

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

在您的代码中=>

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(); 
于 2013-03-27T10:38:07.280 回答