我有一个包含以下数据的数据库表,
Department | Section | Employee ID
-----------------------------------
Production | Padding | 102001
Production | Padding | 102002
Production | Padding | 102003
Production | Sewing | 103001
Production | Sewing | 103002
HR & admin | admin | 107001
现在,我想像在C#MVC5剃刀视图中跟随嵌套列表一样,可以通过模型传递数据
<html><body>
<ul>
<li>Production
<ul>
<li>Padding
<ul>
<li>102001</li>
<li>102002</li>
<li>102003</li>
</ul>
</li>
<li>Sewing
<ul>
<li>103001</li>
<li>103002</li>
</ul>
</li>
</ul>
</li>
<li>HR & admin
<ul>
<li>Admin
<ul>
<li>107001</li>
</ul>
</li>
</ul>
</li>
</ul>
</body></html>
如何使用C#MVC5来实现呢? 请帮助我。 我将使用列表作为jstree输入。
答案 0 :(得分:0)
某些人可能不喜欢此解决方案,但它不需要任何第三部分库。该代码仅使用字符串方法。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.IO;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
DataTable dt = new DataTable();
dt.Columns.Add("Department", typeof(string));
dt.Columns.Add("Section", typeof(string));
dt.Columns.Add("Employee ID", typeof(string));
dt.Rows.Add(new object[] {"Production","Padding","102001"});
dt.Rows.Add(new object[] {"Production","Padding","102002"});
dt.Rows.Add(new object[] {"Production","Padding","102003"});
dt.Rows.Add(new object[] {"Production","Sewing","103001"});
dt.Rows.Add(new object[] {"Production","Sewing","103002"});
dt.Rows.Add(new object[] {"HR & admin","admin","107001"});
CreateHtml createHtml = new CreateHtml(dt);
}
}
public class CreateHtml
{
public DataTable dt = null;
public StringWriter writer = new StringWriter();
private int numberColumns = 0;
public CreateHtml(DataTable dt)
{
this.dt = dt;
numberColumns = dt.Columns.Count;
writer.WriteLine("<html><body>");
RecursiveWrite(0, dt.AsEnumerable().ToList());
writer.WriteLine("</html></body>");
string body = writer.ToString();
}
void RecursiveWrite(int level, List<DataRow> rows)
{
string leader = new string(' ', 5 * level);
writer.WriteLine("{0} <ul>", leader);
var groups = rows.GroupBy(x => x[level]).ToList();
foreach (var group in groups)
{
if (level < numberColumns - 1)
{
writer.WriteLine("{0} <li>{1}", leader, group.Key);
RecursiveWrite(level + 1, group.ToList());
writer.WriteLine("{0} </li>", leader);
}
else
{
writer.WriteLine("{0} <li>{1}</li>", leader, group.Key);
}
}
writer.WriteLine("{0} </ul>", leader);
}
}
}