牛腩购物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

posted @ 2012-03-16 17:53  asp_net老友记  阅读(700)  评论(0编辑  收藏  举报