Microsoft KB Archive/910309

From BetaArchive Wiki

Article ID: 910309

Article Last Modified on 3/16/2007



APPLIES TO

  • Microsoft Commerce Server 2002 Standard Edition
  • Microsoft Visual Basic .NET 2003 Standard Edition
  • Microsoft Visual Basic .NET 2002 Standard Edition




INTRODUCTION

This article contains the source code for the Microsoft Commerce Server 2002 Software Development Kit (SDK) Microsoft ASP.NET-based Catalog Sitelet in Microsoft Visual Basic .NET.

Note The source code for the ASP.NET-based Catalog Sitelet was previously only available in Microsoft Visual C#.

MORE INFORMATION

The following code is the source code for the ASP.NET-based Catalog Sitelet in Visual Basic .NET.

Browse.aspx

<%@ Page Description="Browse Page" CodePage="65001" Debug="true"%>
<%@Import Namespace="System.Data"%>
<%@Import Namespace="System.Globalization"%>
<%@Import Namespace="System.Resources"%>
<%@Import Namespace="System.Threading"%>
<%@Import Namespace="catalogsitelet"%>
<%@Import Namespace="Microsoft.CommerceServer.Runtime"%>
<%@Import Namespace="Microsoft.CommerceServer.Runtime.Catalog"%>
<%@Import Namespace="Microsoft.CommerceServer.Runtime.Configuration"%>
<%@Import Namespace="Microsoft.CommerceServer.Runtime.Diagnostics"%>
<%@Register TagPrefix="Localized" TagName="Footer" src="footer.ascx" %>
<!---------------------------------------------------------------------
--  File:      browse.aspx
--
--  Summary:   Page used to browse Catalog
--
--  Sample:    Catalog Sitelet
--
-----------------------------------------------------------------------
--  This file is part of the Microsoft Commerce Server 2002 SDK
--
--  Copyright (C) 2002 Microsoft Corporation.  All rights reserved.
--
-- This source code is intended only as a supplement to Microsoft
-- Commerce Server 2002 and/or on-line documentation. See these other
-- materials for detailed information regarding Microsoft code samples.
--
-- THIS CODE AND INFORMATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
-- KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-- IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
-- PARTICULAR PURPOSE.
---------------------------------------------------------------------->
<HTML>
    <HEAD>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
        <meta name="GENERATOR" Content="Microsoft Visual Studio 7.0">
        <meta name="CODE_LANGUAGE" Content="VB">
        <meta name="vs_defaultClientScript" content="JavaScript (ECMAScript)">
        <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
        <script runat="Server" Language="VB">
            Private rm As ResourceManager 
            Private strLanguage As String = Nothing 
            Private catDisplayName As String = Nothing
            
            Sub Page_Init(ByVal sender As Object, ByVal args As EventArgs) 
                rm = ResourceFactory.RManager 
                If rm Is Nothing Then 
                    'Resources are unavailable.Server.Transfer(Utility.errorPage)
                End If 
            End Sub

            Sub Page_Load(ByVal sender As Object, ByVal args As EventArgs) 
                Dim SelectedCulture As CultureInfo 
                Dim coll As NameValueCollection = Request.QueryString 
                strLanguage = coll(Utility.languageLabel) 

                Try 
                    SelectedCulture = CultureInfo.CreateSpecificCulture(strLanguage) 
                Catch e As Exception 
                    SelectedCulture = CultureInfo.CreateSpecificCulture(Utility.englishLanguage) 
                    strLanguage = Utility.englishLanguage 
                End Try
 
                Footer.Language = strLanguage 

                ' If another culture was selected, use that instead
                If Not (SelectedCulture Is Nothing) Then 
                    Thread.CurrentThread.CurrentCulture = SelectedCulture 
                    Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture 
                End If 

                catDisplayName = Utility.GetDisplayName(Utility.catalogName, strLanguage) 

                If Not IsPostBack Then 
                    UpdateCategories 
                End If 
            End Sub

            Sub RootCategoryListing_ItemCommand(ByVal source As Object, ByVal args As RepeaterCommandEventArgs) 
 
                Dim strArg As String = CType(args.CommandArgument, String) 
                Dim arr As String() = strArg.Split("&"C) 
                Dim category As String = arr(0) 
                Dim dispCategory As String = arr(1) 
                Dim products As DataSet = Nothing 
                Dim categories As DataSet = Nothing 

                'Get child category and products for given category
                GetProductListing(category, products, categories) 

                If Not (0 = products.Tables(0).Rows.Count) Then 
                    'List child products for category
                    ProductListing.DataSource = products 
                    ProductListing.DataBind 
                    ProdName.Visible = True 
                    ProductListing.Visible = True 
                    ProdName.Text = rm.GetString(Utility.browseProdCategories) & " " & dispCategory 
                Else 
                    ProdName.Visible = False 
                    ProdName.Text = Nothing 
                    ProductListing.Visible = False 
                End If 

                If Not (0 = categories.Tables(0).Rows.Count) Then 
                    'List child category for parent category
                    CategoryListing.DataSource = categories 
                    CategoryListing.DataBind 
                    CatName.Visible = True 
                    CategoryListing.Visible = True 
                    CatName.Text = rm.GetString(Utility.browseChildCategories) & " " & dispCategory 
                    Seprator.InnerHtml = "<BR>" 
                Else 
                    CatName.Visible = False 
                    CatName.Text = Nothing 
                    CategoryListing.Visible = False 
                    Seprator.InnerHtml = Nothing 
                End If 
            End Sub

            Sub UpdateCategories() 
                Dim catalog As ProductCatalog = CommerceContext.Current.CatalogSystem.GetCatalog(Utility.catalogName) 
                RootCategoryListing.DataSource = catalog.GetRootCategories 
                RootCategoryListing.DataBind 
            End Sub 

            Sub ProductListing_ItemCommand(ByVal source As Object, ByVal args As RepeaterCommandEventArgs) 
                Response.Redirect(rm.GetString(Utility.productPageUrl) & "?" & Utility.languageLabel & "=" & strLanguage & "&" & Utility.productID & "=" & CType(args.CommandArgument, String)) 
            End Sub 

            Sub GetProductListing(ByVal category As String, ByRef product As DataSet, ByRef categories As DataSet) 
                Dim catalog As ProductCatalog = CommerceContext.Current.CatalogSystem.GetCatalog(Utility.catalogName) 
                product = catalog.GetCategory(category).GetProducts 
                categories = catalog.GetCategory(category).GetChildCategories 
            End Sub
        </script>
        <title>
            <%=rm.GetString(Utility.browsePageTitle) &" "& catDisplayName%>
        </title>
        <LINK REL="stylesheet" TYPE="text/css" HREF="sitelet.css">
    </HEAD>
    <body>
        <DIV CLASS="Heading">
            <%= rm.GetString(Utility.browsePageTitle) &" "& catDisplayName%>
        </DIV>
        <BR>
        <BR>
        <form id="browse" method="post" runat="server">
            <TABLE CELLPADDING="4" CELLSPACING="0" BORDER="0" WIDTH="85%">
                <TR>
                    <TD VALIGN="top" BGCOLOR="silver" WIDTH='<%=rm.GetString("Width")%>'>
                        <asp:Repeater id="RootCategoryListing" OnItemCommand="RootCategoryListing_ItemCommand" runat="server">
                            <HeaderTemplate>
                                <B>
                                    <%= rm.GetString(Utility.browsePageSubTitle)%>
                                </B>
                                <BR>
                            </HeaderTemplate>
                            <ItemTemplate>
                                <asp:LinkButton id="SelectCategoryBtn" CommandName="Select" CommandArgument='<%# CType(Container.DataItem, DataRowView)("CategoryName") & "&" & CType(Container.DataItem, DataRowView)("DisplayName") %>' runat="server">
                                    <%# DataBinder.Eval(Container.DataItem, "DisplayName") %>
                                </asp:LinkButton>
                            </ItemTemplate>
                            <SeparatorTemplate>
                                <BR>
                            </SeparatorTemplate>
                        </asp:Repeater>
                    </TD>
                    <TD VALIGN="top">
                        <b>
                            <asp:Label id="CatName" runat="server" />
                        </b>
                        <asp:Repeater id="CategoryListing" OnItemCommand="RootCategoryListing_ItemCommand" runat="server">
                            <HeaderTemplate>
                                <BR>
                            </HeaderTemplate>
                            <ItemTemplate>
                                <asp:LinkButton id="SelectCategory" CommandName="Select" CommandArgument='<%# CType(Container.DataItem, DataRowView)("CategoryName") & "&" & CType(Container.DataItem, DataRowView)("DisplayName") %>' runat="server">
                                    <%# DataBinder.Eval(Container.DataItem, "DisplayName") %>
                                </asp:LinkButton>
                            </ItemTemplate>
                            <SeparatorTemplate>
                                <BR>
                            </SeparatorTemplate>
                        </asp:Repeater>
                        <DIV id="Seprator" runat="server" />
                        <b>
                            <asp:Label id="ProdName" runat="server" />
                        </b>
                        <asp:Repeater id="ProductListing" OnItemCommand="ProductListing_ItemCommand" runat="server">
                            <HeaderTemplate>
                                <BR>
                            </HeaderTemplate>
                            <ItemTemplate>
                                <asp:LinkButton id="SelectProductBtn" CommandName="Select" CommandArgument='<%# CType(Container.DataItem, DataRowView)("ProductID") %>' runat="server">
                                    <%# DataBinder.Eval(Container.DataItem, "Name") %>
                                    <br>
                                </asp:LinkButton>
                                <asp:Label id="Describe" runat="server">
                                    <%# DataBinder.Eval(Container.DataItem, "description") %>
                                </asp:Label>
                            </ItemTemplate>
                            <SeparatorTemplate>
                                <BR>
                                <BR>
                            </SeparatorTemplate>
                        </asp:Repeater>
                    </TD>
                </TR>
            </TABLE>
            <Localized:Footer runat="server" ID="Footer" />
        </form>
    </body>
