Link to home
Start Free TrialLog in
Avatar of jmar_click
jmar_click

asked on

Nested repeater inside another nester repeater

Hi Experts,

I am trying to build a comments report wich is 3 levels deep. The top level is the 'Department' next level is the 'department's comments' then finally, the 'Products' that the comments was assigned.

For this I have a repeater that brings up a list of departments for a given date range that have comments, then I have a nested repeater to show the comments for each department. Now I need a 3rd repeater that will show the products for the comments since the customer service guys can select products and those get saved in a separate table that relates to the comment by comment and product ID.

For my first nested repeater I have this:

'Get the list of comments for the given department
    Protected Sub rpt_report_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.RepeaterItemEventArgs) Handles rpt_report.ItemDataBound

        'Get variables to send to stored proc
        Dim startDate As String = Request.Form("txt_dateStart")
        Dim endDate As String = Request.Form("txt_dateEnd")
        Dim depId As Integer = e.Item.DataItem("depId")

        'Attach datasource to repeater
        Dim conn As New SqlConnection(System.Configuration.ConfigurationManager.AppSettings("conn"))
        conn.Open()

        'Call the stored procedure we need
        Dim sql As String = "exec sp_rpt_departments_10" & "'" & startDate & "'," & "'" & endDate & "'," & depId

        Dim ds As New DataSet
        Dim da As SqlDataAdapter
        da = New SqlDataAdapter(sql, conn)
        da.Fill(ds)

        Dim nestedRpt As New Repeater
        nestedRpt = e.Item.FindControl("rpt_comments")

        'Find nested repeater
        If ds.Tables(0).Rows.Count > 0 Then
            'Bind datasource
            nestedRpt.DataSource = ds.Tables(0)
            nestedRpt.DataBind()
        Else
            nestedRpt.Visible = False
        End If

        conn.Close()

    End Sub

That works just fine, my question is, how do I access the ItemDataBound event of the nested repeater so that I can give the 3rd repeater a datasource based on the row id from the second repeater.

Thanks in advance, I really need this one.

-Javier
ASKER CERTIFIED SOLUTION
Avatar of kraffay
kraffay

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Avatar of jmar_click
jmar_click

ASKER

I have the first nested repeater working.

heres a breakdown of the way the repeaters are set up

master repeater = rpt_report
->first nested repeater = rpt_comments (nested inside rpt_report)
--> --> 2nd nested repeater = rpt_departments (nested inside rpt_comments)

nestedRpt = e.Item.FindControl("rpt_comments") <-- works fine to find the rpt_comments nested repeater. But maybe there is a better way.

Where do I add Protected WithEvents nestedRpt as Repeater, at the top of the class?
Yes, and the declaration at the top of the class
That didn't work, but I think you gave me a lead to something that might work. I was getting an error:
 Compiler Error Message: BC30506: Handles clause requires a WithEvents variable defined in the containing type or one of its base types.

But the Protected WithEvents rpt_comments As Repeater    fixed that, i may be able to directly use the rpt_comments_ItemDataBound event for the nested repeater now. Let me try it
It didn't work. I don't get an error, but the ItemDataBound event for the nested repeater never fires.

Can you give me a bit more explanation on your suggestion please?