zoukankan      html  css  js  c++  java
  • ASP.NET 动态属性筛选和分页绑定

    分页控件为:AspNetPager.dll

    我们先建立一个产品属性名称表

    CREATE TABLE ProductAttr
    (
        [ID] [int] IDENTITY(1,1) NOT NULL primary key,
        [ParentID] [int] NULL,
        [Kind] [int] NULL,
        [CNName] [nvarchar](50) NOT NULL,
        [ENName] [nvarchar](50) NOT NULL,
        [Sort] [int] NOT NULL,
        [AddTime] [datetime],
    )

    再建一个属性内容表

    CREATE TABLE ProductAttrInfo
    (
        [ID] [int] IDENTITY(1,1) NOT NULL primary key,
        [ParentID] [int] NULL,
        [CNName] [nvarchar](50) NOT NULL,
        [Sort] [int] NOT NULL,
        [AddTime] [datetime] NOT NULL,
        [Color] [nvarchar](50) NULL,
    )

    产品表叫Product

    页面呈现效果为:

    其中的产品分类、形状、其他为动态的产品属性名称,对象相关的属性内容。

    我们首页要把相关的内容绑定,然后再根据传参,把相关的属性编号和内容编号,通过正则的方式找出来,然后把当前也是和属性内容的ID找出来,方便我们查询产品。

    /// <summary>
    /// 通过正则,把相关的属性ID拿到,然后判断属性名称ID的值即为属性值的ID值
    /// </summary>
    /// <param name="ids"></param>
    /// <returns></returns>
    protected int getAttrSql(int ids)
    {
        int value = 0;
        string url = Request.Url.ToString().ToLower();
        if (url.IndexOf("?") >= 0)
        {
            string index = url.Remove(0, url.IndexOf("?") + 1);
            string para = index.Replace("?", "");
            //切割成一个一个的参数并转换成SQL语句
            string[] ps = para.Split('&');
            string sql = "";
            for (int i = 0; i < ps.Length; i++)
            {
                string s = ps[i];
                //检查参数是否是pd*=d*开头的,如果是则认为这个参数是属性的参数
                if (System.Text.RegularExpressions.Regex.IsMatch(s, @"pd{1,}=d{1,}"))
                {
                    //去掉p切割成数字
                    string[] pp = s.Replace("p", "").Split('=');
                    int c = int.Parse(pp[0].ToString());
                    if (c == ids)
                    {
                        value = int.Parse(pp[1].ToString());
                        break;
                    }
                }
            }
        }
        return value;
    }
    /// <summary>
    /// 绑定相关属性名称和内容,其中参数one和two,我这里是一级二级产品编号,可以忽略,ParentID为一级产品分类的ID,Kind为二级产品分类的ID
    /// </summary>
    /// <param name="one"></param>
    /// <param name="two"></param>
    public void BindAttrInfo(Model.ProductType one, Model.ProductType two)
    {
        StringBuilder sb = new StringBuilder();
        //if (two != null)
        //{
        //    List<Model.ProductAttr> list = new BLL.ProductAttr().GetList(0, "CNName,ID", "ParentID=" + one.ID + " and Kind=" + two.ID + "", "Sort desc,AddTime desc");
        //    foreach (Model.ProductAttr l in list)
        //    {
        //        sb.AppendFormat("<dl class="clearfix"><dt>{0}</dt>", l.CNName);
        //        List<Model.ProductAttrInfo> list2 = new BLL.ProductAttrInfo().GetList(0, "CNName,ID", "Pid=" + l.ID + "", "Sort desc,AddTime desc");
        //        if (list2.Count > 0)
        //        {
        //            sb.AppendFormat("<dd><a href="{0}" {1}>全部</a>", getUrl("p" + l.ID.Value, ""), getAttrSql(l.ID.Value) <= 0 ? "class="cur"" : "");
        //            foreach (Model.ProductAttrInfo l2 in list2)
        //            {
        //                sb.AppendFormat("<a href="{0}" {1}>{2}</a>", getUrl("p" + l.ID.Value, l2.ID.Value.ToString()), getAttrSql(l.ID.Value) == l2.ID.Value ? "class="cur"" : "", l2.CNName);
        //            }
        //            sb.AppendFormat("</dd>");
        //        }
        //        sb.Append("</dl>");
        //    }
        //}
        //else
        //{
        List<Model.ProductType> twoType = new BLL.ProductType().GetList(0, "CNName,ID", "IsPass=1 and Kind=" + one.ID + "", "Sort desc,AddTime desc");
        if (twoType.Count > 0)
        {
            sb.AppendFormat("<dl class="clearfix"><dt>产品分类</dt><dd>");
            sb.AppendFormat("<a {1} href="/products/?ParentID={0}">全部</a>", one.ID, Kind <= 0 ? "class="cur"" : "");
            foreach (Model.ProductType l in twoType)
            {
                sb.AppendFormat("<a href="/products/?ParentID={0}&Kind={1}" {3}>{2}</a>", one.ID.Value, l.ID.Value, l.CNName, Kind == l.ID.Value ? "class="cur"" : "");
            }
            sb.AppendFormat("</dd></dl>");
        }
        List<Model.ProductAttr> list = new BLL.ProductAttr().GetList(0, "CNName,ID", "ParentID=" + one.ID + " and Kind=0", "Sort desc,AddTime desc");
        foreach (Model.ProductAttr l in list)
        {
            sb.AppendFormat("<dl class="clearfix"><dt>{0}</dt>", l.CNName);
            List<Model.ProductAttrInfo> list2 = new BLL.ProductAttrInfo().GetList(0, "CNName,ID", "Pid=" + l.ID + "", "Sort desc,AddTime desc");
            if (list2.Count > 0)
            {
                sb.AppendFormat("<dd><a href="{0}" {1}>全部</a>", getUrl("p" + l.ID.Value, ""), getAttrSql(l.ID.Value) <= 0 ? "class="cur"" : "");
                foreach (Model.ProductAttrInfo l2 in list2)
                {
                    sb.AppendFormat("<a href="{0}" {1}>{2}</a>", getUrl("p" + l.ID.Value, l2.ID.Value.ToString()), getAttrSql(l.ID.Value) == l2.ID.Value ? "class="cur"" : "", l2.CNName);
                }
                sb.AppendFormat("</dd>");
            }
            sb.Append("</dl>");
        }
        // }
        Lit_ProductAttrList.Text = sb.ToString();
    }
    /// <summary>
    /// 绑定产品
    /// </summary>
    public void BindProducts()
    {
        string where = "ParentID=" + ParentID + "";
        if (Kind > 0)
        {
            where += " and Kind=" + Kind + "";
    
            where += GetWhereAttr();
        }
        else
        {
    where += GetWhereAttr(); } string strOrder = "Sort desc,AddTime desc"; if (OrderBy == 1) { strOrder = "SaleNum desc,Sort desc,AddTime desc"; } else if (OrderBy == 2) { strOrder = "SalPrice,Sort desc,AddTime desc"; } Model.PageData<Model.Product> data = new BLL.Product().GetList(20, base.PageIndex, "", where, strOrder); repList.DataSource = data.DataSoure; repList.DataBind(); pgServer.RecordCount = data.Count; pgServer.UrlRewritePattern = getUrl("1", "1").Replace("#pro-list", "") + "&page={0}#pro-list"; pgServer.PageSize = 20; AllCount = data.Count; AllPage = data.PageCount; ThisPage = base.PageIndex; if (ThisPage < 1) { ThisPage = 1; } if (AllPage == 0) { ThisPage = 0; } pgServer.DataBind(); }
    /// <summary>
    /// 获取Url
    /// </summary>
    /// <param name="name"></param>
    /// <param name="value"></param>
    /// <returns></returns>
    protected string getUrl(string name, string value)
    {
        string url = System.Text.RegularExpressions.Regex.Replace(Request.Url.Query.Trim(), @"^?", "");
        url = System.Text.RegularExpressions.Regex.Replace(url, "^" + name + "=.*?&|" + name + "=.*?&", "", System.Text.RegularExpressions.RegexOptions.IgnoreCase);
        url = System.Text.RegularExpressions.Regex.Replace(url, "&{0,1}" + name + "=.*", "", System.Text.RegularExpressions.RegexOptions.IgnoreCase);
        url = System.Text.RegularExpressions.Regex.Replace(url, "^page=.*?&|page=.*?&", "", System.Text.RegularExpressions.RegexOptions.IgnoreCase);
        url = System.Text.RegularExpressions.Regex.Replace(url, "&{0,1}page=.*", "", System.Text.RegularExpressions.RegexOptions.IgnoreCase);
        if (url.Trim() == "")
        {
            return "/products/?" + name + "=" + value + "#pro-list";
        }
        return getReplaceUrl("/products/?" + name + "=" + value + "&" + url.Replace("#pro-list", "") + "#pro-list", "key");
    }
    /// <summary>
    /// 获取Url
    /// </summary>
    /// <param name="name"></param>
    /// <param name="value"></param>
    /// <returns></returns>
    protected string getReplaceUrl(string url, string name)
    {
        url = System.Text.RegularExpressions.Regex.Replace(url, "^" + name + "=.*?&|" + name + "=.*?&", "", System.Text.RegularExpressions.RegexOptions.IgnoreCase);
        url = System.Text.RegularExpressions.Regex.Replace(url, "^page=.*?&|page=.*?&", "", System.Text.RegularExpressions.RegexOptions.IgnoreCase);
        url = System.Text.RegularExpressions.Regex.Replace(url, "&{0,1}page=.*", "", System.Text.RegularExpressions.RegexOptions.IgnoreCase);
    
    
        return url;
    }
    /// <summary>
    /// 获取属性条件-绑定
    /// </summary>
    /// <returns></returns>
    protected string GetWhereAttr(string where)
    {
        string value = "";
        string url = Request.Url.ToString().ToLower();
        if (url.IndexOf("?") >= 0)
        {
            string index = url.Remove(0, url.IndexOf("?") + 1);
            string para = index.Replace("?", "");
            //切割成一个一个的参数并转换成SQL语句
            string[] ps = para.Split('&');
            string sql = "";
            for (int i = 0; i < ps.Length; i++)
            {
                string s = ps[i];
                //检查参数是否是pd*=d*开头的,如果是则认为这个参数是属性的参数
                if (System.Text.RegularExpressions.Regex.IsMatch(s, @"pd{1,}=d{1,}"))
                {
                    //去掉p切割成数字
                    string[] pp = s.Replace("p", "").Split('=');
                    int c = int.Parse(pp[1].ToString());
                    //c为属性内容的编号,根据程序自己做判断
                }
            }
        }
        return value;
    }
  • 相关阅读:
    洛谷P1508 Likecloud-吃、吃、吃 [2017年4月计划 动态规划10]
    洛谷P1855 榨取kkksc03 [2017年4月计划 动态规划 09]
    洛谷P1164 小A点菜 [2017年4月计划 动态规划08]
    洛谷P1244 [NOI2000] 青蛙过河 [2017年4月计划 动态规划07]
    洛谷P1757 通天之分组背包 [2017年4月计划 动态规划06]
    洛谷P1877 [HAOI2012]音量调节 [2017年4月计划 动态规划05]
    洛谷P1474 [USACO 2.3]货币系统 Money Systems [2017年4月计划 动态规划04]
    洛谷P1832 A+B Problem(再升级) [2017年4月计划 动态规划03]
    洛谷P1968 美元汇率[2017年4月计划 动态规划02]
    洛谷P2347 砝码称重 [2017年4月计划 动态规划01]
  • 原文地址:https://www.cnblogs.com/imluzhi/p/4844641.html
Copyright © 2011-2022 走看看