</HTML>

Default.aspx

<%@Page Description="Default Page" CodePage="65001" %>
<%@Import Namespace="catalogsitelet"%>
<%@Import Namespace="System.Threading"%>
<%@Import Namespace="System.Resources"%>
<%@Import Namespace="System.Globalization"%>
<!---------------------------------------------------------------------
--  File:      Default.aspx
--
--  Summary:   Language page for Catalog Sitelet
--
--  Sample:    Catalog Sitelet
--
-----------------------------------------------------------------------
--  This file is part of the Microsoft Commerce Server 2002 SDK
--
--  Copyright (C) 2002 Microsoft Corporation.  All rights reserved.
--
-- This source code is intended only as a supplement to Microsoft
-- Commerce Server 2002 and/or on-line documentation. See these other
-- materials for detailed information regarding Microsoft code samples.
--
-- THIS CODE AND INFORMATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
-- KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-- IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
-- PARTICULAR PURPOSE.
---------------------------------------------------------------------->
<HTML>
    <HEAD>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
        <meta name="GENERATOR" Content="Microsoft Visual Studio 7.0">
        <meta name="CODE_LANGUAGE" Content="VB">
        <meta name="vs_defaultClientScript" content="JavaScript (ECMAScript)">
        <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
        <script runat="Server" Language="VB">
                Private rm As ResourceManager 

            Sub Page_Init(ByVal sender As Object, ByVal args As EventArgs) 
                'Get the ResourceManager from the Application object
                rm = ResourceFactory.RManager 
                
                If rm Is Nothing Then 
                    'Resources are unavailable
                    Server.Transfer(Utility.errorPage) 
                End If 
            End Sub 

            Sub Page_Load(ByVal sender As Object, ByVal args As EventArgs) 
                Try 
                    Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(Request.UserLanguages(0)) 
                Catch generatedExceptionVariable0 As Exception 
                    'Provide fallback for not supported languages
                    Thread.CurrentThread.CurrentCulture = New CultureInfo(Utility.englishLanguage) 
                End Try 
 
                Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture 
 
                If Not IsPostBack Then 
                    English.Text = rm.GetString(Utility.English) 
                    German.Text = rm.GetString(Utility.German) 
                    French.Text = rm.GetString(Utility.French) 
                    Japanese.Text = rm.GetString(Utility.Japanese) 
                    English.NavigateUrl = rm.GetString(Utility.mainPageUrl) & "?" & Utility.languageLabel & "=" & Utility.englishLanguage 
                    German.NavigateUrl = rm.GetString(Utility.mainPageUrl) & "?" & Utility.languageLabel & "=" & Utility.germanLanguage 
                    French.NavigateUrl = rm.GetString(Utility.mainPageUrl) & "?" & Utility.languageLabel & "=" & Utility.frenchLanguage 
                    Japanese.NavigateUrl = rm.GetString(Utility.mainPageUrl) & "?" & Utility.languageLabel & "=" & Utility.japaneseLanguage 
                End If 
            End Sub
        </script>
        <title>
            <%=rm.GetString(Utility.siteletTitle)%>
        </title>
        <LINK REL="stylesheet" TYPE="text/css" HREF="sitelet.css">
    </HEAD>
    <body MS_POSITIONING="GridLayout">
        <DIV CLASS="Heading">
            <%= rm.GetString(Utility.siteletTitle)%>
        </DIV>
        <BR>
        <DIV CLASS="H1">
            <%= rm.GetString(Utility.siteletSubTitle)%>
        </DIV>
        <BR>
        <form id="Languages" method="post" runat="server">
            <UL>
                <LI>
                    <asp:Hyperlink id="English" Text="English" runat="server" />
                </LI>
                <LI>
                    <asp:Hyperlink id="German" Text="German" runat="server" />
                </LI>             
                <LI>
                    <asp:Hyperlink id="French" Text="French" runat="server" />
                </LI>
                <LI>
                    <asp:Hyperlink id="Japanese" Text="Japanese" runat="server" />
                </LI>
            </UL>
        </form>
    </body>
