数据服务控件的嵌套最主要的是是内层控件数据的加载和事件的触发。 DataList嵌套的重点是要在外层DataList的ItemDataBound事件中用e.Item.FindControl方法来找到嵌套层 DataList的id,编写嵌套层DataList的绑定数据源事件。下面以两层DataList为例介绍下实现的过程。效果如下图:
---------前台html代码-------
--------后台cs代码------
内层控件数据绑定与事件声明在外层的ItemDataBind中实现
---------前台html代码-------
- <asp:datalistid="dlFileType"RepeatColumns="2"runat="server">
- <ItemTemplate>
- <tableborder="0"cellspacing="0"cellpadding="0">
- <tr>
- <tdwidth="22%"height="88"align="center"valign="top">
- <imgsrc='<%#DataBinder.Eval(Container.DataItem,"cnvcPicURL")%>'width="80"height="80">
- </td>
- <tdvalign="top">
- <tablewidth="96%"border="0"cellpadding="0"cellspacing="0">
- <trwidth="100%">
- <tdcolspan="2"><imgsrc='<%#PageBase.strStyleRoot+"/picture/pic_fwzn_08.gif"%>'height="20"><%#DataBinder.Eval(Container.DataItem,"cnvcTitle")%>
- <asp:Labelid="labFileType"runat="server"Visible=FalseText='<%#DataBinder.Eval(Container.DataItem,"cniFileTypeID")%>'>
- </asp:Label></td>
- </tr>
- <tr>
- <tdwidth="300">
- <asp:DataListid="dlFileList"runat="server"RepeatColumns="1"Width="100%">
- <ItemTemplate>
- <TABLEcellSpacing="1"cellPadding="1"width="100%"border="0">
- <tr>
- <tdwidth="7%"height="20"align="center">
- <imgsrc='<%#PageBase.strStyleRoot+"/picture/pic_fwzn_dot.gif"%>'width="3"height="3"></td>
- <tdwidth="93%">
- <fontcolor="#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>
- <tdcolspan="2"bgcolor="E6E6E6"height="1"><imgsrc='<%#PageBase.strStyleRoot+"/picture/1X1.gif"%>'width="1"></td>
- </tr>
- <tralign="center">
- <tdheight="22"colspan="2"><ahref="#"title="可查看到更多相关内容"><imgsrc='<%#PageBase.strStyleRoot+"/picture/more.gif"%>'width="34"height="11"border="0"></a></td>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- </ItemTemplate>
- </asp:datalist>
--------后台cs代码------
内层控件数据绑定与事件声明在外层的ItemDataBind中实现
- privatevoiddlFileType_ItemDataBound(objectsender,System.Web.UI.WebControls.DataListItemEventArgse)
- {
- if(e.Item.ItemType==ListItemType.Item||e.Item.ItemType==ListItemType.AlternatingItem)
- {
- DataListdl=null;
- LabellabTypeID=null;
-
- dl=(DataList)e.Item.FindControl("dlFileList")
- labTypeID=(Label)e.Item.FindControl("lbFileType");
- stringtypeID=labTypeID.Text.ToString();
- intiTypeID=Convert.ToInt32(typeID);
- stringcommandText="select*fromtbfile";
- commandText=commandText+"WhereTypeID="+iTypeID;
- //------------
- stringconnString=ConfigurationSettings.AppSettings["dsn"];
- SqlConnectionconn=newSqlConnection();
- conn.ConnectionString=connString;
- conn.Open();
- SqlDataAdaptermyCommand=newSqlDataAdapter(commandText,conn);
- DataSetds=newDataSet();
- myCommand.Fill(ds,"tbFile");
- conn.Close();
- //------------
- dl.DataSource=ds.Tables["tbFile"];;
- dl.DataBind();
- }
- }