在表中显示记录

时间:2013-10-29 07:06:42

标签: c# html asp.net-mvc html-table

我有这样的数据库记录。

My Records

我想要显示这样的表格   Table to show Like

  

天数最多为32,默认为1到32.我必须插入   记录天数匹配。

因为我尝试的方法太乱了,也没用。 你们能告诉我一些方法吗? 我需要在HTML表格中显示它。 任何语言都是好的......我只需要这个想法。 最好是MVC C#

更新 谢谢你们两个......我从你们两个人那里得到了想法(无限制和Joe Enos),我做到了。你能帮我解决一个同样的问题吗?如果Area 1在同一天有另一条2 hours记录,该怎么办?我需要向他们展示separately。我将如何在同一天显示记录?

enter image description here

2 个答案:

答案 0 :(得分:2)

您希望将数据转换为更有用的数据。一旦你这样做,把它变成行很容易。

为32个插槽中的每个插槽构建一个表示区域的类,该区域包含一组值。在读取数据时,请在数组中填充适当的值,例如:

class Area {
    public Area() { Values = new int[32]; }
    public int[] Values { get; set; }
    public int AreaNumber { get; set; }
}

var areas = new List<Area>();
foreach (var record in databaseRecords) {
    var area = // find area from list based on AreaNumber. If not there, add it
    area[record.Day - 1] = record.Hour;
}

现在你已经有了一个区域列表,每个区域都有一个32项阵列。现在,您的HTML表可以使用两级循环构建,首先循环遍历所有区域,然后循环遍历数组中的32个项目。

答案 1 :(得分:2)

您可以尝试这样的事情,我没有检查语法的正确性等。

Dictionary<string,int[]> data = new Dictionary<string,int[]>();

foreach (var record in database)
{
        if (!data.ContainsKey(record["location"]))
        {
            int[] days = new int[32];
            days[record["day"]] = record["hour"];                
            data.Add(record["location"], days);
        }
        else
        {
            int[] days = data[record["location"]];
            days[record["day"]] = record["hour"]; 
            //data[record["location"]] = days;
        }
}

变量data应该以您想要的格式提供数据。然后循环执行此操作并填充html表。

编辑以回应OP的评论

如果每天有多套小时数并且此套装的数量未修复,那么您可以使用类似的内容。

 Dictionary<string,ArrayList> day = new Dictionary<string,ArrayList>();
 Dictionary<string,day> location = new Dictionary<string,day>();

day字典会保存Day 1, Day 2, Day 3, etc...之类的字符,而值ArrayList将保留当天的小时数组。

location字典将保存Area 1, Area 2, etc...之类的键,值将为day字典。

也许这会给你一些关于如何解决这个问题的提示。