</HTML>

Footer.ascx

<%@Import Namespace="System.Globalization"%>
<%@Import Namespace="System.Resources"%>
<%@Import Namespace="catalogsitelet" %>
<%@ Control %>
<!---------------------------------------------------------------------
--  File:      footer.ascx
--
--  Summary:   Footer control
--
--  Sample:    Catalog Sitelet
--
-----------------------------------------------------------------------
--  This file is part of the Microsoft Commerce Server 2002 SDK
--
--  Copyright (C) 2002 Microsoft Corporation.  All rights reserved.
--
-- This source code is intended only as a supplement to Microsoft
-- Commerce Server 2002 and/or on-line documentation. See these other
-- materials for detailed information regarding Microsoft code samples.
--
-- THIS CODE AND INFORMATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
-- KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-- IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
-- PARTICULAR PURPOSE.
---------------------------------------------------------------------->
<script runat="server" language="VB">

Private strLanguage As String = Nothing 

Protected Overloads Overrides Sub Render(ByVal writer As HtmlTextWriter) 
    Dim rmgr As ResourceManager = ResourceFactory.RManager 
 
    If Nothing = strLanguage OrElse "" = strLanguage.Trim Then 
        strLanguage = Utility.englishLanguage 
    End If 

    Home.Text = rmgr.GetString("L_HTMLURLText_Home") 
    Browse.Text = rmgr.GetString("L_HTMLURLText_Footer_Browse") 
    FTSearch.Text = rmgr.GetString("L_HTMLURLText_Footer_FTSearch") 
    PropSearch.Text = rmgr.GetString("L_HTMLURLText_Footer_PropSearch") 
    Home.NavigateUrl = rmgr.GetString(Utility.homePageUrl) 
    Browse.NavigateUrl = rmgr.GetString(Utility.browsePageUrl) & "?" & Utility.languageLabel & "=" & strLanguage 
    FTSearch.NavigateUrl = rmgr.GetString(Utility.ftSearchPageUrl) & "?" & Utility.languageLabel & "=" & strLanguage 
    PropSearch.NavigateUrl = rmgr.GetString(Utility.propSearchPageUrl) & "?" & Utility.languageLabel & "=" & strLanguage 
    MyBase.Render(writer) 
End Sub 

Public Property Language() As String 
    Get 
        Return strLanguage 
    End Get 
    
    Set 
        strLanguage = value 
    End Set 
End Property
</script>
<asp:Panel runat="server">
    <BR>
    <asp:Hyperlink id="Home" Text="Home" runat="server" />
    |
    <asp:Hyperlink id="Browse" Text="Browse" runat="server" />
    |
    <asp:Hyperlink id="FTSearch" Text="Full Text Search" runat="server" />
    |
    <asp:Hyperlink id="PropSearch" Text="Property Search" runat="server" />
</asp:Panel>

Ftsearch.aspx

