我想用DATALIST做一个树型目录 但是嵌套了DATALIST了以后 里面这个DATALIST没有任何数据,
<asp:datalist id="DataListMenuSort" runat="server" DataKeyField="Number" >
<ItemTemplate>
<SPAN class=menu id='<%# "zhugan_"+int.Parse(DataBinder.Eval(Container, "DataItem.Number").ToString()) %>' onclick='showdiv(<%# int.Parse(DataBinder.Eval(Container, "DataItem.Number").ToString()) %>)'>
<IMG height=18 src="../images/t_plus.gif" width=16 align=absMiddle name='<%# "image"+int.Parse(DataBinder.Eval(Container, "DataItem.Number").ToString()) %>'><IMG src="../images/close.gif" align=absMiddle border=0 name='<%# "img"+int.Parse(DataBinder.Eval(Container, "DataItem.Number").ToString()) %>'>
<%# DataBinder.Eval(Container, "DataItem.Title") %>
</SPAN>
<DIV id='<%# "subtree"+int.Parse(DataBinder.Eval(Container, "DataItem.Number").ToString()) %>' style="DISPLAY: none" noWrap>
<asp:DataList id="DataListMenu" runat="server">
<ItemTemplate>
<IMG src="../images/line_05.gif" align="absMiddle"><A href='<%# DataBinder.Eval(Container, "DataItem.FileName") %>'><%# DataBinder.Eval(Container, "DataItem.Title") %></A><BR>
</ItemTemplate>
</asp:DataList>
</DIV>
</ItemTemplate>
</asp:datalist>后台代码:
    protected void Page_Load(object sender, EventArgs e)
    {
        // 在此处放置用户代码以初始化页面
        //Components.Rights.CheckLogin();
        //--------------------------------------------------------------------------
        Dbconn.Database_Sql data = new Dbconn.Database_Sql();//数据库操作类
        //data.RunSql("select Rights from TbUser where id=" + Session["userid"], out userRights);
        if (userRights == "") userRights = "0";
        SqlDataReader dr;
        string SqlStr = "select * from TbioaRoleRightsType where mod<>'X' and exists (select number from TbioaRoleRights where TypeNumber=TbIoaRoleRightsType.number and FileName<>'')";
        data.RunSql(SqlStr, out dr);
        //设置网页栏目
        DataListMenuSort.DataSource = dr;
        DataListMenuSort.DataBind();
        //释放对象
        dr.Close();
        data.Dispose();
        //--------------------------------------------------------------------------    }
 private void DataListMenuSort_ItemDataBound(object sender, System.Web.UI.WebControls.DataListItemEventArgs e)
{
if(e.Item.ItemType==ListItemType.Item||e.Item.ItemType==ListItemType.AlternatingItem)
{
DataList DataListMenu=(DataList) e.Item.FindControl("DataListMenu");                Dbconn.Database_Sql data = new Dbconn.Database_Sql();//数据库操作类
SqlDataReader dr;
string SqlStr="select * from TbioaRoleRights where TypeNumber='"+DataListMenuSort.DataKeys[(int)e.Item.ItemIndex]+"' and FileName<>'' and mod<>'X'";
                Response.Write(SqlStr);
                data.RunSql(SqlStr,out dr); //设置网页栏目
DataListMenu.DataSource=dr;
DataListMenu.DataBind(); //释放对象
dr.Close();
data.Dispose();
}
} }
而且在 Page_Load  里面不能找到潜逃的DataListMenu,把DataListMenu放在DATALIST的外面就能找到,这个是怎么回事啊!!

解决方案 »

  1.   

    对嵌套后就不能直接找了DataList.Controls[] 或者DataList.FindControl()来找到他
      

  2.   

     private void DataListMenuSort_ItemDataBound(object sender, System.Web.UI.WebControls.DataListItemEventArgs e)
    {
    if(e.Item.ItemType==ListItemType.Item||e.Item.ItemType==ListItemType.AlternatingItem)
    {
    DataList DataListMenu=(DataList) e.Item.FindControl("DataListMenu");                Dbconn.Database_Sql data = new Dbconn.Database_Sql();//数据库操作类
    SqlDataReader dr;
    string SqlStr="select * from TbioaRoleRights where TypeNumber='"+DataListMenuSort.DataKeys[(int)e.Item.ItemIndex]+"' and FileName<>'' and mod<>'X'";
                    Response.Write(SqlStr);
                    data.RunSql(SqlStr,out dr); //设置网页栏目
    DataListMenu.DataSource=dr;
    DataListMenu.DataBind(); //释放对象
    dr.Close();
    data.Dispose();
    }
    } }我这样做了  但是没有值显示出来  这段代码有问题吗?