DataList嵌套DataList

 数据服务控件的嵌套最主要的是是内层控件数据的加载和事件的触发。 DataList嵌套的重点是要在外层DataList的ItemDataBound事件中用e.Item.FindControl方法来找到嵌套层DataList的id,编写嵌套层DataList的绑定数据源事件。下面以两层DataList为例介绍下实现的过程。效果如下图:


---------前台html代码-------
< asp:datalist  id ="dlFileType"  RepeatColumns ="2"  runat ="server" >
    
< ItemTemplate >
        
< table  border ="0"  cellspacing ="0"  cellpadding ="0" >
            
< tr >
                
< td  width ="22%"  height ="88"  align ="center"  valign ="top" >
                    
< img  src ='<%#DataBinder.Eval(Container.DataItem,  "cnvcPicURL")% > ' width="80"  height="80">
                
</ td >
                
< td  valign ="top" >
                    
< table  width ="96%"  border ="0"  cellpadding ="0"  cellspacing ="0" >
                        
< tr  width ="100%" >
                            
< td  colspan ="2" >< img  src ='<%#PageBase.strStyleRoot+"/picture/pic_fwzn_08.gif"% > ' width="154" height="20">
                                
< asp:Label  id ="labFileType"  runat ="server"  Visible =False  Text ='<%#  DataBinder.Eval(Container.DataItem,"cniFileTypeID")% > '>
                                
</ asp:Label ></ td >
                        
</ tr >
                        
< tr >
                            
< td  width ="300" >
                                
< asp:DataList  id ="dlFileList"  runat ="server"  RepeatColumns ="1"  Width ="100%" >
                                    
< ItemTemplate >
                                        
< TABLE  cellSpacing ="1"  cellPadding ="1"  width ="100%"  border ="0" >
                                            
< tr >
                                                
< td  width ="7%"  height ="20"  align ="center" >
                                                    
< img  src ='<%#PageBase.strStyleRoot+"/picture/pic_fwzn_dot.gif"% > ' width="3" height="3"> </ td >
                                                
< td  width ="93%" >
                                                    
< font  color ="#393939" >
                                                        
<% #GetTitle((string)Convert.ToString(DataBinder.Eval(Container.DataItem, "cnvcTitle")),(string)Convert.ToString(DataBinder.Eval(Container.DataItem, "cnvcFileType")),(string)Convert.ToString(DataBinder.Eval(Container.DataItem, "cniBaseFileID")),(DateTime)DataBinder.Eval(Container.DataItem, "cndtPublishTime")) %>
                                                    
</ font >
                                                
</ td >
                                            
</ tr >
                                        
</ TABLE >
                                    
</ ItemTemplate >
                                
</ asp:DataList >
                            
</ td >
                        
</ tr >
                        
< tr >
                            
< td  colspan ="2"  bgcolor ="E6E6E6"  height ="1" >< img  src ='<%#PageBase.strStyleRoot+"/picture/1X1.gif"% > ' width="1" > </ td >
                        
</ tr >
                        
< tr  align ="center" >
                            
< td  height ="22"  colspan ="2" >< href ="#"  title ="可查看到更多相关内容" >< img  src ='<%#PageBase.strStyleRoot+"/picture/more.gif"% > ' width="34" height="11" border="0"> </ a ></ td >
                        
</ tr >
                    
</ table >
                
</ td >
            
</ tr >
        
</ table >
    
</ ItemTemplate >
</ asp:datalist >

--------后台cs代码------
内层控件数据绑定与事件声明在外层的ItemDataBind中实现

private   void  dlFileType_ItemDataBound( object  sender, System.Web.UI.WebControls.DataListItemEventArgs e)
        {
         
       if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) 
            {
                  DataList   dl 
=   null ;
                 Label   labTypeID 
=   null ;
                
                 dl 
=  (DataList)e.Item.FindControl( " dlFileList " )
                labTypeID 
=  (Label)e.Item.FindControl( " lbFileType " );

                
string  typeID  =  labTypeID.Text.ToString();
      
int  iTypeID  =  Convert.ToInt32(typeID);

    string commandText = "select * from tbfile";
    commandText = commandText + " Where TypeID=" + iTypeID;
    //------------
    string connString = ConfigurationSettings.AppSettings["dsn"];
                 SqlConnection conn = new SqlConnection();
    conn.ConnectionString = connString;
    conn.Open();
    SqlDataAdapter  myCommand = new SqlDataAdapter(commandText,conn);
    DataSet ds = new DataSet();
    myCommand .Fill(ds,"tbFile");
    conn.Close();
    //------------

         
         dl.DataSource  =  ds.Tables["tbFile"];;
                 dl.DataBind();
              }

        }

