Click here to Skip to main content
Licence CPOL
First Posted 18 Feb 2008
Views 18,227
Bookmarked 38 times

Cool DVD Movie Catalog

By | 18 Feb 2008 | Article
Developing a catalog of DVDs
 
Part of The SQL Zone sponsored by
See Also

Introduction

This article is about how to implement a catalog of DVDs with Linq, SQL Server 2005.

Background

In my website www.cinextreno.com there is a version made. NET 1.1 makes about 4 years, and decided to create a new version.

Using the code

The catalog consists of three tables dvd_genero (categories), dvd_video (catalog), dvd_negocio (bussines)

BLL:

using System;
using System.Linq;
using System.Collections.Generic;
using System.Text;
using System.Data.Linq;

public class cDVDdan
{
    // Connection to the database
    private DVDdanDataContext db = new DVDdanDataContext();

    // Get the categories of DVDs  
    
    public IEnumerable<dvd_genero> GetGenerosByPage(int negocio)
    {
        var qry =
            from gen in db.dvd_generos
            where gen.gen_negocio == negocio
            select gen;          

        return qry;
    }
    //Get the DVDs which are premieres 
    public IEnumerable<dvd_video> GetVideosEstrenosByPage(int negocio)
    {
        var qry =
            from c in db.dvd_videos
            where c.video_negocio == negocio && c.video_estreno == 1
            orderby c.video_id descending
            select c;

        return qry.Skip(0).Take(20);
    }
    // Page listing DVDs
    public IEnumerable<dvd_video> GetVideosByPage(int startRowIndex, int pageSize,
 string sortParam,
           string searchText, int genero, int negocio)
    {
        var qry = from c in db.dvd_videos
                  where c.video_negocio == negocio
                  select c;

        if (genero != 0)
            qry = qry.Where(c => c.video_gen_codigo == genero);           
       
        // Search
        if (genero == 0 && !string.IsNullOrEmpty(searchText))
            qry = qry.Where(c => c.video_titulo.Contains(searchText) || 
                c.video_tituloriginal.Contains(searchText) ||
                c.video_director.Contains(searchText) ||
                c.video_actores.Contains(searchText) ||
                c.video_codigo.Contains(searchText));

        return qry.OrderByDescending(c => c.video_id).Skip(startRowIndex).Take(pageSize);
    }
        // Count Page listing DVDs
    public int GetVideosCount(string searchText, int genero, int negocio)
    {
        var qry = from c in db.dvd_videos
                where c.video_negocio == negocio
                select c;
    // Categories
        if(genero != 0)
            qry = qry.Where(c => c.video_gen_codigo == genero);  

        // Buscar            
        if (genero == 0 && !string.IsNullOrEmpty(searchText))
            return qry.Where(c => c.video_titulo.Contains(searchText) || 
                c.video_tituloriginal.Contains(searchText) ||
                c.video_director.Contains(searchText) ||
                c.video_actores.Contains(searchText) ||
                c.video_codigo.Contains(searchText)).Count();

        return qry.Count();
    }

}
 

Categories : Generos.ascx

<asp:ListView ID="lvGeneros" runat="server" 
    DataSourceID="ObjectDataSourceGenero">    
    <LayoutTemplate>
        <ul ID="itemPlaceholderContainer" runat="server" style="">
            <li ID="itemPlaceholder" runat="server" />
            </ul>
            <div style="">
            </div>
        </LayoutTemplate>                
        <EmptyDataTemplate>
            No hay datos para retornar.
        </EmptyDataTemplate>        
        <ItemTemplate>
            <li style="">             
                <asp:HyperLink ID="HyperLink1" runat="server" 
Text='<%# Eval("gen_nombre") %>' 
                    NavigateUrl = '<%# string.Format("~/Catalogo/Default.aspx?gen={0}", 
Eval("gen_codigo")) %>' />              
            </li>
        </ItemTemplate>
        <ItemSeparatorTemplate>           
        </ItemSeparatorTemplate>
</asp:ListView>
<asp:ObjectDataSource ID="ObjectDataSourceGenero" runat="server" 
    SelectMethod="GetGenerosByPage" TypeName="cDVDdan">
    <SelectParameters>
        <asp:SessionParameter DefaultValue="1" Name="negocio" SessionField="negocio" 
            Type="Int32" />
    </SelectParameters>
</asp:ObjectDataSource>

Premieres: Estrenos.ascx

<asp:DataList ID="DataListEstrenos" runat="server" 
    DataSourceID="ObjectDataSourceEstrenos" RepeatColumns="5">
    <ItemTemplate>
        <asp:Image ID="Image1" runat="server" 
            ImageUrl='<%# Eval("video_imagen", 
"http://www.wcomercio.com/dvd/imagessmall/{0}.jpg") %>' />
    </ItemTemplate>
</asp:DataList>
<asp:ObjectDataSource ID="ObjectDataSourceEstrenos" runat="server" 
SelectMethod="GetVideosEstrenosByPage"
    TypeName="cDVDdan">
    <SelectParameters>
        <asp:SessionParameter DefaultValue="1" Name="negocio" 
SessionField="negocio" Type="Int32" />
    </SelectParameters>
</asp:ObjectDataSource> 

Listing of DVDs: Catalogo.ascx

<asp:DataList ID="DataListVideos" runat="server" RepeatColumns="5">
    <ItemTemplate>
        <asp:Image ID="Image1" runat="server" ImageUrl='<%# Eval("video_imagen", 