<%@ Page Description="Localized Page" CodePage="65001" %>
<%@Import Namespace="System.Globalization"%>
<%@Import Namespace="System.Resources"%>
<%@Import Namespace="System.Threading"%>
<%@Import Namespace="System.Data"%>
<%@Import Namespace="catalogsitelet"%>
<%@Import Namespace="Microsoft.CommerceServer.Runtime"%>
<%@Import Namespace="Microsoft.CommerceServer.Runtime.Catalog"%>
<%@Import Namespace="Microsoft.CommerceServer.Runtime.Configuration"%>
<%@Import Namespace="Microsoft.CommerceServer.Runtime.Diagnostics"%>
<%@Register TagPrefix="Localized" TagName="Footer" src="footer.ascx" %>
<!---------------------------------------------------------------------
--  File:      ftsearch.aspx
--
--  Summary:   Page performs free text search and displays the result
--
--  Sample:    Catalog Sitelet
--
-----------------------------------------------------------------------
--  This file is part of the Microsoft Commerce Server 2002 SDK
--
--  Copyright (C) 2002 Microsoft Corporation.  All rights reserved.
--
-- This source code is intended only as a supplement to Microsoft
-- Commerce Server 2002 and/or on-line documentation. See these other
-- materials for detailed information regarding Microsoft code samples.
--
-- THIS CODE AND INFORMATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
-- KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-- IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
-- PARTICULAR PURPOSE.
---------------------------------------------------------------------->
<HTML>
    <HEAD>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
        <meta name="GENERATOR" Content="Microsoft Visual Studio 7.0">
        <meta name="CODE_LANGUAGE" Content="VB">
        <meta name="vs_defaultClientScript" content="JavaScript (ECMAScript)">
        <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
        <script runat="Server" Language="VB">
            Private rm As ResourceManager 
            Private strLanguage As String = Nothing 
            Private catDisplayName As String = Nothing 
            Private searchText As String = Nothing 

            Sub Page_Init(ByVal sender As Object, ByVal args As EventArgs) 
                'Get the ResourceManager from the Application object
                rm = ResourceFactory.RManager 
                If rm Is Nothing Then 
                    'Resources are unavailable
                    Server.Transfer(Utility.errorPage) 
                End If 
            End Sub 

            Sub Page_Load(ByVal sender As Object, ByVal args As EventArgs) 
                Dim SelectedCulture As CultureInfo 
                Dim coll As NameValueCollection = Request.QueryString 
                strLanguage = coll(Utility.languageLabel) 
 
                Try 
                    SelectedCulture = CultureInfo.CreateSpecificCulture(strLanguage) 
                Catch e As Exception 
                    'Fallback to English language
                    SelectedCulture = CultureInfo.CreateSpecificCulture(Utility.englishLanguage) 
                    strLanguage = Utility.englishLanguage 
                End Try 
                
                'Set Language on footer control
                Footer.Language = strLanguage 
 
                'Set culture for current thread
                If Not (SelectedCulture Is Nothing) Then 
                    Thread.CurrentThread.CurrentCulture = SelectedCulture 
                    Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture 
                End If 
 
                'Initialize controls with appropriate texts
                Search.Text = rm.GetString(Utility.ftSearchSearch) 

                'Get display name for catalog, write a function
                catDisplayName = Utility.GetDisplayName(Utility.catalogName, strLanguage) 
            End Sub 

            Sub SearchButton_Click(ByVal sender As Object, ByVal args As EventArgs) 
                Try 
                    Dim totalRecords As Integer = 0 
                    Dim startPage As Integer = 1 
                    searchText = txtSearchText.Text 
                    
                    If searchText.Trim = "" Then 
                            Return 
                    End If 
   
                    Dim catalogCtx As CatalogContext = CommerceContext.Current.CatalogSystem 
                    Dim searchResult As DataSet = FreeTextSearch(searchText, startPage, totalRecords) 
   
                    If 0 < searchResult.Tables(0).Rows.Count Then 
                            rptSearchResult.Visible = True 
                            rptSearchResult.DataSource = searchResult 
                            rptSearchResult.DataBind 
                            Matches.Text = totalRecords.ToString & " " & rm.GetString(Utility.ftSearchTotal) 
                    Else 
                            rptSearchResult.Visible = False 
                            Seprator.InnerHtml = Nothing 
                            Pages.Text = Nothing 
                            Matches.Text = Nothing 
                    End If 
   
                    'Do paging
                    Paging.Visible = False 
                    If totalRecords > Utility.numberOfRecordToDisplay Then 
                            Dim pagingTable As DataTable = Utility.DoPaging(totalRecords, Utility.numberOfRecordToDisplay, searchText) 
                            Paging.DataSource = pagingTable.DefaultView 
                            Paging.DataBind 
                            Paging.Visible = True 
                            Seprator.InnerHtml = "<BR>" 
                            Pages.Text = rm.GetString(Utility.ftSearchPage) 
                    End If 
 
                Catch e As Exception 
                    'Eat exception
                End Try 
            End Sub 

            'Page click response
            Sub PageClick_ItemCommand(ByVal sender As Object, ByVal args As RepeaterCommandEventArgs) 
                Dim searchClause As String = CType(args.CommandArgument, String) 
                Dim totalRecords As Integer = 0 
                Dim page As Integer = args.Item.ItemIndex + 1 
                Dim searchResult As DataSet = FreeTextSearch(searchText, page, totalRecords) 
 
                'If products found
                If 0 < searchResult.Tables(0).Rows.Count Then 
                    rptSearchResult.Visible = True 
                    rptSearchResult.DataSource = searchResult 
                    rptSearchResult.DataBind 
                    Seprator.InnerHtml = "<BR>" 
                    Pages.Text = rm.GetString(Utility.ftSearchPage) 
                    Matches.Text = totalRecords.ToString & " " & rm.GetString(Utility.ftSearchTotal) 
                Else 
                    rptSearchResult.Visible = False 
                    Seprator.InnerHtml = Nothing 
                    Pages.Text = Nothing 
                End If 
            End Sub 

            Function FreeTextSearch(ByVal searchstring As String, ByVal page As Integer, ByRef totalRecords As Integer) As DataSet 
                
                'Search Options
                Dim searchOptions As CatalogSearchOptions = Utility.SetSearchOptions(page, Utility.numberOfRecordToDisplay, "name") 
                'Look for the products supporting search criteria
                Dim search As CatalogSearch = New CatalogSearch(CommerceContext.Current.CatalogSystem) 
                
                search.CatalogNames = Utility.catalogName 
                search.FreeTextSearchPhrase = searchstring 
                search.SearchOptions = searchOptions 
                Return search.Search(totalRecords) 
            End Function 

            Sub ProductListing_ItemCommand(ByVal sender As Object, ByVal args As RepeaterCommandEventArgs) 
                Response.Redirect(rm.GetString(Utility.productPageUrl) & "?" & Utility.languageLabel & "=" & strLanguage & "&" & Utility.productID & "=" & CType(args.CommandArgument, String)) 
            End Sub                 
        </script>
        <title>
            <%=rm.GetString(Utility.ftPageTitle) & " " & catDisplayName%>
        </title>
        <LINK REL="stylesheet" TYPE="text/css" HREF="sitelet.css">
    </HEAD>
    <body>
        <DIV CLASS="Heading">
            <%= rm.GetString(Utility.ftPageTitle) & " " & catDisplayName%>
        </DIV>
        <form id="ftsearch" method="post" runat="server">
            <asp:TextBox id="txtSearchText" runat="server"></asp:TextBox>
            <input type=text style="visibility:hidden" runat="server"/>
            <BR>
            <asp:Button id="Search" runat="server" Text="Search" OnClick="SearchButton_Click"></asp:Button>
            <br>
            <br>
            <asp:Label id="Matches" runat="server" />
            <br>
            <br>
            <asp:Repeater id="rptSearchResult" OnItemCommand="ProductListing_ItemCommand" runat="server">
                <ItemTemplate>
                    <asp:LinkButton id="SelectProductBtn" CommandName="Select" CommandArgument='<%# CType(Container.DataItem, DataRowView)("ProductID") %>' runat="server">
                        <%# DataBinder.Eval(Container.DataItem, "Name") %>
                    </asp:LinkButton>
                      (
                    <asp:Label id="Describe" runat="server">
                        <%# DataBinder.Eval(Container.DataItem, "description") %>
                    </asp:Label>
                    )
                </ItemTemplate>
                <SeparatorTemplate>
                    <BR>
                    <br>
                </SeparatorTemplate>
            </asp:Repeater>
            <DIV id="Seprator" runat="server" />
            <asp:Label id="Pages" runat="server" />
            <asp:Repeater id="Paging" OnItemCommand="PageClick_ItemCommand" runat="server">
                <ItemTemplate>
                    <asp:LinkButton id="PageClick" CommandName="Select" CommandArgument='<%# CType(Container.DataItem, DataRowView)("Clause") %>' runat="server">
                        <%# DataBinder.Eval(Container.DataItem, "Page") %>
                    </asp:LinkButton>
                </ItemTemplate>
            </asp:Repeater>
            <Localized:Footer runat="server" id="Footer" />
        </form>
    </body>
</HTML>

Global.ascx

<%@Import namespace="System"%>
<%@Import namespace="System.Collections"%>
<%@Import namespace="System.ComponentModel"%>
<%@Import namespace="System.Web"%>
<%@Import namespace="System.Web.SessionState"%>
<%@Import namespace="Microsoft.CommerceServer.Runtime"%>
<%@Import namespace="System.IO"%>
<%@Import namespace="System.Resources"%>
<%@Import namespace="System.Threading"%>
<%@Import namespace="System.Globalization"%>

<script runat="server" language="VB">

    Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs) 
    End Sub 

    Sub Session_Start(ByVal sender As Object, ByVal e As EventArgs) 
    End Sub 

    Sub Application_BeginRequest(ByVal sender As Object, ByVal e As EventArgs) 
    End Sub 

    Sub Application_EndRequest(ByVal sender As Object, ByVal e As EventArgs) 
    End Sub 

    Sub Session_End(ByVal sender As Object, ByVal e As EventArgs) 
    End Sub 

    Sub InitializeComponent() 
    End Sub 

    Sub Application_End(ByVal sender As Object, ByVal e As EventArgs) 
    End Sub

</script>

Main.aspx

