惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

P
Proofpoint News Feed
U
Unit 42
V
Visual Studio Blog
D
DataBreaches.Net
F
Fortinet All Blogs
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
The GitHub Blog
The GitHub Blog
Y
Y Combinator Blog
月光博客
月光博客
大猫的无限游戏
大猫的无限游戏
T
The Blog of Author Tim Ferriss
GbyAI
GbyAI
博客园 - 叶小钗
Blog — PlanetScale
Blog — PlanetScale
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
MongoDB | Blog
MongoDB | Blog
The Cloudflare Blog
云风的 BLOG
云风的 BLOG
D
Docker
G
Google Developers Blog
罗磊的独立博客
博客园 - 三生石上(FineUI控件)
小众软件
小众软件
S
SegmentFault 最新的问题

博客园 - 使名扬

vs.net 2005 C# WinForm GroupBOX 的BUG?尝试读取或写入受保护的内存。这通常指示其他内存已损坏 windows2003双网卡安装openmeetings成功后登录页空白 access top order by的逻辑问题 解决vs2005中文乱码问题 登录失败:用户帐户限制。可能的原因包括不允许空密码,登录时间限制,或强制的策略限制。 - 使名扬 - 博客园 gridview中如何添加对某行删除时的确认提示框 VS2008 母版页嵌套母版页,下级母版页不执行Page_Load解决方法 - 使名扬 - 博客园 360会导致MSDN "无法显示该网页" - 使名扬 - 博客园 asp.net下使用FCKeditor 2.6.6 in ,exists ,join sql server 2000中了解各表的记录数 oracle树形sql查询 谨慎使用windows 2003 64位版 带日期,时间和闰年验证的正则式 关于vs.net 2003向vs.net 2005迁移后,注册事件丢失,"并不包含...的定义" 的解决方法 - 使名扬 走进非洲,发现全错了-关于sqlserver2000下全球化网站生僻语种sql查询的解决方案 MSDN上关于sqlserver 万能分页原理实现的一个致命错误 BUGReport:datagrid带模板列绑定空数据集出错的问题 Asp.net 2.0 Webpart 数据库的迁移
DataList父子嵌套
使名扬 · 2010-09-25 · via 博客园 - 使名扬

比如为了实现以下嵌套效果

★ 人★
    男人  女人   老人
    小孩
★ 动物★
     狗  猫  
★ 水果★
    apple  香焦  西瓜
    菠萝   葡萄

代码

           <!--主菜单开始-->
           
<ASP:datalist id="Datalist1" runat="server" RepeatDirection="Horizontal" RepeatColumns="1"
            Width
="100%" OnItemDataBound="Datalist1_ItemDataBound">
            
<ItemTemplate>
             ★
<href='product_type_detail.aspx?id=<%# DataBinder.Eval(Container.DataItem,"typeid") %>'>
             
<%# DataBinder.Eval(Container.DataItem,"typename"%></a><br/>
             
<!--子菜单开始-->
              
<asp:datalist id="Datalist2" Width="100%" runat="server" RepeatColumns="3" RepeatDirection="Horizontal">
               
<ItemTemplate>
                
<href='product_type_detail.aspx?id=<%# DataBinder.Eval(Container.DataItem,"typeid") %>'>
                     
<%# DataBinder.Eval(Container.DataItem, "typename")%></a>                    
               
</ItemTemplate>
              
</asp:datalist>
             
<!--子菜单结束-->
            
</ItemTemplate>
           
</asp:datalist>
           
<!--主菜单结束-->

后台:

(1)为主DataList绑定主数据。

        void MyBind()
        {
            DBHelper helper = new DBHelper();
            string sql = "select typeid,pid,typename from product_type where typelevel=1 order by ordernum ";

            DataSet ds = new DataSet();
            ds = helper.ExecuteDataSet(sql);

            Datalist1.DataSource = ds;
            Datalist1.DataBind();
        }

(2)为子DataList绑定数据。

DataList嵌套的重点是要在外层DataList的ItemDataBound事件中完成对嵌套DataList的绑定。在主DataList的ItemDataBound事件中用e.Item.FindControl方法来找到嵌套层DataList的id,完后为该id绑定数据

        protected void Datalist1_ItemDataBound(object sender, DataListItemEventArgs e)
        {
            if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
            {
                DataList Datalist2 = (DataList)e.Item.FindControl("Datalist2");
                DataRowView rowv = (DataRowView)e.Item.DataItem;
                int pid = Convert.ToInt32(rowv["typeid"]);

                if (pid > 0)
                {
                    DBHelper helper = new DBHelper();
                    string sql = "select typeid,pid,typename from product_type where pid=" + pid;

                    DataSet ds = new DataSet();
                    ds = helper.ExecuteDataSet(sql);

                    if (ds != null)
                    {
                        try
                        {

                            Datalist2.DataSource = ds;
                            Datalist2.DataBind();
                        }
                        catch (Exception ex)
                        {
                            throw new Exception(ex.Message);
                        }
                    }
                }
            }
        }