zoukankan      html  css  js  c++  java
  • 动态生成 表格笔记

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Text;
    using System.Data;
    using System.Reflection;
    using System.Collections;
    
    namespace Rhythmk.Cnblogs
    {
        //  http://t.qq.com/wangkyx   rhythmk  cnblogs
    
        public partial class Index : System.Web.UI.Page
        {
            public string HTMLTB = string.Empty;
            protected void Page_Load(object sender, EventArgs e)
            {
                List<EExamanalysisreport> list = new List<EExamanalysisreport>();
                EExamanalysisreport entity;
                entity = new EExamanalysisreport() { Level = 1, PointCode1 = "0101", PointCode1Name = "0101Name", PointCode2 = "010101", PointCode2Name = "010101Name", PointCode3 = "01010101", PointCode3Name = "01010101Name", PointCode4 = "0101010101", PointCode4Name = "0101010101Name" };
                list.Add(entity);
    
                entity = new EExamanalysisreport() { Level = 4, PointCode1 = "0101", PointCode1Name = "0101Name", PointCode2 = "010101", PointCode2Name = "010101Name", PointCode3 = "01010101", PointCode3Name = "01010101Name", PointCode4 = "0101010102", PointCode4Name = "0101010102Name" };
                list.Add(entity);
                entity = new EExamanalysisreport() { Level = 4, PointCode1 = "0101", PointCode1Name = "0101Name", PointCode2 = "010101", PointCode2Name = "010101Name", PointCode3 = "01010102", PointCode3Name = "01010102Name", PointCode4 = "0101010204", PointCode4Name = "0101010204Name" };
                list.Add(entity);
                entity = new EExamanalysisreport() { Level = 4, PointCode1 = "0101", PointCode1Name = "0101Name", PointCode2 = "010101", PointCode2Name = "010202Name", PointCode3 = "01020203", PointCode3Name = "01020203Name", PointCode4 = "0102020304", PointCode4Name = "0102020304Name" };
                list.Add(entity);
                entity = new EExamanalysisreport() { Level = 4, PointCode1 = "0101", PointCode1Name = "0101Name", PointCode2 = "010102", PointCode2Name = "010102Name", PointCode3 = "01010205", PointCode3Name = "01010205Name", PointCode4 = "0101020501", PointCode4Name = "0101020501Name" };
                list.Add(entity);
                entity = new EExamanalysisreport() { Level = 4, PointCode1 = "0201", PointCode1Name = "0201Name", PointCode2 = "020101", PointCode2Name = "020101Name", PointCode3 = "02010101", PointCode3Name = "02010101Name", PointCode4 = "0201010101", PointCode4Name = "02010101Name" };
                list.Add(entity);
                TableEngine tb = new TableEngine(list);
               HTMLTB=tb.Show().ToString();
    
            }
        }
        //  http://t.qq.com/wangkyx   rhythmk  cnblogs
        public class TableEngine
        {
            private List<EExamanalysisreport> _dataList;
            private StringBuilder sb;
            private DataTable dt;
            /// <summary>
            /// 单元格
            /// </summary>
            private List<TCell> _celllist;
    
            /// <summary>
            /// 行大小
            /// </summary>
            private int _Max_X; //  行大小
    
            /// <summary>
            /// 列大小
            /// </summary>
            private int _Max_Y;
    
    
            public TableEngine(List<EExamanalysisreport> datalist)
            {
                this._dataList = datalist.Distinct().ToList();
                _celllist = new List<TCell>();
                sb = new StringBuilder();
                dt = new DataTable();
            }
    
            //  http://t.qq.com/wangkyx   rhythmk  cnblogs
            /// <summary>
            /// 初始化数据
            /// </summary>
            private void Init()
            {
                dt = ToDataTable(_dataList);
                _Max_X = _dataList.Max(x => x.Level);
                _Max_Y = _dataList.Count();
                List<Tuple<string, string, int>> pointArray = new List<Tuple<string, string, int>>();
                pointArray.AddRange(_dataList.Select(X => new Tuple<string, string, int>(X.PointCode1, X.PointCode1+"Name", 1)));
                pointArray.AddRange(_dataList.Select(X => new Tuple<string, string, int>(X.PointCode2, X.PointCode2+"Name", 2)));
                pointArray.AddRange(_dataList.Select(X => new Tuple<string, string, int>(X.PointCode3, X.PointCode3+"Name", 3)));
                pointArray.AddRange(_dataList.Select(X => new Tuple<string, string, int>(X.PointCode4, X.PointCode4+"Name", 4)));
                pointArray = pointArray.OrderBy(x => x.Item1).Distinct().ToList();
                TCell cell;
                for (int i = 0; i <  _Max_X ; i++)
                {
                    var PointList = pointArray.Where(x => x.Item3 == (i + 1)).Distinct().OrderBy(x => x.Item1).ToList();
    
                    foreach (var p in PointList)
                    {
                        int rowCount = ChildItemCount(i + 1, p.Item1);
                        for (int j = 0; j < rowCount; j++)
                        {
                            cell = new TCell();
                            cell.X = i;// 知识点级别
                            cell.Y = _celllist.Where(x => x.X == i).Count() ;
                            cell.PointCode = p.Item1;
                            cell.PointName = p.Item2;
                            cell.YItem = 0;
                            if (j == 0) cell.YItem = rowCount;
                            _celllist.Add(cell);
                        }
                    }
                }
            }
    
    
            private int ChildItemCount(int level, string pointcode)
            {
                return dt.Select(string.Format("PointCode{0}='{1}'", level, pointcode)).Length;
            }
    
    
            public StringBuilder Show()
            {
                if (_dataList == null || _dataList.Count < 1)
                    return sb;
                Init();
                sb.Append("<table class=\"auto-style3\" border=\"1\">");
                StringBuilder sbRow;
                for (int i = 0; i < _Max_Y; i++)
                {
                    sbRow = new StringBuilder();
    
                    for (int j = 0; j < _Max_X; j++)
                    {
                        TCell tcell = _celllist.Where(x => x.X == j && x.Y == i).FirstOrDefault();
                        if (tcell != null)
                        {
                            int minY = _celllist.Where(x =>x.PointCode==tcell.PointCode).Min(x=>x.Y);
                            if (minY!=tcell.Y)
                                continue;
                           
                            sbRow.Append("<td  x=\""+j.ToString()+"\" y=\""+i.ToString()+"\"");
                            if (tcell.YItem > 1)
                            {
                                sbRow.Append(" rowspan=\"" + tcell.YItem.ToString() + "\" ");
    
                            }
                            sbRow.Append(">" + tcell.PointName);
                            sbRow.Append("</td>");
                        }
                    }
    
                    if (sbRow.Length > 1)
                    {
                        sb.Append("<tr>" + sbRow.ToString() + "</tr>");
                    }
    
                }
                sb.Append("</table>");
    
                return sb;
            }
    
    
            /// <summary>
            /// 将集合类转换成DataTable
            /// </summary>
            /// <param name="list">集合</param>
            /// <returns></returns>
            private static DataTable ToDataTable(IList list)
            {
                DataTable result = new DataTable();
                if (list.Count > 0)
                {
                    PropertyInfo[] propertys = list[0].GetType().GetProperties();
                    foreach (PropertyInfo pi in propertys)
                    {
                        result.Columns.Add(pi.Name, pi.PropertyType);
                    }
    
                    for (int i = 0; i < list.Count; i++)
                    {
                        ArrayList tempList = new ArrayList();
                        foreach (PropertyInfo pi in propertys)
                        {
                            object obj = pi.GetValue(list[i], null);
                            tempList.Add(obj);
                        }
                        object[] array = tempList.ToArray();
                        result.LoadDataRow(array, true);
                    }
                }
                return result;
            }
    
            public class TCell
            {
                public string PointCode { get; set; }
                public string PointName { get; set; }
                public int Level { get; set; }
                public int X { get; set; }
                public int Y { get; set; }
                public int YItem { get; set; }
            }
        }
    
    
        public class EExamanalysisreport
        {
            /// <summary>
            /// 获取或设置Id
            /// </summary>
            public long Id { get; set; }
    
            /// <summary>
            /// 获取或设置ExaminationID
            /// </summary>
            public long ExaminationID { get; set; }
    
            /// <summary>
            /// 获取或设置PointCode1
            /// </summary>
            public string PointCode1 { get; set; }
    
            /// <summary>
            /// 获取或设置PointCode1Name
            /// </summary>
            public string PointCode1Name { get; set; }
    
            /// <summary>
            /// 获取或设置PointCode2
            /// </summary>
            public string PointCode2 { get; set; }
    
            /// <summary>
            /// 获取或设置PointCode2Name
            /// </summary>
            public string PointCode2Name { get; set; }
    
            /// <summary>
            /// 获取或设置PointCode3
            /// </summary>
            public string PointCode3 { get; set; }
    
            /// <summary>
            /// 获取或设置PointCode3Name
            /// </summary>
            public string PointCode3Name { get; set; }
    
            /// <summary>
            /// 获取或设置PointCode4
            /// </summary>
            public string PointCode4 { get; set; }
    
            /// <summary>
            /// 获取或设置PointCode4Name
            /// </summary>
            public string PointCode4Name { get; set; }
    
            /// <summary>
            /// 获取或设置Score
            /// </summary>
            public int Score { get; set; }
    
            /// <summary>
            /// 获取或设置Percent
            /// </summary>
            public double Percent { get; set; }
    
            /// <summary>
            /// 等级
            /// </summary>
            public int Level { get; set; }
    
        }
    
    }
  • 相关阅读:
    Android推送服务——百度云推送
    关于HierarchyViewer的使用
    Android开发者的演示工具——asm.jar
    重装huson遇到的一些错误及解决
    对比语法错误、语义错误以及运行时错误
    对比常量存储与堆栈
    php下载文件夹目录下的文件
    B/S(WEB)系统中使用Activex插件调用扫描仪实现连续扫描并上传图像(IE文件扫描并自动上传
    上传文件夹
    如何在Web页面里使用高拍仪扫描上传图像
  • 原文地址:https://www.cnblogs.com/rhythmK/p/2783450.html
Copyright © 2011-2022 走看看