<%@Page Description="Localized Page" CodePage="65001" %>
<%@Import Namespace="catalogsitelet"%>
<%@Import Namespace="System.Resources"%>
<%@Import Namespace="System.Threading"%>
<%@Import Namespace="System.Globalization"%>
<%@Import Namespace="System.Data"%>
<%@Import Namespace="Microsoft.CommerceServer.Runtime"%>
<%@Import Namespace="Microsoft.CommerceServer.Runtime.Catalog"%>
<%@Import Namespace="Microsoft.CommerceServer.Runtime.Configuration"%>
<%@Import Namespace="Microsoft.CommerceServer.Runtime.Diagnostics"%>
<%@Register TagPrefix="Localized" TagName="Footer" src="footer.ascx" %>
<!---------------------------------------------------------------------
--  File:      main.aspx
--
--  Summary:   Main selection page for Catalog Sitelet
--
--  Sample:    Catalog Sitelet
--
-----------------------------------------------------------------------
--  This file is part of the Microsoft Commerce Server 2002 SDK
--
--  Copyright (C) 2002 Microsoft Corporation.  All rights reserved.
--
-- This source code is intended only as a supplement to Microsoft
-- Commerce Server 2002 and/or on-line documentation. See these other
-- materials for detailed information regarding Microsoft code samples.
--
-- THIS CODE AND INFORMATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
-- KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-- IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
-- PARTICULAR PURPOSE.
---------------------------------------------------------------------->
<HTML>
    <HEAD>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
        <meta name="GENERATOR" Content="Microsoft Visual Studio 7.0">
        <meta name="CODE_LANGUAGE" Content="VB">
        <meta name="vs_defaultClientScript" content="JavaScript (ECMAScript)">
        <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
        <script runat="Server" Language="VB">
            Private rm As ResourceManager 
            Private strLanguage As String = Nothing 

            Sub Page_Init(ByVal sender As Object, ByVal args As EventArgs) 
                'Get the ResourceManager from the Application object
                rm = ResourceFactory.RManager 
                If rm Is Nothing Then 
                    'Resources are unavailable
                    Server.Transfer(Utility.errorPage) 
                End If 
            End Sub 

            Sub Page_Load(ByVal sender As Object, ByVal args As EventArgs) 
                Dim SelectedCulture As CultureInfo 
                Dim coll As NameValueCollection = Request.QueryString 
                strLanguage = coll(Utility.languageLabel) 
 
                Try 
                    SelectedCulture = CultureInfo.CreateSpecificCulture(strLanguage) 
                Catch e As Exception 
                    SelectedCulture = CultureInfo.CreateSpecificCulture(Utility.englishLanguage) 
                    strLanguage = Utility.englishLanguage 
                End Try 
 
                Footer.Language = strLanguage 
 
                If Not (SelectedCulture Is Nothing) Then 
                    Thread.CurrentThread.CurrentCulture = SelectedCulture 
                    Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture 
                End If 
                
                If Not IsPostBack Then 
                    BrowseCat.Text = rm.GetString(Utility.browsePageLabel) 
                    FullTextSearch.Text = rm.GetString(Utility.ftSearchLabel) 
                    PropertySearch.Text = rm.GetString(Utility.propSearchLabel) 
                    BrowseCat.NavigateUrl = rm.GetString(Utility.browsePageUrl) & "?" & Utility.languageLabel & "=" & strLanguage 
                    FullTextSearch.NavigateUrl = rm.GetString(Utility.ftSearchPageUrl) & "?" & Utility.languageLabel & "=" & strLanguage 
                    PropertySearch.NavigateUrl = rm.GetString(Utility.propSearchPageUrl) & "?" & Utility.languageLabel & "=" & strLanguage 
                End If 
            End Sub
        </script>
        <title>
            <%=rm.GetString(Utility.pageTitle)%>
        </title>
        <LINK REL="stylesheet" TYPE="text/css" HREF="sitelet.css">
    </HEAD>
    <body>
        <DIV CLASS="Heading">
            <%= rm.GetString(Utility.pageTitle)%>
        </DIV>
        <BR>
        <BR>
        <form id="main" method="post" runat="server">
            <ul>
                <li>
                    <asp:Hyperlink id="BrowseCat" Text="Browse the Catalog" runat="server" />
                </li>
                <li>
                    <asp:Hyperlink id="FullTextSearch" Text="Perform a Full Text Search" runat="server" />
                </li>
                <li>
                    <asp:Hyperlink id="PropertySearch" Text="Perform a Property Search" runat="server" />
                </li>
            </ul>
            <Localized:Footer runat="Server" ID="Footer" />
        </form>
    </body>
</HTML>

Noresource.aspx

<%@ Page %>
<!---------------------------------------------------------------------
--  File:      noresource.aspx
--
--  Summary:   Shown when no resource manager found
--
--  Sample:    Catalog Sitelet
--
-----------------------------------------------------------------------
--  This file is part of the Microsoft Commerce Server 2002 SDK
--
--  Copyright (C) 2002 Microsoft Corporation.  All rights reserved.
--
-- This source code is intended only as a supplement to Microsoft
-- Commerce Server 2002 and/or on-line documentation. See these other
-- materials for detailed information regarding Microsoft code samples.
--
-- THIS CODE AND INFORMATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
-- KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-- IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
-- PARTICULAR PURPOSE.
---------------------------------------------------------------------->
<html>
<head>
<title>Server Error</title>
</head>
<body>
<h1>Server Error</h1>

Localized resources were not available.<p>
Please contact the administrator.

</body>
</html>

Product.aspx

