用Table中嵌套DataList,在DataList的ItemTemplate中加入Table很容易实现.

解决方案 »

  1.   

    <%@ Page Language="C#" %>
    <%@ Import Namespace="System.Data" %>
     
    <html>
       <script language = "C#" runat="server">
     
          ICollection CreateDataSource() 
          {
             DataTable dt = new DataTable();
             DataRow dr;
     
             dt.Columns.Add(new DataColumn("StringValue", typeof(string)));
      
             for (int i = 0; i < 10; i++) 
             {
                dr = dt.NewRow();
                dr[0] = "Channels " + i.ToString();
                dt.Rows.Add(dr);
             }
     
             DataView dv = new DataView(dt);
             return dv;
          }
     
          ICollection CreateDataSource2(int i) 
          {
             DataTable dt = new DataTable();
             DataRow dr;
       if(i<0) i = 0;
       
             dt.Columns.Add(new DataColumn("StringValue", typeof(string)));
      
            for(int m=0;m<5;m++)
            {
            dr = dt.NewRow();
            dr[0] = "Channel" + i.ToString() + "__Columns" + m.ToString();
    dt.Rows.Add(dr);
            }
     
             DataView dv = new DataView(dt);
             return dv;
          }      void Page_Load(Object sender, EventArgs e) 
          {
             if (!IsPostBack) 
             {
                DataList1.DataSource = CreateDataSource();
                DataList1.DataBind();            DataList2.DataSource = CreateDataSource2(0);
                DataList2.DataBind();
             }
          }
          
    void DataList1_ItemCommand(Object sender, DataListCommandEventArgs e) {
       DataList1.SelectedIndex = e.Item.ItemIndex;            DataList2.DataSource = CreateDataSource2(e.Item.ItemIndex);
                DataList2.DataBind();    
    }
       </script>
     
    <body>
     
       <form runat=server>      <h3>DataList Example</h3>
     
          <asp:DataList id="DataList1" runat="server"
               BorderColor="black"
               CellPadding="3"
               Font-Name="Verdana"
               RepeatLayout="Table"
               RepeatColumns="10"
               GridLines="Both"
               BorderWidth = 1
               RepeatDirection="Horizontal"
               Font-Size="8pt"
               OnItemCommand="DataList1_ItemCommand"
               >

    <SelectedItemStyle Font-Bold="True" ForeColor="#F7F7F7" BackColor="#738A9C"></SelectedItemStyle>         <HeaderStyle BackColor="#aaaadd">
             </HeaderStyle>         <AlternatingItemStyle BackColor="Gainsboro">
             </AlternatingItemStyle>         <HeaderTemplate>            Channels         </HeaderTemplate>
                   
             <ItemTemplate>
    <%# DataBinder.Eval(Container.DataItem, "StringValue") %>
    <br>
           <asp:LinkButton id="Select" runat="server" Text="Enter" CommandName="Select" /> 
                
             </ItemTemplate>
     
          </asp:DataList>
     
          <p>
          <hr noshade align="left" width="300px">
          <asp:DataList id="DataList2" runat="server"
               BorderColor="black"
               CellPadding="3"
               Font-Name="Verdana"
               RepeatLayout="Table"
               RepeatColumns="5"
               GridLines="Both"
               BorderWidth = 1
               RepeatDirection="Horizontal"
               Font-Size="8pt">         <HeaderStyle BackColor="#aaaadd">
             </HeaderStyle>         <AlternatingItemStyle BackColor="Gainsboro">
             </AlternatingItemStyle>         <HeaderTemplate>            Columns         </HeaderTemplate>
                   
             <ItemTemplate>            <%# DataBinder.Eval(Container.DataItem, "StringValue") %>         </ItemTemplate>
     
          </asp:DataList>   </form>
    <br><a href="mailto:[email protected]">mailto:[email protected]</a><br>
    </body>
    </html>
      

  2.   

    这个例子用datalist实现 主从关系 数据的现实,如果还有细节不符合要求,请联系mailto:[email protected]
      

  3.   

    我的意思是在父节点的datalist中嵌套一个子节点的相关信息,而不是你的点父节点然后在另外一个独立的datalist中显示子节点的信息。就是hbxtx(xy) 所说的那种意思,请大家不吝赐教啊!!!!
      

  4.   

    <%@ Page language="c#" Codebehind="index.aspx.cs" AutoEventWireup="false" Inherits="cqcnc.index" %>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
    <HTML>
    <HEAD>
    <title>index</title>
    <meta content="Microsoft Visual Studio 7.0" name="GENERATOR">
    <meta content="C#" name="CODE_LANGUAGE">
    <meta content="JavaScript" name="vs_defaultClientScript">
    <meta content="http://schemas.microsoft.com/intellisense/ie5" name="vs_targetSchema">
    <STYLE type="text/css">TD {
    FONT-SIZE: 9pt; LINE-HEIGHT: 15pt
    }
    A {
    TEXT-DECORATION: none
    }
    A:link {
    COLOR: #000000
    }
    A:visited {
    COLOR: #000000
    }
    A:active {
    COLOR: #000000
    }
    A:hover {
    COLOR: #cc0000; TEXT-DECORATION: underline
    }
    .t {
    BORDER-LEFT: #000000 1px solid; BORDER-BOTTOM: #000000 1px solid
    }
    </STYLE>
    </HEAD>
    <body MS_POSITIONING="GridLayout">
    <form id="index" method="post" runat="server">
    <table cellSpacing="0" cellPadding="0" width="760" align="center" border="0">
    <tr>
    <td vAlign="top"><IMG height="18" src="images/ind_02.gif" width="760" useMap="#Map3Map2" border="0"></td>
    </tr>
    <tr height="87">
    <td background="images/ind_03.gif" height="87">&nbsp;</td>
    </tr>
    <tr vAlign="top">
    <td>
    <table cellSpacing="0" cellPadding="0" width="100%" border="0">
    <tr>
    <td width="23%"><IMG height="27" src="images/ind_04.gif" width="214" useMap="#Map" border="0"></td>
    <td vAlign="top" width="77%" background="images/ind_05.gif">
    <div align="right">| <a href="http://w315.cqcnc.com/" target="_blank">用户服务中心</a> | <a href="http://mail.cqcnc.com/" target="_blank">
    免费邮箱</a> |<a href="http://www.cqnet.com.cn/" target="_blank"> 重庆网通</a> |</div>
    </td>
    </tr>
    </table>
    </td>
    </tr>
    <tr>
    <td><IMG height="2" src="images/ind_24.gif" width="417"></td>
    </tr>
    <tr>
    <td>
    <TABLE cellSpacing="0" cellPadding="0" width="100%" border="0">
    <TR vAlign="top" width="76%">
    <TD><asp:datalist id="DataList1" runat="server" RepeatColumns="3">
    <ItemTemplate>
    <FONT face="宋体">
    <TABLE id="Table1" cellSpacing="0" cellPadding="0" width="170" border="0">
    <TR>
    <TD background="images/185xt.gif" bgColor="#094b8c" height="25"><B><%# DataBinder.Eval(Container.DataItem, "name")%></B></TD>
    </TR>
    <TR>
    <TD vAlign="top" background="images/185xbg.gif">
    <TABLE id="Table2" cellSpacing="2" cellPadding="0" width="100%" align="center" border="0">
    <TR>
    <TD width="41%">
    <DIV align="center"><IMG height="80" src="images/60x-1.gif" width="60"></DIV>
    </TD>
    <TD width="59%">
    <TABLE id="Table3" cellSpacing="2" cellPadding="1" width="100%" align="center" background="images/textbg.gif" border="0">
    <TR>
    <TD height="3"></TD>
    </TR>
    <TR>
    <TD><A href="http://cncxp.cqcnc.com/" target="_blank"><FONT color="#ff0000"><%# DataBinder.Eval(Container.DataItem, "name")%></FONT></A></TD>
    </TR>
    <TR>
    <TD><A href="http://cq.mtvtop.net/"><%# DataBinder.Eval(Container.DataItem, "name")%></A></TD>
    </TR>
    <TR>
    <TD><A href="http://kpworld.cqcnc.com/" target="_blank"><%# DataBinder.Eval(Container.DataItem,"name")%></A></TD>
    ----这种位置希望使用一个datalist绑定子关系表中对应的记录的某些字段-- </TR>
    <TR>
    <TD><A href="http://210.51.8.174/vrcity/cq_in.htm" target="_blank">宽带梦网</A></TD>
    </TR>
    <TR>
    <TD><IMG height="10" src="images/arrow.gif" width="11" align="absMiddle">More</TD>
    </TR>
    <TR>
    <TD></TD>
    </TR>
    </TABLE>
    </TD>
    </TR>
    </TABLE>
    </TD>
    </TR>
    <TR>
    <TD vAlign="top"><IMG height="7" src="images/185xd.gif" width="180">
    </TD>
    </TR>
    </TABLE>
    </FONT>
    </ItemTemplate>
    </asp:datalist></TD>
    </TR>
    </TABLE>
    </td>
    </tr>
    </table>
    </form>
    </body>
    </HTML>
      

  5.   

    在ASPX文件中:
    <asp:DataList id="dlChanel" ...>
    <ItemTemplate>
    <Asp:LinkButton id="lblChanelName" CommandName="<%#绑定到Chanel编号%>"... />
    <asp:DataList id="dlLanmu" ...>
    <ItemTemplate>
    ...
    </ItemTemplate>
    </asp:DataList>
    </ItemTemplate>
    </asp:DataList>在后台代码中:
    private void ChanelBind()//Chanel数据绑定
    {
    ...
    }
    设置对象dlChanel的事件ItemBound到下面的方法:
    private void LanmuBind(object sender, ... e)//绑定相应Chanel的栏目,e的类型忘记了,系统会自动产生
    {
    DataList dlTemp=(DataList)e.Item.FindControl("dlLanmu");
    //下面通过当前栏目ID绑定数据到dlLanmu
    ...
    }
      

  6.   

    下面是窗体文件:<%@ Control Language="c#" AutoEventWireup="false" Codebehind="menuLayer.ascx.cs" Inherits="GEOAS.MainFile.menuLayer" TargetSchema="http://schemas.microsoft.com/intellisense/ie5" %>
    <script language="javascript" src="mainmenu.js"></script>
    <asp:Repeater id="GeoMenuLayer" runat="server">
    <ItemTemplate>
    <div id='<%#"menulayer"+DataBinder.Eval(Container,"ItemIndex")+"Div"%>'>
    <div id='<%#"iconlayer"+DataBinder.Eval(Container,"ItemIndex")+"Div"%>'>
    <asp:DataList id="MenuLayerLMItem" runat="server">
    <ItemTemplate>
    <TABLE id="Table1" cellSpacing="0" cellPadding="0" width="100%" border="0">
    <TR>
    <TD height="8"></TD>
    </TR>
    <TR>
    <TD vAlign="center" align="middle" height="32">
    <img src='<%# this.ItemImageUrl(DataBinder.Eval(Container, "DataItem.项目ID").ToString()) %>' style="cursor:hand" onclick='javascript:frmMainHrefChange(<%#DataBinder.Eval(Container, "DataItem.项目ID").ToString().Substring(4,4)%>)'; Height="32px" Width="32px"></TD>
    </TR>
    <TR>
    <TD height="8"></TD>
    </TR>
    <TR>
    <TD vAlign="center" align="middle">
    <a style="FONT-SIZE: 9pt; COLOR: blue" target="frmMain" href='<%#"./GotoPage.Aspx?id="+DataBinder.Eval(Container, "DataItem.项目ID").ToString().Substring(4,4)%>'>
    <%# DataBinder.Eval(Container, "DataItem.项目名称").ToString().Trim() %>
    </a>
    </TD>
    </TR>
    <TR>
    <TD height="8"></TD>
    </TR>
    </TABLE>
    </ItemTemplate>
    </asp:DataList>
    </div>
    <div id='<%#"uplayer"+DataBinder.Eval(Container,"ItemIndex")+"Div"%>'>
    <img src='images/scrollup.gif' title='更多' width="16" height="16" onMouseDown="javascript:this.src='images/scrollup2.gif';menuscrollup()" onMouseUp="javascript:this.src='images/scrollup.gif';menuscrollstop()" onMouseOut="javascript:this.src='images/scrollup.gif';menuscrollstop()">
    </div>
    <div id='<%#"downlayer"+DataBinder.Eval(Container,"ItemIndex")+"Div"%>'>
    <img src='images/scrolldown.gif' title='更多' width="16" height="16" onMouseDown="javascript:this.src='images/scrolldown2.gif';menuscrolldown()" onMouseUp="javascript:this.src='images/scrolldown.gif';menuscrollstop()" onMouseOut="javascript:this.src='images/scrolldown.gif';menuscrollstop()">
    </div>
    </div>
    </ItemTemplate>
    </asp:Repeater>
    <script language="javascript">
    function frmMainHrefChange(obj)
    {
    var strID=obj+"";
    switch(strID.length)
    {
    case 1:
    strID="000"+obj;
    break;
    case 2:
    strID="00"+obj;
    break;
    case 3:
    strID="0"+obj;
    break;
    default:
    break;
    }
    var hrefString="./GotoPage.Aspx?id="+strID;
    frmMain.location=hrefString;
    }
    </script>
      

  7.   

    下面是代码:namespace GEOAS.MainFile
    {
    using System;
    using System.Data;
    using System.Drawing;
    using System.Web;
    using System.Web.UI.WebControls;
    using System.Web.UI.HtmlControls; /// <summary>
    /// menuLayer 的摘要说明。
    /// </summary>
    public abstract class menuLayer : System.Web.UI.UserControl
    {
    protected System.Web.UI.WebControls.Repeater GeoMenuLayer;
    private string strDBName="GDEESystem";
    private string strUserID="SuperAdmin"; private void Page_Load(object sender, System.EventArgs e)
    {
    // 在此处放置用户代码以初始化页面
    DataSet ds=GeoClass.Function.GetDataSet("select * from GDEE_LM order by 栏目ID",new GeoClass.SqlParameterArrayList(),this.strDBName);
    int lmCount=ds.Tables[0].Rows.Count;
    Response.Write("<script language=javascript>\rintMenuNum="+lmCount+";\robjMenuParentID='"+this.Parent.ClientID+"';\r"+@"</script>"+"\r");
    ds.Tables[0].Rows[0]["栏目名称"]="快捷方式";
    this.GeoMenuLayer.DataSource=ds.Tables[0];
    this.GeoMenuLayer.DataBind();
    ds.Dispose();
    } #region Web Form Designer generated code
    override protected void OnInit(EventArgs e)
    {
    //
    // CODEGEN:该调用是 ASP.NET Web 窗体设计器所必需的。
    //
    InitializeComponent();
    base.OnInit(e);
    }

    /// 设计器支持所需的方法 - 不要使用
    /// 代码编辑器修改此方法的内容。
    /// </summary>
    private void InitializeComponent()
    {
    this.GeoMenuLayer.ItemDataBound += new System.Web.UI.WebControls.RepeaterItemEventHandler(this.GeoMenuLayer_ItemDataBound);
    this.Load += new System.EventHandler(this.Page_Load); }
    #endregion private void GeoMenuLayer_ItemDataBound(object sender, System.Web.UI.WebControls.RepeaterItemEventArgs e)
    {
    DataList dlTemp=(DataList)(e.Item.FindControl("MenuLayerLMItem"));
    string strLMID=((DataRowView)(e.Item.DataItem))["栏目ID"].ToString().Trim();
    string strQuery="select GDEE_XM.项目ID,GDEE_XM.项目文件,GDEE_XM.项目名称 from GDEE_XM Inner Join GDEE_Right ON (GDEE_XM.项目ID=GDEE_Right.项目ID) where GDEE_Right.用户ID='"+this.strUserID+"' And GDEE_Right.访问权限>0 And GDEE_XM.所属栏目='"+strLMID+"'";
    if(strLMID=="LM00")
    strQuery="select GDEE_XM.项目ID,GDEE_XM.项目文件,GDEE_XM.项目名称 from GDEE_XM Inner Join GDEE_Right ON (GDEE_XM.项目ID=GDEE_Right.项目ID) where GDEE_Right.用户ID='"+this.strUserID+"' And GDEE_Right.快捷方式>0 And GDEE_Right.访问权限>0";
    DataSet ds=GeoClass.Function.GetDataSet(strQuery,new GeoClass.SqlParameterArrayList(),this.strDBName);
    dlTemp.DataSource=ds.Tables[0];
    dlTemp.DataBind();
    ds.Dispose();
    }
    protected string ItemImageUrl(string strItemID)
    {
    return @"./../Image.Aspx?DataBase="+this.strDBName+"&Table=GDEE_XM&ImageField=项目图标&IDField=项目ID&IDValue="+strItemID;
    }
    }
    }
      

  8.   

    下面是代码:namespace GEOAS.MainFile
    {
    using System;
    using System.Data;
    using System.Drawing;
    using System.Web;
    using System.Web.UI.WebControls;
    using System.Web.UI.HtmlControls; /// <summary>
    /// menuLayer 的摘要说明。
    /// </summary>
    public abstract class menuLayer : System.Web.UI.UserControl
    {
    protected System.Web.UI.WebControls.Repeater GeoMenuLayer;
    private string strDBName="GDEESystem";
    private string strUserID="SuperAdmin"; private void Page_Load(object sender, System.EventArgs e)
    {
    // 在此处放置用户代码以初始化页面
    DataSet ds=GeoClass.Function.GetDataSet("select * from GDEE_LM order by 栏目ID",new GeoClass.SqlParameterArrayList(),this.strDBName);
    int lmCount=ds.Tables[0].Rows.Count;
    Response.Write("<script language=javascript>\rintMenuNum="+lmCount+";\robjMenuParentID='"+this.Parent.ClientID+"';\r"+@"</script>"+"\r");
    ds.Tables[0].Rows[0]["栏目名称"]="快捷方式";
    this.GeoMenuLayer.DataSource=ds.Tables[0];
    this.GeoMenuLayer.DataBind();
    ds.Dispose();
    } #region Web Form Designer generated code
    override protected void OnInit(EventArgs e)
    {
    //
    // CODEGEN:该调用是 ASP.NET Web 窗体设计器所必需的。
    //
    InitializeComponent();
    base.OnInit(e);
    }

    /// 设计器支持所需的方法 - 不要使用
    /// 代码编辑器修改此方法的内容。
    /// </summary>
    private void InitializeComponent()
    {
    this.GeoMenuLayer.ItemDataBound += new System.Web.UI.WebControls.RepeaterItemEventHandler(this.GeoMenuLayer_ItemDataBound);
    this.Load += new System.EventHandler(this.Page_Load); }
    #endregion private void GeoMenuLayer_ItemDataBound(object sender, System.Web.UI.WebControls.RepeaterItemEventArgs e)
    {
    DataList dlTemp=(DataList)(e.Item.FindControl("MenuLayerLMItem"));
    string strLMID=((DataRowView)(e.Item.DataItem))["栏目ID"].ToString().Trim();
    string strQuery="select GDEE_XM.项目ID,GDEE_XM.项目文件,GDEE_XM.项目名称 from GDEE_XM Inner Join GDEE_Right ON (GDEE_XM.项目ID=GDEE_Right.项目ID) where GDEE_Right.用户ID='"+this.strUserID+"' And GDEE_Right.访问权限>0 And GDEE_XM.所属栏目='"+strLMID+"'";
    if(strLMID=="LM00")
    strQuery="select GDEE_XM.项目ID,GDEE_XM.项目文件,GDEE_XM.项目名称 from GDEE_XM Inner Join GDEE_Right ON (GDEE_XM.项目ID=GDEE_Right.项目ID) where GDEE_Right.用户ID='"+this.strUserID+"' And GDEE_Right.快捷方式>0 And GDEE_Right.访问权限>0";
    DataSet ds=GeoClass.Function.GetDataSet(strQuery,new GeoClass.SqlParameterArrayList(),this.strDBName);
    dlTemp.DataSource=ds.Tables[0];
    dlTemp.DataBind();
    ds.Dispose();
    }
    protected string ItemImageUrl(string strItemID)
    {
    return @"./../Image.Aspx?DataBase="+this.strDBName+"&Table=GDEE_XM&ImageField=项目图标&IDField=项目ID&IDValue="+strItemID;
    }
    }
    }
      

  9.   

    说明:1——
    上面的代码使用了REPEATER,同DATALIST类似。2——
    这个代码中,我在对LM(相当于你的CHANEL)菜单进行绑定后,读取LM的数量,然后通过LM的Items[i]来FindControl(XM),这里XM相当于你的lanmu,XM是你在CHANEL中放置的DATALIST的ID,然后再绑定数据。
    你可以把这部分代码放到CHANEL的ITEMDATABOUND事件中进行处理,这样就不用获取CHANEL的数量了。