"http://www.wcomercio.com/dvd/imagessmall/{0}.jpg") %>' />
    </ItemTemplate>
</asp:DataList>
<table width="100%" align="right">
    <tr>
        <td width="76%" align="left">
            <asp:Label ID="lblStatus" runat="server" 
Font-Name="verdana" Font-Size="10pt" />
        </td>
        <td width="6%">
            <a href="datalistpaging.aspx#this" id="hrefFirst" 
onserverclick="ShowFirst" runat="server">
                <<<</a>
        </td>
        <td width="6%">
            <a href="datalistpaging.aspx#this" id="hrefPrevious" 
onserverclick="ShowPrevious"
                runat="server"><<</a>
        </td>
        <td width="6%">
            <a href="datalistpaging.aspx#this" id="hrefNext" 
onserverclick="ShowNext" runat="server">
                ></a>
        </td>
        <td width="6%">
            <a href="datalistpaging.aspx#this" id="hrefLast" 
onserverclick="ShowLast" runat="server">
                >></a>
        </td>
    </tr>
</table>
<asp:Label ID="intCurrIndex" Visible="False" runat="server" />
<asp:Label ID="intPageSize" Visible="False" runat="server" />
<asp:Label ID="intRecordCount" Visible="False" runat="server" />

Listing of DVDs: Catalogo.cs

The pagination of a DataList
public partial class Controles_Catalogo : System.Web.UI.UserControl
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if(!Page.IsPostBack) {
            intPageSize.Text = "10";
            intCurrIndex.Text = "0";
            DataBindDataList();
        }
    }

    public void ShowFirst(object s, EventArgs e) {
        intCurrIndex.Text = "0";
        DataBindDataList();
    }

    public void ShowPrevious(object s, EventArgs e)
    {
        intCurrIndex.Text = (Convert.ToInt32(intCurrIndex.Text) - 
Convert.ToInt32(intPageSize.Text)).ToString();
        if(Convert.ToInt32(intCurrIndex.Text) < 0)
            intCurrIndex.Text = "0";

        DataBindDataList();
    }

    public void ShowNext(object s, EventArgs e)
    {
        if(Convert.ToInt32(intCurrIndex.Text) + 1 < Convert.ToInt32(intRecordCount.Text))
            intCurrIndex.Text = (Convert.ToInt32(intCurrIndex.Text) + 
Convert.ToInt32(intPageSize.Text)).ToString();

        DataBindDataList();
    }

    public void ShowLast(object s, EventArgs e)
    {       
        int tmpInt = Convert.ToInt32(intRecordCount.Text) % 
Convert.ToInt32(intPageSize.Text);
        if(tmpInt > 0)
            intCurrIndex.Text = (Convert.ToInt32(intRecordCount.Text) - 
tmpInt).ToString();
        else
            intCurrIndex.Text = (Convert.ToInt32(intRecordCount.Text) - 
Convert.ToInt32(intPageSize.Text)).ToString();

        DataBindDataList();
    }   

    private void DataBindDataList()
    {
        string txt = Request.QueryString["txt"];
        string genero = Request.QueryString["gen"] ?? "0";

        cDVDdan c = new cDVDdan();
        intRecordCount.Text = c.GetVideosCount(txt, Convert.ToInt32(genero), 1).ToString();
        DataListVideos.DataSource = c.GetVideosByPage(Convert.ToInt32(intCurrIndex.Text),
            Convert.ToInt32(intPageSize.Text), "", txt, Convert.ToInt32(genero), 1);
        DataListVideos.DataBind();

        PrintStatus();
    }

     private void PrintStatus() {
        lblStatus.Text = "Total:<b>" + intRecordCount.Text;
        lblStatus.Text += "</b> - Pagina:<b> ";
        lblStatus.Text += (Convert.ToInt32(Convert.ToInt32(intCurrIndex.Text) / 
Convert.ToInt32(intPageSize.Text) + 1)).ToString();
        lblStatus.Text += "</b> de <b>";

        if ((Convert.ToInt32(intRecordCount.Text) % 
Convert.ToInt32(intPageSize.Text)) > 0)
            lblStatus.Text += (Convert.ToInt32(Convert.ToInt32(intRecordCount.Text) / 
Convert.ToInt32(intPageSize.Text) + 1)).ToString();
        else
            lblStatus.Text += (Convert.ToInt32(intRecordCount.Text) / 
Convert.ToInt32(intPageSize.Text)).ToString();

        lblStatus.Text += "</b>";
     }
}

History

We have a master page where users unite controls. DVDdan.master.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

About the Author

Dannover Arroyave M.

Software Developer
Integracion Gerencial S.A.
Colombia Colombia

Member



Sign Up to vote   Poor Excellent
Add a reason or comment to your vote: x
Votes of 3 or less require a comment

Comments and Discussions

 
You must Sign In to use this message board. (secure sign-in)
 
Search this forum  
 FAQ
    Noise  Layout  Per page   
  Refresh
GeneralMy vote of 1 Pinmembernicolas gordillo6:23 30 Dec '10  
GeneralQue articulo tan machurro Pinmembersirgerk9:28 28 Nov '08  

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

Permalink | Advertise | Privacy | Mobile
Web04 | 2.5.120517.1 | Last Updated 18 Feb 2008
Article Copyright 2008 by Dannover Arroyave M.
Everything else Copyright © CodeProject, 1999-2012
Terms of Use
Layout: fixed | fluid