如果“labFileType”控件只是为了传递cniFileTypeID值,cs代码里获取typeID的代码可以改为:
int iTypeID = (int)DataBinder.Eval(e.Item.DataItem, "cniFileTypeID"); 
 

-------------------------------------------------------------------------------------------------------------------------------------------------

另一形式:


1.html代码

< HTML >
    
< HEAD >
        
< title > NestedDataLists </ title >
        
< meta  name ="GENERATOR"  Content ="Microsoft Visual Studio .NET 7.1" >
        
< meta  name ="CODE_LANGUAGE"  Content ="C#" >
        
< meta  name ="vs_defaultClientScript"  content ="JavaScript" >
        
< meta  name ="vs_targetSchema"  content ="http://singlepine.cnblogs.com/" >
    
</ HEAD >
    
< body  MS_POSITIONING ="GridLayout" >
        
< form  id ="Form1"  method ="post"  runat ="server" >
            
< asp:DataList  runat ="server"  Id ="dlCategories"  GridLines ="Both"  Bordercolor ="black"  cellpadding ="3"
                cellspacing
="0"  Headerstyle-BackColor ="#DDDDDD"  Headerstyle-Forecolor ="#777777"  Headerstyle-Font-Name ="Arial"
                Headerstyle-Font-Size
="14"  Headerstyle-Font-Bold ="true"  Font-Name ="Arial"  Font-Bold ="true"
                Font-Italic
="true"  Font-Size ="11"  ForeColor ="Red"  RepeatColumns ="1" >
                
< HeaderTemplate >
                    省市 & 市区
                
</ HeaderTemplate >
                
< ItemTemplate >
                    
<% # DataBinder.Eval(Container, "DataItem.province" %>
                    
< br >
                    
< asp:DataList  runat ="server"  Id ="ChildDataList"  GridLines ="None"  Bordercolor ="black"  cellpadding ="3"  cellspacing ="0"  Headerstyle-BackColor ="#8080C0"  Headerstyle-Font-Name ="Arial"  Headerstyle-Font-Size ="8"  Font-Name ="Arial"  Font-Size ="8"  datasource ='<%#  DataBinder.Eval(Container, "DataItem.myrelation") % > ' RepeatColumns="5">
                        
< ItemTemplate >
                            
&nbsp;   &nbsp;
                            
<% # DataBinder.Eval(Container, "DataItem.city" %>
                        
</ ItemTemplate >
                    
</ asp:DataList >
                
</ ItemTemplate >
            
</ asp:DataList >
        
</ form >
    
</ body >
</ HTML >

2.cs代码

public   class  NestedDataLists : System.Web.UI.Page
    
{
        
protected System.Web.UI.WebControls.DataList dlCategories;
    
        
private void Page_Load(object sender, System.EventArgs e)
        
{
            
string constring=System.Configuration.ConfigurationSettings.AppSettings["ConnectionString"];
            
            DataSet ds
=new DataSet();
            
string sql1="select * from province";
            SqlDataAdapter    sda1 
=new SqlDataAdapter(sql1,constring);
            sda1.Fill(ds,
"province");

            
string sql2="select * from city";
            SqlDataAdapter    sda2 
=new SqlDataAdapter(sql2,constring);
            sda2.Fill(ds,
"city");
            
            ds.Relations.Add(
"myrelation", ds.Tables["province"].Columns["provinceID"], ds.Tables["city"].Columns["father"]);
            dlCategories.DataSource
=ds.Tables["province"].DefaultView;
            dlCategories.DataBind();
        }

        
        
Web Form Designer generated code
    }

3.演示数据库/Files/singlepine/area1.rar

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值