【问题标题】:Show Records In Table在表中显示记录
【发布时间】:2013-11-08 05:28:31
【问题描述】:

我有这样的数据库记录。

我想展示这样的表格

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

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

更新 谢谢你们……我从你们(unlimit 和 Joe Enos)那里得到了想法,我做到了。你能再帮我解决一个同样的问题吗?如果Area 1 在同一天有另一个2 hours 记录怎么办。我需要给他们看separately。我将如何在同一天显示记录?

【问题讨论】:

  • 您是从数据库中提取这些数据吗?如果是,请检查pivot。这可能会有所帮助。
  • 仅对 1 个值(此处为小时)使用数据透视表是好的。但我实际上有多个值(2-3 个数据)要显示,遗憾的是,pivot 真的不是要使用的东西。
  • 我认为您将不得不遍历数据并自己创建表。
  • 是的,那是我正在尝试做的......寻找如何去做的想法。 :)

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


【解决方案1】:

你可以试试这样的,我没有检查语法的正确性等等。

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 字典。

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

【讨论】:

  • 您不需要将数组重新分配给字典 (data[record["location"]] = days;)。它是一个数组(引用类型),您从字典中提取并设置其中一个值。您可以完全省略该行,因为它是相同的参考,所以没关系。
  • 谢谢你们...我从你们那里得到了想法,我做到了。你们能再帮我解决一个同样的问题吗?如果`区域 1 在同一天有另一个 12 小时的记录怎么办。我将如何显示当天的记录?
  • 为什么不将小时数添加到现有小时数中?
  • 抱歉不能这样做,我需要分开营业时间。
  • @Ruchan 请参阅我的更新答案以获取解决此新问题的一些提示。
【解决方案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 个项目。

【讨论】:

  • 我会试试这个方法。 TY
猜你喜欢
  • 2016-02-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多