<%@ Page Description="Localized Page" CodePage="65001" %>
<%@Import Namespace="System.Globalization"%>
<%@Import Namespace="System.Resources"%>
<%@Import Namespace="System.Threading"%>
<%@Import Namespace="System"%>
<%@Import Namespace="catalogsitelet"%>
<%@Import Namespace="Microsoft.CommerceServer.Runtime"%>
<%@Import Namespace="Microsoft.CommerceServer.Runtime.Catalog"%>
<%@Import Namespace="Microsoft.CommerceServer.Runtime.Configuration"%>
<%@Import Namespace="Microsoft.CommerceServer.Runtime.Diagnostics"%>
<%@Import Namespace="System.Data"%>
<%@Register TagPrefix="Localized" TagName="Footer" src="footer.ascx" %>
<!---------------------------------------------------------------------
--  File:      product.aspx
--
--  Summary:   Page is used to display product details
--
--  Sample:    Catalog Sitelet
--
-----------------------------------------------------------------------
--  This file is part of the Microsoft Commerce Server 2002 SDK
--
--  Copyright (C) 2002 Microsoft Corporation.  All rights reserved.
--
-- This source code is intended only as a supplement to Microsoft
-- Commerce Server 2002 and/or on-line documentation. See these other
-- materials for detailed information regarding Microsoft code samples.
--
-- THIS CODE AND INFORMATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
-- KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-- IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
-- PARTICULAR PURPOSE.
---------------------------------------------------------------------->
<HTML>
    <HEAD>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
        <meta name="GENERATOR" Content="Microsoft Visual Studio 7.0">
        <meta name="CODE_LANGUAGE" Content="VB">
        <meta name="vs_defaultClientScript" content="JavaScript (ECMAScript)">
        <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
        <script runat="Server" Language="VB">
            Private rm As ResourceManager 
            Private strLanguage As String = Nothing 
            Private catalog As ProductCatalog = Nothing 
            Private productdt As DataRow = Nothing 
            Private productDisplayName As String = Nothing 

            Sub Page_Init(ByVal sender As Object, ByVal args As EventArgs) 
                'ResourceManager from the Application object
                rm = ResourceFactory.RManager 
                catalog = CommerceContext.Current.CatalogSystem.GetCatalog(Utility.catalogName) 
 
                If rm Is Nothing Then 
                    'Resources are unavailable
                    Server.Transfer(Utility.errorPage) 
                End If 
            End Sub 

            Sub Page_Load(ByVal sender As Object, ByVal args As EventArgs) 
                Dim SelectedCulture As CultureInfo 
                Dim coll As NameValueCollection = Request.QueryString 
                strLanguage = coll(Utility.languageLabel) 
 
                Try 
                    SelectedCulture = CultureInfo.CreateSpecificCulture(strLanguage) 
                Catch e As Exception 
                    SelectedCulture = CultureInfo.CreateSpecificCulture(Utility.englishLanguage) 
                    strLanguage = Utility.englishLanguage 
                End Try 
 
                Footer.Language = strLanguage 
                catalog.ActiveLanguage = strLanguage 
 
                If Not (SelectedCulture Is Nothing) Then 
                    Thread.CurrentThread.CurrentCulture = SelectedCulture 
                    Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture 
                End If 
        
                Dim productid As String = coll(Utility.productID) 
 
                If Not IsPostBack AndAlso Not (productid Is Nothing) Then 
                    Try 
                            Dim myProduct As Product = catalog.GetProduct(productid) 
                            Dim data As DataSet = myProduct.GetProductProperties 
                            productdt = data.Tables(0).Rows(0) 
     
                        Try 
                                productDisplayName = CType(productdt("name"), String) 
                            Catch e As Exception 
                                productDisplayName = "" 
                            End Try 
     
                        Try 
                                ProductImage.ImageUrl = CType(productdt("Image_filename"), String) 
                            Catch e As Exception 
                                ProductImage.ImageUrl = Nothing 
                            End Try 
                            
                        Try 
                                ProductIDLabel.Text = CType(productdt("name"), String) 
                            Catch e As Exception 
                                ProductIDLabel.Text = Nothing 
                            End Try 
     
                        Try 
                                IntroDateLabel.Text = rm.GetString(Utility.productPageIntro) 
                                Dim dateTime As DateTime = CType(productdt("IntroductionDate"), DateTime) 
                                IntroDate.Text = dateTime.ToShortDateString 
                            Catch e As Exception 
                                IntroDateLabel.Text = Nothing 
                            End Try 
    
                        Try 
                                PriceLabel.Text = rm.GetString(Utility.productPagePrice) 
                                Price.Text = "$" & productdt("cy_list_price").ToString 
                            Catch e As Exception 
                                PriceLabel.Text = Nothing 
                            End Try 
     
                        Try 
                                ProductCodeLabel.Text = rm.GetString(Utility.productPageCode) 
                                ProductCode.Text = productdt("ProductCode").ToString 
                            Catch e As Exception 
                                ProductCodeLabel.Text = Nothing 
                            End Try 
     
                        Try 
                                Dim variantData As DataSet = myProduct.GetVariants 
                                VariantListing.DataSource = variantData 
                                VariantListing.DataBind 
       
                            If Not (0 = variantData.Tables(0).Rows.Count) Then 
                                    Variants.Text = rm.GetString(Utility.productPageColor) 
                                Else 
                                    Variants.Text = Nothing 
                                End If 
                            Catch e As Exception 
                                Variants.Text = Nothing 
                            End Try 
     
                        Try 
                                DescribeLabel.Text = rm.GetString(Utility.productPageDescription) 
                                Description.Text = CType(productdt("Description"), String) 
                            Catch e As Exception 
                                DescribeLabel.Text = Nothing 
                            End Try 
     
                        Try 
                                Size.Text = CType(productdt("ProductSize").ToString, String) 
                                
                            If Not ("" = Size.Text.Trim) Then 
                                    SizeLabel.Text = rm.GetString(Utility.productPageSize) 
                                End If 
                            Catch e As Exception 
                                SizeLabel.Text = Nothing 
                            End Try 
     
                        Try 
                                Dim available As Integer = CType(productdt("OnSale"), Integer) 
       
                            If 1 = available Then 
                                    AvailableLabel.Text = rm.GetString(Utility.productPageAvailable) 
                                Else 
                                    AvailableLabel.Text = rm.GetString(Utility.productPageUnavailable) 
                                End If 
                            Catch e As Exception 
                                AvailableLabel.Text = Nothing 
                            End Try 
                    Catch e As Exception
                        'Eat exception 
                    End Try 
                End If 
            End Sub

        </script>
        <title>
            <%=rm.GetString(Utility.productPageTitle) & " " & productDisplayName%>
        </title>      
        <LINK REL="stylesheet" TYPE="text/css" HREF="sitelet.css">
    </HEAD>
    <body>
        <DIV CLASS="Heading">
            <%= rm.GetString(Utility.productPageTitle) & " " & productDisplayName%>
        </DIV>
        <BR>
        <BR>
        <form id="Productform" method="post" runat="server">
            <asp:Table id="Product" runat="server" Width="50%" cellpadding="2" cellspacing="0" Height="175px">
                <asp:TableRow>
                    <asp:TableCell ColumnSpan="100">
                        <B>
                            <asp:Label ID="ProductIDLabel" Runat="server" />
                        </B>
                        <br>
                        <asp:Label ID="IntroDateLabel" Runat="server" />
                        <asp:Label ID="IntroDate" Runat="server" />
                        <br>
                    </asp:TableCell>
                </asp:TableRow>
                <asp:TableRow>
                    <asp:TableCell ColumnSpan="70">
                        <asp:Image id="ProductImage" runat="server"></asp:Image>
                    </asp:TableCell>
                    <asp:TableCell ColumnSpan="30">
                        <b>
                            <asp:Label ID="PriceLabel" Runat="server" />
                        </b>
                        <asp:Label ID="Price" Runat="server" />
                        <br>
                        <b>
                            <asp:Label ID="ProductCodeLabel" Runat="server" />
                        </b>
                        <asp:Label ID="ProductCode" Runat="server" />
                        <br>
                    </asp:TableCell>
                </asp:TableRow>
                <asp:TableRow>
                    <asp:TableCell ColumnSpan="100">
                        <B>
                            <asp:Label ID="Variants" Runat="server" />
                        </B>
                        <br>
                        <asp:Repeater id="VariantListing" runat="server">
                            <ItemTemplate>
                                <asp:Label id="Color" runat="server">
                                    <%# DataBinder.Eval(Container.DataItem, "ProductColor") %>
                                </asp:Label>
                            </ItemTemplate>
                            <SeparatorTemplate>
                                <BR>
                            </SeparatorTemplate>
                        </asp:Repeater>
                        <BR>
                    </asp:TableCell>
                </asp:TableRow>
                <asp:TableRow>
                    <asp:TableCell ColumnSpan="100">
                        <B>
                            <asp:Label ID="DescribeLabel" Runat="server" />
                        </B>
                        <BR>
                        <asp:Label ID="Description" Runat="server" />
                        <BR>
                    </asp:TableCell>
                </asp:TableRow>
                <asp:TableRow>
                    <asp:TableCell ColumnSpan="100">
                        <B>
                            <asp:Label ID="SizeLabel" Runat="server" />
                        </B>
                        <asp:Label ID="Size" Runat="server" />
                        <BR>
                    </asp:TableCell>
                </asp:TableRow>
            </asp:Table>
            <asp:Label ID="AvailableLabel" Runat="server" />
            <Localized:Footer runat="server" id="Footer" />
        </form>
    </body>
