将多个表中的数据连接到SelectList中,并在每个数据集前面使用MVC中的标题
本文关键字:前面 数据集 标题 MVC SelectList 数据 连接 | 更新日期: 2023-09-27 18:03:06
所以这比我过去一直在尝试做的要复杂一些。实际上我有几个不同的表:employee.employees
, companies.employees
, dbo.all_employees
和companies
。它们由以下模型表示,依次为:employees1
、employees
、all_employees
和companies
。
all_employees
有3列all_id
、employee_id
和employee_type
。我正在尝试制作一个SelectList来填充一个下拉列表,该列表将容纳按其相应公司划分的所有员工。我已设法按名称将所有员工放入组合框中,但我似乎不知道如何将员工分开。
这样想。如果all_employees
有employee_type
为1的记录,他们属于我们公司,他们的名字和姓氏应该从employees1
中提取,如果他们的employee_type
不是1,那么他们属于另一家公司,应该从employees
中提取
下面是我的粗略代码,它当前从两个表中提取所有员工,合并它们,并将它们放入一个选择列表中。我只需要弄清楚如何简单地将它们分开,使其看起来像
-- Select Employee --
-- Company 1
First Last
First Last
-- Company 2
First Last
-- Company 3
First Last
代码 var query1 = from c in _db.employees1
join p in _db.all_employees on c.employee_id equals p.employee_id into ps
select new { employee_id = c.employee_id, name = c.first_name + " " + c.last_name };
var query2 = from c in _db.employees
join p in _db.all_employees on c.employee_id equals p.employee_id into ps
select new { employee_id = c.employee_id, name = c.first_name + " " + c.last_name };
var merged = query2.Union(query1);
ViewBag.employeeid = new SelectList(merged, "employee_id", "name");
我遇到了一个可能的解决方案,以第三方扩展的形式。它实现了optgroup,并允许我轻松地控制一切。我认为这是最好的解决办法,但我不完全确定。
图书馆在这里。
修改后的代码现在看起来像这样:
控制器:
var query1 = from c in _db.employees1
join p in _db.all_employees on c.employee_id equals p.employee_id into ps
select new { employee_id = c.employee_id, name = c.first_name + " " + c.last_name, companyID = 1, company = "LightHouse Electric" };
var query2 = from c in _db.employees
join p in _db.all_employees on c.employee_id equals p.employee_id into ps
select new { employee_id = c.employee_id, name = c.first_name + " " + c.last_name, companyID = c.company_id, company = "Other" };
var merged = query2.Union(query1);
var data = merged.ToList().Select(t => new GroupedSelectListItem {
GroupKey = t.companyID.ToString(),
GroupName = t.company,
Text = t.name,
Value = t.employee_id.ToString()
});
ViewBag.employeeid = data;
视图:
@Html.DropDownGroupListFor(model => Model.employee_id, (IEnumerable<GroupedSelectListItem>)ViewBag.employeeid,
"-- Select --", new {@data_val = "true", @data_val_required = "The Name field is required.", @class="form-control"})