我希望有可能解释,所以这里有!在C#和ASP.NET中,我想创建一个表格,向我显示哪些任务在哪些日期以及在什么时间表示2小时跨度。为了说明这一点,我将尝试在下面绘制它:
Date Role 1 Role 2 Role n…
01-11-2013 00:00
01-11-2013 02:00
01-11-2013 04:00
01-11-2013 06:00
01-11-2013 08:00 Task 1
01-11-2013 10:00 Task 1
01-11-2013 12:00 Task 1
01-11-2013 14:00 Task 1
01-11-2013 16:00 Task 2
01-11-2013 18:00 Task 2
01-11-2013 20:00 Task 2
01-11-2013 22:00
02-11-2013 00:00
02-11-2013 02:00
02-11-2013 04:00
02-11-2013 06:00
02-11-2013 08:00 Task 3
02-11-2013 10:00 Task 3
02-11-2013 12:00 Task 3
02-11-2013 14:00 Task 3
02-11-2013 16:00 Task 3
02-11-2013 18:00 Task 3
02-11-2013 20:00
02-11-2013 22:00
03-11-2013 00:00
03-11-2013 02:00
03-11-2013 04:00
...
因此我将在SQL Server数据库中拥有数据,但我不确定的是如何创建表。我正在考虑使用ASP.NET Repeater,也许是嵌套的,也许是2个数据源,其中1是日期和时间,另一个是匹配的地方?至少对我来说,“硬件”是什么,是如何在没有匹配的情况下创建行?
任何帮助都表示赞赏,因为我不再那么强大了! :)
答案 0 :(得分:0)
你应该更喜欢转发器到其他更复杂的ASP.net控件,除非你需要列表视图或gridview。
创建无匹配的行 - 从日期/时间列表开始,并将转发器绑定到此。根据事物的外观,您需要角色标题的转发器,以及表格中每列的转发器。即:
<tr>
<td>Date</td>
<asp:Repeater runat="server" id="rptHeadings">
<td><%# Eval("Role") %>
</asp:Repeater>
</tr>
<asp:Repeater runat="server" id="rptDateTimes" OnItemDataBound="rptDateTimes_DataBound">
<tr>
<td><%# Eval("Date") %>
<asp:Repeater runat="server" id="rptTasks" OnItemDataBound="rptTasks_DataBound">
<td>
<asp:Literal runat="server" id="litTask" />
</td>
</asp:Repeater>
</tr>
</asp:Repeater>
然后在你的代码隐藏中 - 处理rptDateTimes_DataBound事件以绑定你的rptTasks转发器,并处理rptTasks_DataBound事件以填充litTask的Text属性 - 如果有任务则设置文本,否则将其留空。例如:
protected void rptTasks_DataBound(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType != ListItemType.Item && e.Item.ItemType != ListItemType.AlternatingItem) return;
if (/* logic to determine if task is done At given date by given role */)
{
litTask.Name = SomeTask.Name;
}
}
答案 1 :(得分:0)
例如:
SQL表:
角色|来自|直到
首先,通过分组获取所有行数并将它们放入角色列表
您已经拥有了您的专栏(datetime + n * Role)
为日期时间和角色创建数据表。
datatable dt = new datatable();
dt.Columns.add("DateTime", typeof(datetime));
foreach(var j in roles)
{
dt.columns.add(j);
}
然后选择最小和最大日期(或者只选择今天的所有日期),比如说你想要每隔一小时或半小时,为这个数量创建一个循环。
for(int i = 0; i < 24; i++) //this is the hourly notation
{
datarow dr = new datarow();
dr["Datetime"] = new datetime(year, month, day, i,0,0)
for(int j = 0; j < roles.count; i++) // this is the role
{
// here comes the selection logic for that row, NULL if nothing else is available
dr[roles[j]] = something;
}
dt.rows.add(dr);
}
//将某些内容更改为逻辑以获取数据,double for循环将在每列中创建一个包含数据的行。如果没有数据可用,则简单地给出NULL。
我希望这种逻辑可以让你更进一步