</HTML>

Propsearch.aspx

<%@Register TagPrefix="Localized" TagName="Footer" src="footer.ascx" %>
<%@Import Namespace="System.Data"%>
<%@Import Namespace="Microsoft.CommerceServer.Runtime"%>
<%@Import Namespace="Microsoft.CommerceServer.Runtime.Catalog"%>
<%@Import Namespace="Microsoft.CommerceServer.Runtime.Configuration"%>
<%@Import Namespace="Microsoft.CommerceServer.Runtime.Diagnostics"%>
<%@Import Namespace="catalogsitelet"%>
<%@Import Namespace="System.Threading"%>
<%@Import Namespace="System.Resources"%>
<%@Import Namespace="System.Globalization"%>
<%@ Page Description="Localized Page" CodePage="65001" %>
<!---------------------------------------------------------------------
--  File:      propsearch.aspx
--
--  Summary:   Page performs property search and displays the result
--
--  Sample:    Catalog Sitelet
--
-----------------------------------------------------------------------
--  This file is part of the Microsoft Commerce Server 2002 SDK
--
--  Copyright (C) 2002 Microsoft Corporation.  All rights reserved.
--
-- This source code is intended only as a supplement to Microsoft
-- Commerce Server 2002 and/or on-line documentation. See these other
-- materials for detailed information regarding Microsoft code samples.
--
-- THIS CODE AND INFORMATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
-- KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-- IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
-- PARTICULAR PURPOSE.
---------------------------------------------------------------------->
<HTML>
    <HEAD>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
        <meta name="GENERATOR" Content="Microsoft Visual Studio 7.0">
        <meta name="CODE_LANGUAGE" Content="VB">
        <meta name="vs_defaultClientScript" content="JavaScript (ECMAScript)">
        <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
        <script runat="Server" Language="VB">     
            Private rm As ResourceManager 
            Private strLanguage As String = Nothing 
            Private catDisplayName As String = Nothing 
            Private productCode As String = Nothing 
            Private introductionDate As String = Nothing 
            Private productName As String = Nothing 

            Sub Page_Init(ByVal sender As Object, ByVal args As EventArgs) 
                'Get the ResourceManager from the Application object
                rm = ResourceFactory.RManager 
 
                If rm Is Nothing Then 
                    'Do something sensible if resources are unavailable
                    Server.Transfer(Utility.errorPage) 
                End If 
            End Sub 

            Sub Page_Load(ByVal sender As Object, ByVal args As EventArgs) 
                Dim SelectedCulture As CultureInfo 
                Dim coll As NameValueCollection = Request.QueryString 
                strLanguage = coll(Utility.languageLabel) 
                
                Try 
                    SelectedCulture = CultureInfo.CreateSpecificCulture(strLanguage) 
                Catch e As Exception 
                    'Fallback to English language
                    SelectedCulture = CultureInfo.CreateSpecificCulture(Utility.englishLanguage) 
                    strLanguage = Utility.englishLanguage 
                End Try 

                'Set Language on footer control
                Footer.Language = strLanguage 
                    
                'Set culture for current thread
                If Not (SelectedCulture Is Nothing) Then 
                    Thread.CurrentThread.CurrentCulture = SelectedCulture 
                    Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture 
                End If
        
                'Initialize controls with appropriate texts 
                ProdCode.Text = rm.GetString(Utility.productPageCode) 
                IntroDate.Text = rm.GetString(Utility.propSearchIntro) 
                Name.Text = rm.GetString(Utility.propSearchTitle) 
                Button.Text = rm.GetString(Utility.ftSearchSearch) 
                catDisplayName = Utility.GetDisplayName(Utility.catalogName, strLanguage) 
            End Sub 

            Sub Button_Click(ByVal sender As Object, ByVal args As EventArgs) 
                Dim searchClause As String = Nothing 
                
                Try 
                    'To keep count of records found
                    Dim totalRecords As Integer = 0 
                    Dim startPage As Integer = 1

                    'Product code
                    productCode = ProdCodeText.Text.Trim 
                    If Not ("" = productCode) Then 
                            BuildClause(searchClause, "productcode", productCode, False) 
                    End If 
   
                    'Introduction date
                    introductionDate = IntroDateText.Text.Trim 
                    If Not ("" = introductionDate) Then 
                            BuildClause(searchClause, "introductiondate", introductionDate, True) 
                    End If 
        
                    'Product name
                    productName = NameText.Text.Trim 
                    If Not ("" = productName) Then 
                            BuildClause(searchClause, "name", productName, False) 
                    End If 
   
                    Dim searchResult As DataSet = PropertySearch(searchClause, startPage, totalRecords) 
                    Paging.Visible = False 

                    'If products found
                    If Not (searchResult Is Nothing) AndAlso 0 < searchResult.Tables(0).Rows.Count Then 
                            SearchResultRepeater.Visible = True 
                            SearchResultRepeater.DataSource = searchResult 
                            SearchResultRepeater.DataBind 
                            Matches.Text = totalRecords.ToString & " " & rm.GetString(Utility.propSearchTotal) 
                    Else 
                            SearchResultRepeater.Visible = False 
                            Seprator.InnerHtml = Nothing 
                            Pages.Text = Nothing 
                            Matches.Text = Nothing 
                    End If 
   
                    'Do paging
                    If totalRecords > Utility.numberOfRecordToDisplay Then 
                            Dim pagingTable As DataTable = Utility.DoPaging(totalRecords, Utility.numberOfRecordToDisplay, searchClause) 
                            Paging.DataSource = pagingTable.DefaultView 
                            Paging.DataBind 
                            Paging.Visible = True 
                            Seprator.InnerHtml = "<BR>" 
                            Pages.Text = rm.GetString(Utility.ftSearchPage) 
                    End If 
   
                    ProdCodeText.Text = Nothing 
                    IntroDateText.Text = Nothing 
                    NameText.Text = Nothing 
                Catch e As Exception 
                    'Eat exception
                End Try 
            End Sub 

            'Redirects to product page
            Sub ProductListing_ItemCommand(ByVal sender As Object, ByVal args As RepeaterCommandEventArgs) 
                Response.Redirect(rm.GetString(Utility.productPageUrl) & "?" & Utility.languageLabel & "=" & strLanguage & "&" & Utility.productID & "=" & CType(args.CommandArgument, String)) 
            End Sub 

            'Page click response
            Sub PageClick_ItemCommand(ByVal sender As Object, ByVal args As RepeaterCommandEventArgs) 
                Dim searchClause As String = CType(args.CommandArgument, String) 
                Dim totalRecords As Integer = 0 
                Dim page As Integer = args.Item.ItemIndex + 1 
                Dim searchResult As DataSet = PropertySearch(searchClause, page, totalRecords) 

                'If products found
                If 0 < searchResult.Tables(0).Rows.Count Then 
                    SearchResultRepeater.Visible = True 
                    SearchResultRepeater.DataSource = searchResult 
                    SearchResultRepeater.DataBind 
                    Seprator.InnerHtml = "<BR>" 
                    Pages.Text = rm.GetString("L_Page_FTSearch_Page") 
                    Matches.Text = totalRecords.ToString & " " & rm.GetString(Utility.propSearchTotal) 
                Else 
                    SearchResultRepeater.Visible = False 
                    Seprator.InnerHtml = Nothing 
                    Pages.Text = Nothing 
                End If 
            End Sub 

            'Creates Where clause for SQL statement
            Public Sub BuildClause(ByRef searchCaluse As String, ByVal sKey As String, ByVal sValue As String, ByVal bEquals As Boolean) 
                If bEquals Then 
                    If searchCaluse Is Nothing Then 
                            searchCaluse = sKey & " = N" & "'" & sValue & "'" 
                    Else 
                            searchCaluse = searchCaluse & " or " & sKey & " = N" & "'" & sValue & "'" 
                    End If 
                Else 
                    If searchCaluse Is Nothing Then 
                            searchCaluse = sKey & " like N" & "'" & sValue & "'" 
                    Else 
                            searchCaluse = searchCaluse & " or " & sKey & " like N" & "'" & sValue & "'" 
                    End If 
                End If 
            End Sub 

            Function PropertySearch(ByVal searchstring As String, ByVal page As Integer, ByRef totalRecords As Integer) As DataSet 
                'Search Options 
                Dim searchOptions As CatalogSearchOptions = Utility.SetSearchOptions(page, Utility.numberOfRecordToDisplay, "name") 
                'Look for the products supporting search criteria
                Dim search As CatalogSearch = New CatalogSearch(CommerceContext.Current.CatalogSystem) 
 
                search.CatalogNames = Utility.catalogName 
                search.SqlWhereClause = searchstring 
                search.SearchOptions = searchOptions 
                Return search.Search(totalRecords) 
            End Function

        </script>
        <title>
            <%=rm.GetString(Utility.propPageTitle) & " " & catDisplayName%>
        </title>
        <LINK REL="stylesheet" TYPE="text/css" HREF="sitelet.css">
    </HEAD>
    <body>
        <DIV CLASS="Heading">
            <%= rm.GetString(Utility.propPageTitle) & " " & catDisplayName%>
        </DIV>
        <form id="propSearch" method="post" runat="server">
            <BR>
            <asp:Table id="display" runat="server">
                <asp:TableRow>
                    <asp:TableCell>
                        <asp:Label id="ProdCode" runat="server">Product Code:</asp:Label>
                    </asp:TableCell>
                    <asp:TableCell>
                        <asp:TextBox id="ProdCodeText" runat="server"></asp:TextBox>
                    </asp:TableCell>
                </asp:TableRow>
                <asp:TableRow>
                    <asp:TableCell>
                        <asp:Label id="IntroDate" runat="server">Introduction date:</asp:Label>
                    </asp:TableCell>
                    <asp:TableCell>
                        <asp:TextBox id="IntroDateText" runat="server"></asp:TextBox>
                    </asp:TableCell>
                </asp:TableRow>
                <asp:TableRow>
                    <asp:TableCell>
                        <asp:Label id="Name" runat="server">Name:</asp:Label>
                    </asp:TableCell>
                    <asp:TableCell>
                        <asp:TextBox id="NameText" runat="server"></asp:TextBox>
                    </asp:TableCell>
                </asp:TableRow>
            </asp:Table>
            <asp:Button id="Button" runat="server" Text="Button" OnClick="Button_Click" />
            <br>
            <br>
            <asp:Label id="Matches" runat="server" />
            <br>
            <br>
            <asp:Repeater id="SearchResultRepeater" OnItemCommand="ProductListing_ItemCommand" runat="server">
                <ItemTemplate>
                    <asp:LinkButton id="SelectProductBtn" CommandName="Select" CommandArgument='<%# CType(Container.DataItem, DataRowView)("ProductID") %>' runat="server">
                        <%# DataBinder.Eval(Container.DataItem, "Name") %>
                    </asp:LinkButton>
                      (
                    <asp:Label id="Describe" runat="server">
                        <%# DataBinder.Eval(Container.DataItem, "description") %>
                    </asp:Label>
                    )
                </ItemTemplate>
                <SeparatorTemplate>
                    <BR>
                    <BR>
                </SeparatorTemplate>
            </asp:Repeater>
            <DIV id="Seprator" runat="server" />
            <asp:Label id="Pages" runat="server" />
            <asp:Repeater id="Paging" OnItemCommand="PageClick_ItemCommand" runat="server">
                <ItemTemplate>
                    <asp:LinkButton id="PageClick" CommandName="Select" CommandArgument='<%# CType(Container.DataItem, DataRowView)("Clause") %>' runat="server">
                        <%# DataBinder.Eval(Container.DataItem, "Page") %>
                    </asp:LinkButton>
                </ItemTemplate>
            </asp:Repeater>
            <Localized:Footer runat="server" id="Footer" />
        </form>
    </body>
</HTML>

REFERENCES

For more information about the ASP.NET-based Catalog Sitelet, visit the following Microsoft Developer Network (MSDN) Web site:

Keywords: kbprogramming kbinfo kbhowto kbcode KB910309