Saturday, September 26, 2009

Dataset relations with nested repeaters

his example demonstrate  How to handle master details data with nested repeaters. And also this has maximium optimization.

Optimization tips

Access database only one time and take mutiple dataset. Using this we can reduce access time of database.

Steps1
Create store procedure

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
-- =============================================
-- Author:        Lakmal
-- Create date:
-- Description:   
-- =============================================
ALTER PROCEDURE [theredzone].[LakmalNFC]
    AS
BEGIN   


select ShortTeamName,Category,City,TeamID,Logo,TeamColor,TeamFont,ForumID,Tickets from theredzone.NFLTeam
where Category like 'AFC%' and
(ShortTeamName IN(select Team from theredzone.NFLHeadlines)) ORDER BY NFLTeam.Category, NFLTeam.City, NFLTeam.TeamID


select ShortTeamName,Category,City,TeamID,Logo,TeamColor,TeamFont,ForumID,Tickets from theredzone.NFLTeam
where Category like 'NFC%' and
(ShortTeamName IN(select Team from theredzone.NFLHeadlines)) ORDER BY NFLTeam.Category, NFLTeam.City, NFLTeam.TeamID

select idno,Headline,Link,Team,PDate from theredzone.NFLHeadlines where PDate = (Select Max(PDate) from theredzone.NFLHeadlines)
END

Step2

Create nested repeater
table>
    tr>
           td valign="top">
           div align="center">
            img src="http://www.theredzone.org/images/AFC.gif " height="31px" />
            br />
            span style="font-size: 12pt; font-family:Verdana; color:Red">
            strong>
            AFC
            /strong>
            /span>            
           /div>          
                asp:Repeater ID="rptAFC" runat="server" OnItemDataBound="rptAFC_ItemDataBound">
                ItemTemplate>
                    table width="100%">
                        tr>
                            td bgcolor=%# Eval("TeamColor")%> align="center" >
                            span style="font-size: 12pt; font-family:Verdana; color: %# Eval("TeamFont")%>">strong>%# Eval("ShortTeamName")%>/strong>/span>
                                                     
                            /td>                       
                        /tr>
                        tr>
                            td>
                            ul >
                             asp:Repeater ID="rptAFCLink" runat="server">
                                ItemTemplate>
                                    div>
                                    li>                                                                          
                                        asp:HyperLink ID="HyperLink1" runat="server" Target="_blank" NavigateUrl=%# Eval("Link")%> >span style="font-size: 10pt; font-family:Verdana">%# Eval("Headline")%>/span> /asp:HyperLink>
                                        span style="font-size: 10pt; font-family:Verdana">%# Eval("PDate","{0:MM/dd/yyyy}")%>/span>                                       
                                        br />
                                    /li>
                                    /div>                                                       
                                /ItemTemplate>                           
                            /asp:Repeater>
                            /ul>                           
                            /td>                       
                        /tr>
                        tr>
                            td align="center">
                            br/>
                             asp:HyperLink ID="HyperLink2" runat="server" Target="_blank" NavigateUrl=%# Eval("Tickets")%>>
                            span style="font-size: 8pt; font-family:Verdana">                              
                            Looking For %# Eval("ShortTeamName")%> ' Tickets? Click Here
                            /span>
                            /asp:HyperLink>
                            br />
                            asp:HyperLink ID="HyperLink3" runat="server" Target="_blank" NavigateUrl= %# Eval("ShortTeamName","http://www.theredzone.org/archives/showteam.asp?Team={0}" ) %>>
                            span style="font-size: 8pt; font-family:Verdana">                              
                            Miss a story? Look for it in our %# Eval("ShortTeamName")%> ' News Archives
                            /span>
                            /asp:HyperLink>
                            br />                           
                             asp:HyperLink ID="HyperLink4" runat="server" Target="_blank" NavigateUrl= %# Eval("ForumID","http://forum.theredzone.org/viewforum.php?f={0}" ) %>>
                            span style="font-size: 8pt; font-family:Verdana">                              
                            Talk about it in the %# Eval("ShortTeamName")%> ' Forum
                            /span>
                            /asp:HyperLink>                           
                            br />                           
                            /td>                       
                        /tr>                   
                    /table>               
                /ItemTemplate>               
                /asp:Repeater>          
           /td>
           td valign="top">
            div align="center">
            img src="http://www.theredzone.org/images/NFC.gif " height="31px" />
            br />
            span style="font-size: 12pt; font-family:Verdana; color:DarkBlue">
            strong>
            NFC
            /strong>
            /span>            
           /div>          
                asp:Repeater ID="rptNFC" runat="server" OnItemDataBound="rptNFC_ItemDataBound" >
                ItemTemplate>
                    table width="100%">
                        tr>
                            td bgcolor=%# Eval("TeamColor")%> align="center" >
                            span style="font-size: 12pt; font-family:Verdana; color: %# Eval("TeamFont")%>">strong>%# Eval("ShortTeamName")%>/strong>/span>
                                                     
                            /td>
                       
                        /tr>
                        tr>
                            td>
                             ul >
                             asp:Repeater ID="rptNFCLink" runat="server">
                                ItemTemplate>
                                    div>
                                        li>
                                        asp:HyperLink ID="HyperLink1" runat="server" Target="_blank" NavigateUrl=%# Eval("Link")%> >span style="font-size: 10pt; font-family:Verdana">%# Eval("Headline")%>/span> /asp:HyperLink>
                                        span style="font-size: 10pt; font-family:Verdana">%# Eval("PDate","{0:MM/dd/yyyy}")%>/span>
                                       
                                        br /> /div>
                                        /li>                                        
                                /ItemTemplate>                           
                            /asp:Repeater>
                            /ul>
                            /td>                       
                        /tr>
                        tr>
                            td align="center">
                            br/>
                             asp:HyperLink ID="HyperLink2" runat="server" Target="_blank" NavigateUrl=%# Eval("Tickets")%>>
                            span style="font-size: 8pt; font-family:Verdana">                              
                            Looking For %# Eval("ShortTeamName")%> ' Tickets? Click Here
                            /span>
                            /asp:HyperLink>
                            br />
                            asp:HyperLink ID="HyperLink3" runat="server" Target="_blank" NavigateUrl= %# Eval("ShortTeamName","http://www.theredzone.org/archives/showteam.asp?Team={0}" ) %>>
                            span style="font-size: 8pt; font-family:Verdana">                              
                            Miss a story? Look for it in our %# Eval("ShortTeamName")%> ' News Archives
                            /span>
                            /asp:HyperLink>
                            br />                           
                             asp:HyperLink ID="HyperLink4" runat="server" Target="_blank" NavigateUrl= %# Eval("ForumID","http://forum.theredzone.org/viewforum.php?f={0}" ) %>>
                            span style="font-size: 8pt; font-family:Verdana">                              
                            Talk about it in the %# Eval("ShortTeamName")%> ' Forum
                            /span>
                            /asp:HyperLink>                           
                            br />                           
                            /td>                       
                        /tr>                   
                    /table>               
                /ItemTemplate>               
                /asp:Repeater>          
           /td>
    /tr>
