zoukankan      html  css  js  c++  java
  • 网上购物系统(Task007)——自定义DateList控件分页显示商品信息

    源代码:13033480群共享

    一、数据集Model添加商品信息类ItemInfo.cs。

    using System;
    
    namespace WestGarden.Model
    {
        public class ItemInfo
        {
            private int itemid;
            private string categoryid;
            private string name;
            private decimal price;
            private string image;
            private string categoryname;
    
            public ItemInfo() { }
    
            public ItemInfo(int itemid, string categoryid, string name, decimal price, string image, string categoryname)
            {
                this.itemid = itemid;
                this.categoryid = categoryid;
                this.name = name;
                this.price = price;
                this.image = image;
                this.categoryname = categoryname;
            }
    
            public int ItemId
            {
                get { return itemid; }
                set { itemid = value; }
            }
            public string CategoryId
            {
                get { return categoryid; }
                set { categoryid = value; }
            }
            public string Name
            {
                get { return name; }
                set { name = value; }
            }
            public decimal Price
            {
                get { return price; }
                set { price = value; }
            }
            public string Image
            {
                get { return image; }
                set { image = value; }
            }
            public string CategoryName
            {
                get { return categoryname; }
                set { categoryname = value; }
    
    
            }
        }
    }
    

    二、数据访问层DAL中添加类Item.cs,并添加函数GetItemsByCategory()

    using System;
    using System.Collections.Generic;
    using System.Data;
    using System.Data.SqlClient;
    
    using WestGarden.Model;
    using WestGarden.DBUtility;
    
    namespace WestGarden.DAL
    {
        public class Item
        {
            private const string SQL_SELECT_ITEMS_BY_CATEGORY = "SELECT Item.ItemId,Item.CategoryId,Item.Name,Item.Price,Item.Image,Category.Name FROM Item INNER JOIN Category ON Item.CategoryId=Category.CategoryId WHERE Item.CategoryId = @CategoryId";
            private const string PARM_CATEGORY_ID = "@CategoryId";
    
            public IList<ItemInfo> GetItemsByCategory(string CagegoryId)
            {
    
                IList<ItemInfo> itemsByCategory = new List<ItemInfo>();
    
                SqlParameter parm = new SqlParameter(PARM_CATEGORY_ID, SqlDbType.VarChar, 20);
                parm.Value = CagegoryId;
    
                //Execute the query against the database
                using (SqlDataReader rdr = SqlHelper.ExecuteReader(SqlHelper.ConnectionStringLocalTransaction, CommandType.Text, SQL_SELECT_ITEMS_BY_CATEGORY, parm))
                {
                    // Scroll through the results
                    while (rdr.Read())
                    {
                        ItemInfo item = new ItemInfo(rdr.GetInt32(0), rdr.GetString(1), rdr.GetString(2), rdr.GetDecimal(3), rdr.GetString(4), rdr.GetString(5));
                        itemsByCategory.Add(item);
                    }
                }
                return itemsByCategory;
            }
        }
    }
    
    三、DataList显示商品信息
    1、  Item.aspx
    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Items1.aspx.cs" Inherits="WestGarden.Web.Items1" %>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    <html xmlns="http://www.w3.org/1999/xhtml" >
    <head runat="server">
        <title>肯德基订餐系统——西园工作室</title>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
            <asp:DataList ID="dlstItems" runat="server">
                <ItemTemplate>
                     <table cellpadding="0" cellspacing="0">
                        <tr>
                            <td>
                                <asp:Image ID="imgItem" runat="server" AlternateText='<%# Eval("Name") %>' Height="120"
                                    ImageUrl='<%# Eval("Image") %>' Width="120" />
                            </td>
                        </tr>
                        <tr>
                            <td>
                                <%# Eval("Name") %>
                            </td>
                        </tr>
                        <tr>
                            <td>
                                <%# Eval("Price") %>
                            </td>
                        </tr>
                    </table>
                </ItemTemplate>
            </asp:DataList></div>
    
        </form>
    </body>
    </html>
    

    2、Item.aspx.cx

    using WestGarden.DAL;
    
    namespace WestGarden.Web
    {
        public partial class Items1 : System.Web.UI.Page
        {
            protected void Page_Load(object sender, EventArgs e)
            {
                string categoryKey = Request.QueryString["categoryId"];
                Item item =new Item();
                dlstItems.DataSource = item.GetItemsByCategory(categoryKey);
                dlstItems.DataBind();
    
            }
        }
    }


     

    四、自定义DataList分页显示商品信息

    1、自定义控件CustomList.cs,添加分页功能。

    using System;
    using System.Collections;
    using System.Collections.Specialized;
    using System.Text;
    using System.Text.RegularExpressions;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    
    namespace WestGarden.Web {
    
        public class CustomList : DataList {
            //Static constants
            protected const string HTML1 = "<table cellpadding=0 cellspacing=0><tr><td colspan=2>";
            protected const string HTML2 = "</td></tr><tr><td class=paging align=left>";
            protected const string HTML3 = "</td><td align=right class=paging>";
            protected const string HTML4 = "</td></tr></table>";
            private static readonly Regex RX = new Regex(@"^&page=\d+", RegexOptions.Compiled);
            private const string LINK_PREV = "<a href=?page={0}>< 上一页</a>";
            private const string LINK_MORE = "<a href=?page={0}>下一页 ></a>";
            private const string KEY_PAGE = "page";
            private const string COMMA = "?";
            private const string AMP = "&";
    
            protected string emptyText;
            private IList dataSource;
            private int pageSize = 10;
            private int currentPageIndex;
            private int itemCount;
    
            override public object DataSource {
                set {
                    //This try catch block is to avoid issues with the VS.NET designer
                    //The designer will try and bind a datasource which does not derive from ILIST
                    try {
                        dataSource = (IList)value;
                        ItemCount = dataSource.Count;
                    }
                    catch {
                        dataSource = null;
                        ItemCount = 0;
                    }
                }
            }
    
            public int PageSize {
                get { return pageSize; }
                set { pageSize = value; }
            }
    
            protected int PageCount {
                get { return (ItemCount - 1) / pageSize; }
            }
    
            virtual protected int ItemCount {
                get { return itemCount; }
                set { itemCount = value; }
            }
    
            virtual public int CurrentPageIndex {
                get { return currentPageIndex; }
                set { currentPageIndex = value; }
            }
    
            public string EmptyText {
                set { emptyText = value; }
            }
    
            public void SetPage(int index) {
                OnPageIndexChanged(new DataGridPageChangedEventArgs(null, index));
            }
    
            override protected void OnLoad(EventArgs e) {
                if (Visible) {
                    string page = Context.Request[KEY_PAGE];
                    int index = (page != null) ? int.Parse(page) : 0;
                    SetPage(index);
                }
            }
    
    
            /// <summary>
            /// Overriden method to control how the page is rendered
            /// </summary>
            /// <param name="writer"></param>
            override protected void Render(HtmlTextWriter writer) {
    
                //Check there is some data attached
                if (ItemCount == 0) {
                    writer.Write(emptyText);
                    return;
                }
    
                //Mask the query
                string query = Context.Request.Url.Query.Replace(COMMA, AMP);
                query = RX.Replace(query, string.Empty);
    
               
                // Write out the first part of the control, the table header
                writer.Write(HTML1);
    
                // Call the inherited method
                base.Render(writer);
                
                // Write out a table row closure
                writer.Write(HTML2);
    
                //Determin whether next and previous buttons are required
                //Previous button?
                if (currentPageIndex > 0)
                    writer.Write(string.Format(LINK_PREV, (currentPageIndex - 1) + query));
    
                //Close the table data tag
                writer.Write(HTML3);
    
                //Next button?
                if (currentPageIndex < PageCount)
                    writer.Write(string.Format(LINK_MORE, (currentPageIndex + 1) + query));
    
                //Close the table
                writer.Write(HTML4);
            }
    
            override protected void OnDataBinding(EventArgs e) {
    
                //Work out which items we want to render to the page
                int start = CurrentPageIndex * pageSize;
                int size = Math.Min(pageSize, ItemCount - start);
    
                IList page = new ArrayList();
    
                //Add the relevant items from the datasource
                for (int i = 0; i < size; i++)
                    page.Add(dataSource[start + i]);
    
                //set the base objects datasource
                base.DataSource = page;
                base.OnDataBinding(e);
    
            }
    
            public event DataGridPageChangedEventHandler PageIndexChanged;
    
            virtual protected void OnPageIndexChanged(DataGridPageChangedEventArgs e) {
                if (PageIndexChanged != null)
                    PageIndexChanged(this, e);
            }
        }
    }


     

    2、用户控件

    1ItemssControl.ascx

    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Items1.aspx.cs" Inherits="WestGarden.Web.Items1" %>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    <html xmlns="http://www.w3.org/1999/xhtml" >
    <head runat="server">
        <title>肯德基订餐系统——西园工作室</title>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
            <asp:DataList ID="dlstItems" runat="server">
                <ItemTemplate>
                     <table cellpadding="0" cellspacing="0">
                        <tr>
                            <td>
                                <asp:Image ID="imgItem" runat="server" AlternateText='<%# Eval("Name") %>' Height="120"
                                    ImageUrl='<%# Eval("Image") %>' Width="120" />
                            </td>
                        </tr>
                        <tr>
                            <td>
                                <%# Eval("Name") %>
                            </td>
                        </tr>
                        <tr>
                            <td>
                                <%# Eval("Price") %>
                            </td>
                        </tr>
                    </table>
                </ItemTemplate>
            </asp:DataList></div>
    
        </form>
    </body>
    </html>
    


    2ItemssControl.ascx.cs

    using System;
    using System.Web;
    using System.Web.UI.WebControls;
    using WestGarden.DAL;
    
    namespace WestGarden.Web {
    
        public partial class ItemsControl : System.Web.UI.UserControl {
    
            /// <summary>
            /// Rebind control 
            /// </summary>
            protected void PageChanged(object sender, DataGridPageChangedEventArgs e) {
                //reset index
                dlstItems.CurrentPageIndex = e.NewPageIndex;
    
                //get category id
                string categoryKey = Request.QueryString["categoryId"];
    
                //bind data
                Item item = new Item();
               dlstItems.DataSource = item.GetItemsByCategory(categoryKey);
                dlstItems.DataBind();
            }
        }
    }

    版权所有©2012,西园电脑工作室.欢迎转载,转载请注明出处.更多文章请参阅博客http://blog.csdn.com/yousuosi

  • 相关阅读:
    居中
    背景和内容
    Filter 解决web网页跳转乱码
    java内部类
    javascript 基础教程[温故而知新一]
    每隔一秒自动执行函数(JavaScript)
    详解 Android Activity 生命周期
    css 重新学习系列(3)
    css 重新学习系列(2)
    写一个迷你版Smarty模板引擎,对认识模板引擎原理非常好(附代码)
  • 原文地址:https://www.cnblogs.com/java20130723/p/3211708.html
Copyright © 2011-2022 走看看