• 牛腩购物14:商品相关表的设计 后台增加用户管理 Eval高级应用 商品类别无限分类,外键的建立,repeater嵌套repeater


    Eval高级应用:1:用于显示时间  2:作为函数的参数  3:参数化显示?

    <%#Eval("createdate","{0:yyyy年MM月dd日 HH时mm分ss秒}")%>
    
    <%#Eval("type").ToString() == "normal" ? "普通会员" : "VIP会员"%>
    
    <%# GetLoginCount(Eval("username").ToString())%>
    
    //获取登陆次数
            protected string  GetLoginCount(string username)
            {
                return new Niunan.Shop.DAL.Login_logDAO().ClacCount("username ='" + username + "'").ToString(); ;
            }
    
    <%#Eval("amount","{0:c}")%>
    

    商品类别无限分类

    商品类别表和商品详情表

    shop_category : id,caname,pid,createdate  这里的pid就是父层的id

    shop_product:id,createdate,proname,proimg,marketprice,memberprice,vipprice,state,guige,danwei,caid,prodesc,istj,isxp,isvip

    shop_propl:id,createdate,username,title,body,pj,ip,proid

    现在开始去数据库创建表:

    image

    这里住一个一个小细节,比如我们给一个 nvarchar 的字段一个默认值为 none.jpg   他会默认变为   N'none.jpg'  这里为什么有N呢?因为N表示 nvarchar,那后面的2个单引号呢?为什么不是双引号呢?字符串不是双引号么?  那是因为 SQL 中单引号表示字符串的开始和结束符号

    如果希望默认值为空,那么就用 '' 来表示 ,  如果是null  那就是用 null   ,空和null是不一样的。

     

    价格用 decimal(18, 2) 来表示,表示最长有18位整数,2位小数

    外键的建立:外键:是本身表的一个字段,但是和另外一个表的主键想对应。

    image

    image

    image

    当我们的类别表,商品表和商品评论表都建立完毕后,开始使用动软生成器,生成3张表的 Model 层代码 和 DAL 层代码

    image

    将生成的代码考入到  项目中。下面建立后台的,产品分类页面。把增删查改,都放在这个页面。

    repeater 里面 绑定  repeater

    比如  我们先要循环输出大类,然后需要循环输出大类下面的小类。这个时候就需要嵌套 repeater 了

    image

    重点:1  外面的repeater循环的时候,里面的repeater的值如何获取?  我们选中外面的 repeater ,点击属性。选择  ItemDataBound,双击

    image

    //绑定二级类别
    protected void rep0_ItemDataBound(object sender, RepeaterItemEventArgs e)
    {
        if (e.Item.ItemType==ListItemType.AlternatingItem || e.Item.ItemType==ListItemType.Item)
        {
            Button btnEdit = e.Item.FindControl("btnEdit") as Button;
            string pid = btnEdit.CommandArgument;
            Repeater rep1 = e.Item.FindControl("rep1") as Repeater;
            rep1.DataSource = new Niunan.Shop.DAL.CategoryDAO().GetListArray("pid=" + int.Parse(pid));
            rep1.DataBind();
        }
    }
    

    这里的e.Item.ItemType==ListItemType.AlternatingItem || e.Item.ItemType==ListItemType.Item

    ----指触发对象的类型是repeater里的基本行或是替换行(简单的说是repeater里的所有数据项内容)

    2:在嵌套的repeater的文本框,如果有修改。如何获取嵌套的 repeater 的子 repeater 的TextBox 文本的值?》

    //修改类别
            protected void Edit(object senders, EventArgs s)
            {
                string id = (senders as Button).CommandArgument;
                //如何查找这个文本的值呢?首先,我们找到刚才的这个button的上一级元素 NamingContainer 
                //实际这个控件就是 然后再在这个控件里面 通过  FindControl 我们的 TextBox 的名字来获取值
                string caname=((senders as Button).NamingContainer.FindControl("txtCaname") as TextBox).Text.ToString();
    
                Niunan.Shop.Model.Category camo = cadao.GetModel(int.Parse(id));
                if (camo!=null)
                {
                    camo.caname = caname;
                    cadao.Update(camo);
                }
                //修改成功之后,重新跳转到本页面
                Response.Redirect(Request.Url.ToString());
            }
    下面是 前台的代码。
    

    image

  • 相关阅读:
    刷题86—动态规划(三)
    刷题85—动态规划(二)— 股票6道
    刷题84—动态规划(一)
    刷题83——硬币
    刷题82——二叉树的右视图
    刷题81——统计「优美子数组」
    android adb 流程原理代码分析(一)
    android默认开启adb调试方法分析
    recovery 下界面UI旋转90 180 270修改
    sublime使用Package Control不能正常使用的解决办法
  • 原文地址:https://www.cnblogs.com/iceicebaby/p/2400710.html
Copyright © 2020-2023  润新知