/table>

Step3
Create dataset relationship and provide repeaters datasource
if (!Page.IsPostBack)
                {
                    DataSet ds = new DataSet();
                    ds = DataProvider.Instance().GetTeamLink();
                    ds.Relations.Add(new DataRelation("AFC", ds.Tables[0].Columns["ShortTeamName"], ds.Tables[2].Columns["Team"],false ));
                    ds.Relations.Add(new DataRelation("NFC", ds.Tables[1].Columns["ShortTeamName"], ds.Tables[2].Columns["Team"], false));
                   
                    rptAFC.DataSource = ds.Tables[0];
                    rptAFC.DataBind();
                    rptNFC.DataSource = ds.Tables[1];
                    rptNFC.DataBind();
                }
Step4

Handle itemdatabound event in repeaters

 protected void rptAFC_ItemDataBound(object sender, RepeaterItemEventArgs e)
        {
            if (e.Item.ItemType == ListItemType.Item ||
              e.Item.ItemType == ListItemType.AlternatingItem)
            {
                DataRowView drv = e.Item.DataItem as DataRowView;
                Repeater ChildRep = e.Item.FindControl("rptAFCLink") as Repeater;
                ChildRep.DataSource = drv.CreateChildView("AFC");
                ChildRep.DataBind();
            }
        }
        protected void rptNFC_ItemDataBound(object sender, RepeaterItemEventArgs e)
        {
            if (e.Item.ItemType == ListItemType.Item ||
             e.Item.ItemType == ListItemType.AlternatingItem)
            {
                DataRowView drv = e.Item.DataItem as DataRowView;
                Repeater ChildRep = e.Item.FindControl("rptNFCLink") as Repeater;
                ChildRep.DataSource = drv.CreateChildView("NFC");
                ChildRep.DataBind();
            }
        }

Using this method you dont want access database each drill position. You can work with data in your memory. I asking community to expand this method and let me know