如何从MSSQL数据库在C#剃刀视图中生成嵌套列表?

时间:2018-09-09 10:01:21

标签: c# linq asp.net-mvc-5

我有一个包含以下数据的数据库表,

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输入。

1 个答案:

答案 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);
        }
    }


}