Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 8357113
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: June 9, 20262026-06-09T10:22:55+00:00 2026-06-09T10:22:55+00:00

Looking for help with a tripple nested repeater logic issue I have. Background I

  • 0

Looking for help with a tripple nested repeater logic issue I have.

Background
I am building a timetable system for booking rooms and resources pulling data from a SQL Server database.

Table Structure

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))

Problem
I have for the most part got the repeaters pulling the data out as required however only the first column is ever populated and I am really struggling to work out how to pull the booking data out and build the timetable as required. (please see attached screenshot of what I have already got working)

ASPX Page Code

<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>

Code Behind

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>&nbsp;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>&nbsp;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 &amp; Resources"
                Case Else
                    lblResourceHeader.Text = "Rooms &amp; 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>&nbsp;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>&nbsp;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>&nbsp;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

Can anyone help with how I can get the required layout so that when the timetable is built the rooms and periods contain the correct booking data for each cell in thier corresponding columns.

Thanks in advance for any pointers you can provide, having spent 3 days on this I could do with a fresh pair of eyes 🙂

Regards,

Ozzie

Repeater Data Issue

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-06-09T10:22:57+00:00Added an answer on June 9, 2026 at 10:22 am

    First of all, I think you are over-complicating the way you’re doing the control. If you were to use LINQ or EF for your database access, you could do this with 2 nested repeaters and no complicated code behind. However, you can start by simplifying the query down to something like this:

    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'
    

    This will get you enough information to produce the whole output in a single query for a given day. If you don’t want to use EF or LINQ-to-SQL, you can still do a bit of LINQ magic to separate this out further by room, which you can then use for your databinding (forgive the C#, VB.NET is a bit rusty!):

    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();
    

    Then you would have Repeaters like so:

    <table>
    <thead><tr><th>Rooms &amp; 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>
    

    I’ve not given the code for databinding the header row, but this is simply a select * from tbl_periods

    Note that none of this code was tested, and probably needs a little adjusting on the data binding.

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

I am developing in rails and have some programming background. I'm looking for help
LINQ gurus, I am looking for help to write a query... I have a
looking for some help with images referenced within the stylesheet. I have no problems
I have a file with thousands of lines. I'm looking for help to modify
I have been looking for help online on how to design my php classes
I'm looking for help to get the UUID of my Android phone. I have
I am looking for help; Situation is that I have 2 databases which should
i am looking for help on an up down voting system. at the moment
This might be too opinionated a question, but looking for help! I have been
Probably a common issue, but I'm looking for help in both fixing and understanding

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.