数据服务控件的嵌套最主要的是是内层控件数据的加载和事件的触发。 DataList嵌套的重点是要在外层DataList的ItemDataBound事件中用e.Item.FindControl方法来找到嵌套层DataList的id,编写嵌套层DataList的绑定数据源事件。下面以两层DataList为例介绍下实现的过程。效果如下图:
---------前台html代码-------
---------前台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" >< a 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 >
< 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" >< a 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();
}
}
{
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 >
<% # DataBinder.Eval(Container, "DataItem.city") %>
</ ItemTemplate >
</ asp:DataList >
</ ItemTemplate >
</ asp:DataList >
</ form >
</ body >
</ 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 >
<% # 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#region Web Form Designer generated code
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: This call is required by the ASP.NET Web Form Designer.
//
InitializeComponent();
base.OnInit(e);
}
/**//// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
}
{
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#region Web Form Designer generated code
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: This call is required by the ASP.NET Web Form Designer.
//
InitializeComponent();
base.OnInit(e);
}
/**//// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
}
3.演示数据库/Files/singlepine/area1.rar