- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
寻求有关我遇到的三重嵌套中继器逻辑问题的帮助。
背景
我正在构建一个时间表系统,用于预订房间和从 SQL Server 数据库中提取数据的资源。
表结构
Table 1 - tblrooms
room_id (INT) PK
room_name (varchar(50))
room_resource (INT)
Table 2 - tblperiods
period_id (INT) PK
period_time_start (DATETIME)
period_time_end (DATETIME)
period_name (nvarchar(50))
Table 3 - tblbookings
booking_id (INT) PK
period_id (INT)
room_id (INT)
booking_status (INT)
booking_date (DATETIME)
booking_subject (nvarchar(50))
<asp:Repeater ID="drPeriods" runat="server" OnItemDataBound="drPeriods_OnItemDataBound">
<HeaderTemplate>
<table class="table table-striped table-bordered table-condensed">
<tr>
<th style="width:16.66%"><asp:Label ID="lblResourceHeader" runat="server" /></th>
</HeaderTemplate>
<ItemTemplate>
<th style="width:16.66%"><asp:Label ID="lblPeriod" runat="server" Text='<%# Eval("period_name") %>' /> - <asp:Label ID="lblPeriodStart" runat="server" Text='<%# Eval("period_time_start") %>' /> to <asp:Label ID="lblPeriodEnd" runat="server" Text='<%# Eval("period_time_end") %>' /></th>
</ItemTemplate>
<FooterTemplate>
</tr>
<asp:Repeater ID="drResources" runat="server" OnItemDataBound="drResources_OnItemDataBound">
<ItemTemplate>
<tr>
<td height="50">
<asp:Label ID="lblResource" runat="server" Text='<%# Eval("room_name") %>' />
<br /><asp:Label ID="lblResourceDetails" runat="server" />
</td>
<asp:Label ID="lblFreeBooking" runat="server" Visible="false" />
<asp:Repeater ID="drBookings" runat="server" OnItemDataBound="drBookings_OnItemDataBound">
<ItemTemplate>
<td height="50">
<asp:Label ID="lblCellContent" runat="server" />
</td>
</ItemTemplate>
</asp:Repeater>
</tr>
</ItemTemplate>
</asp:Repeater>
</table>
</FooterTemplate>
</asp:Repeater>
Namespace Staff
Public Class Rb
Inherits System.Web.UI.Page
Private _periodId As Integer
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Not IsPostBack Then
txtDate.Text = Request.QueryString("d")
'check for weekend dates, show message if it is.
Dim iWeekday As Integer = Weekday(Request.QueryString("d"))
If iWeekday = 1 Or iWeekday = 7 Then
lblMsg.Text = "<div class='alert alert-info alert-block'><h4 class='alert-heading'><i class='icon-warning-sign'></i> It's the weekend.</h4><p>The date you have choosen is a weekend, resources cannot be booked on weekends.</p></div>"
lblMsg.Visible = True
drPeriods.Visible = False
Else
Dim objConnection As SqlConnection
Dim objCommand As SqlCommand
Dim objDataReader As SqlDataReader
objConnection = New SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings("OPSDConnectionString").ConnectionString)
'Get Periods
objCommand = New SqlCommand("SELECT period_id, CONVERT(char(5), period_time_start, 108) AS period_time_start, CONVERT(char(5), period_time_end, 108) AS period_time_end, period_name FROM tblrb_periods", objConnection)
Try
objConnection.Open()
objDataReader = objCommand.ExecuteReader()
If objDataReader.HasRows Then
drPeriods.DataSource = objDataReader
drPeriods.DataBind()
objDataReader.Close()
Else
drPeriods.Visible = False
lblMsg.Text = "<div class='alert alert-error alert-block'><h4 class='alert-heading'><i class='icon-warning-sign'></i> Error!</h4><p>Periods have not yet been setup, please set these up by selecting the periods tab above, if you cannot see this tab please ask the helpdesk administrator to set these up for you.</p></div>"
lblMsg.Visible = True
objDataReader.Close()
End If
Catch ex As Exception
'Inform of the error
Elmah.ErrorSignal.FromCurrentContext().Raise(ex)
Finally
objCommand.Dispose()
objConnection.Close()
objConnection.Dispose()
End Try
End If
End If
End Sub
Protected Sub drPeriods_OnItemDataBound(sender As Object, e As System.Web.UI.WebControls.RepeaterItemEventArgs) Handles drPeriods.ItemDataBound
If e.Item.ItemType = ListItemType.Item Or e.Item.ItemType = ListItemType.AlternatingItem Then
_periodId = e.Item.DataItem("period_id")
End If
If e.Item.ItemType = ListItemType.Header Then
Dim lblResourceHeader As Label = drPeriods.Controls(0).Controls(0).FindControl("lblResourceHeader")
Dim layoutView As Integer = Request.QueryString("v")
Select Case layoutView
Case 1 ' Rooms
lblResourceHeader.Text = "Rooms"
Case 2 ' Resources
lblResourceHeader.Text = "Resources"
Case 3 ' Both
lblResourceHeader.Text = "Rooms & Resources"
Case Else
lblResourceHeader.Text = "Rooms & Resources"
End Select
End If
If e.Item.ItemType = ListItemType.Footer Then
Dim objConnection As SqlConnection
Dim objCommand As SqlCommand
Dim objDataReader As SqlDataReader
'find repeater in the footer of drPeriods (repeater)
Dim drResources As Repeater = drPeriods.Controls(drPeriods.Controls.Count - 1).Controls(0).FindControl("drResources")
Dim layoutView As Integer = Request.QueryString("v")
'Get Rooms
objConnection = New SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings("OPSDConnectionString").ConnectionString)
Select Case layoutView
Case 1 ' Rooms
objCommand = New SqlCommand("SELECT * FROM tblrb_rooms WHERE room_resource = 1 ORDER BY room_name", objConnection)
Case 2 ' Resources
objCommand = New SqlCommand("SELECT * FROM tblrb_rooms WHERE room_resource = 2 ORDER BY room_name", objConnection)
Case 3 ' Both
objCommand = New SqlCommand("SELECT * FROM tblrb_rooms ORDER BY room_name", objConnection)
Case Else
objCommand = New SqlCommand("SELECT * FROM tblrb_rooms ORDER BY room_name", objConnection)
End Select
Try
objConnection.Open()
objDataReader = objCommand.ExecuteReader()
drResources.DataSource = objDataReader
drResources.DataBind()
objDataReader.Close()
Catch ex As Exception
'Inform of the error
Elmah.ErrorSignal.FromCurrentContext().Raise(ex)
Finally
objCommand.Dispose()
objConnection.Close()
objConnection.Dispose()
End Try
End If
End Sub
Protected Sub drResources_OnItemDataBound(sender As Object, e As System.Web.UI.WebControls.RepeaterItemEventArgs)
If e.Item.ItemType = ListItemType.Item Or e.Item.ItemType = ListItemType.AlternatingItem Then
Dim lblResourceDetails As Label = e.Item.FindControl("lblResourceDetails")
If e.Item.DataItem("room_resource") <> 2 Then
lblResourceDetails.Text = "[ <a href='#' class='withajaxpopover' title='Room Details' data-load='resourceManagerViewDetails.aspx?id=" & e.Item.DataItem("room_id") & "'>View Room Details</a> ]"
End If
Dim objConnection As SqlConnection
Dim objCommand As SqlCommand
Dim objDataReader As SqlDataReader
Dim drBookings As Repeater = e.Item.FindControl("drBookings")
Dim lblFreeBooking As Label = e.Item.FindControl("lblFreeBooking")
'Get Bookings
objConnection = New SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings("OPSDConnectionString").ConnectionString)
objCommand = New SqlCommand("SELECT tblrb_bookings.booking_status, tblrb_bookings.booking_subject, tblrb_bookings.booking_notes FROM tblrb_bookings WHERE (tblrb_bookings.room_id = @room_id) AND (tblrb_bookings.booking_date = @booking_date) AND (tblrb_bookings.period_id = @period_id)", objConnection)
objCommand.Parameters.Add("@room_id", SqlDbType.Int, 10).Value = e.Item.DataItem("room_id")
objCommand.Parameters.Add("@period_id", SqlDbType.Int, 10).Value = _periodId
objCommand.Parameters.Add("@booking_date", SqlDbType.DateTime).Value = Request.QueryString("d")
Try
objConnection.Open()
objDataReader = objCommand.ExecuteReader()
If objDataReader.HasRows Then
drBookings.DataSource = objDataReader
drBookings.DataBind()
objDataReader.Close()
Else
'free period
lblFreeBooking.Text = "<td height='50'><div class='alert alert-block alert-success'><h4 class='alert-heading'><i class='icon-ok'></i> Free.</h4><p><a href='#'>Click here to book this resource.</a></p></div></td>"
lblFreeBooking.Visible = True
End If
Catch ex As Exception
'Inform of the error
Elmah.ErrorSignal.FromCurrentContext().Raise(ex)
Finally
objCommand.Dispose()
objConnection.Close()
objConnection.Dispose()
End Try
End If
End Sub
Protected Sub drBookings_OnItemDataBound(sender As Object, e As System.Web.UI.WebControls.RepeaterItemEventArgs)
Dim lblCellContent As Label = e.Item.FindControl("lblCellContent")
Select Case e.Item.DataItem("booking_status")
Case 1
'timetabled
lblCellContent.Text = "<div class='alert alert-block alert-error'><h4 class='alert-heading'><i class='icon-warning-sign'></i> Timetabled.</h4><p>" & e.Item.DataItem("booking_subject") & "</p></div>"
Case 2
'user booked
lblCellContent.Text = "<div class='alert alert-block'><h4 class='alert-heading'><i class='icon-warning-sign'></i> Booked.</h4><p>" & e.Item.DataItem("booking_subject") & ".</p></div>"
End Select
End Sub
Protected Sub btnDateSelect_Click(sender As Object, e As System.EventArgs) Handles btnDateSelect.Click
'quick reload of page
Response.Redirect("resourceManager.aspx?v=" & Request.QueryString("v") & "&d=" & txtDate.Text)
End Sub
End Class End Namespace
最佳答案
首先,我认为您进行控制的方式过于复杂。如果您要使用 LINQ 或 EF 进行数据库访问,则可以使用 2 个嵌套中继器来执行此操作,并且不需要复杂的代码。但是,您可以首先将查询简化为以下内容:
SELECT *
FROM tblperiods p
CROSS JOIN tblrooms r
LEFT JOIN tblbookings b ON p.period_id = b.period_id AND r.room_id = b.room_id AND b.booking_date = '2012-08-01'
DataTable dt = new DataTable();
dt.Fill(objDataReader); // Loads all data into the DataTable
var groupedRows = dt.Rows.Cast<DataRow>().GroupBy(row => new { RoomId = (int) row["room_id"], RoomName = (string) row["room_name"] });
rpRows.DataSource = groupedRows;
rpRows.DataBind();
<table>
<thead><tr><th>Rooms & Resources</th>
<asp:Repeater runat="server" id="rpHeader">
<ItemTemplate>
<td><%# Eval("period_name") %></td>
</ItemTemplate>
</asp:Repeater>
</tr></thead>
<asp:Repeater runat="server" id="rpRows">
<ItemTemplate>
<tr>
<th><!-- Put room header stuff here --><%# Eval("Key.RoomName") %></th>
<asp:Repeater runat="server" DataSource="<%# Container.DataItem %>">
<ItemTemplate>
<td>
<!-- Per-booking info -->
<asp:Label runat="server" Visible='<%# Eval("booking_id") == DBNull.Value %>'>Not Booked</asp:label>
<asp:Label runat="server" Visible='<%# Eval("booking_id") != DBNull.Value %>'>Booked!</asp:label>
</td>
</ItemTemplate>
</asp:Repeater>
</tr>
</ItemTemplate>
</asp:Repeater>
</table>
select * from tbl_periods
关于ASP.Net 嵌套中继器逻辑 hell ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11815367/
嗨,我对 visualforce 中继器控件感到头疼:
我的页面类型为日期字段“日期”,但我似乎无法让中继器按日期显示项目。 我的计划是有一个包含日期、主题和作者的表,并使用 jquery 插件按日期排序。 最佳答案 编辑:如果您将 DocumentTyp
我在这里尝试做的是编写一个函数repeat,它接受一个字符串和一个正整数 n 并返回该字符串重复 n 次。因此 repeat("fho", 3) 将返回字符串“hohoho”。但是,下面的测试程序运行
是否可以始终显示 ASP.NET 转发器的页眉和页脚,无论它是否包含数据? 我很清楚这个问题以前曾被想要显示某种信息性消息的人问过,但在我的情况下,这一切都是为了为客户提供填充相同 Repeater
我需要为我正在从事的 enyo 项目制作一个数据表,该项目最终将显示 Ajax 调用的结果。 This (公然从 ryanjduffy here 窃取)似乎是一个很好的起点,但是当我尝试从按钮事件(而
我们目前使用转发器在每行上显示输入字段、下拉列表、复选框和日历项。所需的功能是允许用户添加最多 10 个(这可能会通过 Web 配置更改)项目(每行)。 在转发器中列出这些是否合适,或者我是否以错误的
我希望一个 asp.net 转发器控件在它指向的实际数据被更新时自行更新。我不是在寻找发生按钮单击并且每次中继器(位于更新面板内)都绑定(bind)到数据源的解决方案。 例如:在我的页面加载中,我有这
我正在尝试用中继器复制以下内容: 页眉是固定的,页脚也由从数据源返回的值固定。我所做的是将报头从中继器中取出。并添加了滚动条的代码 由于页脚需要修复,我不确定如何使该行不滚动。 所以我创建了第二个中
我有一个函数,可以将保存我想要显示的数据的DIV的值写入cooke,cookie代码有效,切换代码有效,但是当页面刷新时,我可以获得中继器列表元素,迭代它们,确定该部分是否应该隐藏,但我不能使用可见,
我正在使用 ASP.NET Repeater显示 的内容.它看起来像这样:
我有一个中继器,如下所示, 现在,我想将 LinkButton 的 Text 值与以下内容绑定(bind
Wicket 有很多 AbstractRepeaters 的实现:ListView、DataView、GridView、Loop、PropertyListView 等。 就我个人而言,我发现很难确定哪
如果写了如下代码: Repeater { model: 10; delegate: Rectangle { width: 200; height: 20; color: "whit
这是我的中继器: " /> 我喂中继器 来自数据库的 4 行数据,前三行 是必要的,但最后一个不应该存在。我该怎么做? 最佳答
有一个 routerLink 可以为 config 提供的导航提供必要的路由。 它工作正常,如果它像下面那样完成: Home About
我一直在努力创建自己的带有文本和链接输入字段的自定义 Gutenberg 中继器 block 。我只见过像 this 这样的 ES5 示例和 this .近 8 个小时以来,我一直致力于创建自己的这些
我有一个转发器,可以直接列出来自与我的 Outlook 绑定(bind)的应用程序的电子邮件。我需要中继器列出文件夹名称,然后列出该文件夹中的每条消息。然而,我得到的是该文件夹中每条消息的文件夹名称都
我有一个绑定(bind)服务器端的中继器控件。它重复一系列的 div,并且这样做没有问题。我有一些按钮用于对中继器进行排序(最新的、排名最高的、随机的),这按其应有的方式工作。 我想通过使用 Ajax
我们目前在现场有设备运行 UltraVNC 作为 VNC 服务器。因为我们的现场设备具有不可路由的 IP 地址,所以我们选择使用 UltraVNC 中继器服务器。 VNC 在设备上启动,我们在连接到中
.keyup 和 .change 仅在第一个输入中触发,但在我添加新项目后不会触发。添加新字段时有没有办法触发 .keyup 和 .change ? http://jsfiddle.net/q8pco
我是一名优秀的程序员,十分优秀!