我做datalist的嵌套,外层为main_dl,内层为x_dl,想让内层的newsid根据外层的root选择显示:前台:
<asp:datalist id=main_dl  runat="server"DataSource="<%# main_DS %>">
    <ItemTemplate>
       
       <%# DataBinder.Eval(Container.DataItem,"root") %>
       
       <asp:datalist id=x_dl runat="server">
           <ItemTemplate>
             <%# DataBinder.Eval(Container.DataItem,"newsid") %>
           </ItemTemplate>
       </asp:datalist>
    
   </ItemTemplate>
</asp:datalist>
后台:
c# 版:
DataView FilterData(string v) 

 da_z.Fill(DS_z, "news"); // DS_z的select已经在Page_Load中完成
 DataView dv = new DataView(DS_z.Tables("news")); 
 dv.RowFilter = "Title = " + v; 
 return dv; 
}
private void main_dl_ItemDataBound(object sender, System.Web.UI.WebControls.DataListItemEventArgs e)
{
    DataList dl=(e.Item.FindControl("x_dl") as DataList)
   dl.DataSource= FilterData(DataBinder.Eval  (Container.DataItem,"root").ToString   ()) //    这里出错
   dl.DataBind(); 
                  }
vb.net版:
Function FilterData(ByVal v As String) As DataView 
 da_z.Fill(DS_z, "news") 'DS_z的select已经在Page_Load中完成
 Dim dv As DataView = New DataView(DS_z.Tables("news")) 
 dv.RowFilter = "Title = " + v 
 Return dv 
End Function Private Sub main_dl_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DataListItemEventArgs) 
 Dim dl As DataList =CType(e.Item.FindControl("x_dl"), DataList) 
 dl.DataSource = FilterData(DataBinder.Eval(Container.DataItem, "root").ToString) //这里出错
 dl.DataBind 
End Sub出错的地方:
ds.DataSource= FilterData(DataBinder.Eval  (Container.DataItem,"root").ToString()) 
处提示:
Container未声明
请前辈帮我看看,好几天啦,有点崩溃,谢谢,谢谢

解决方案 »

  1.   

    相关参考看
    http://dotnet.aspx.cc/ShowDetail.aspx?id=149E5DD7-3B32-461e-ACC6-51D1652E6746
      

  2.   

    我的现在好像关键是ds.DataSource= FilterData(DataBinder.Eval  (Container.DataItem,"root").ToString()) 
    这句好像在后台调用Container.DataItem出错了!是不是要加点什么修饰呢?谢谢
      

  3.   

    private void main_dl_ItemDataBound(object sender, DataListItemEventArgs e)
    {
     if((e.Item.ItemType == ListItemType.Item) || 
                 (e.Item.ItemType == ListItemType.AlternatingItem))
     {
       DataList dl=(e.Item.FindControl("x_dl") as DataList)
       dl.DataSource= FilterData(DataBinder.Eval (e.Item.DataItem,"root").ToString());
       dl.DataBind(); 
     }
    }
      

  4.   

    啊!!!这个问题总算解决了!
    可是现在有除了点问题,内层的数据筛选不出来,我怀疑是不是
    Dim dv As DataView = New DataView(DS_z.Tables("news"))
    dv.RowFilter = "TopicID = " + v这里出错呢?
    我是想让内层(DS_z)显示,TopicID等于外层(main_DS)TopicID的所有记录字段的对应是正确的,请前辈们,看看,是不是还有那里要修饰一下
    谢谢  谢谢 前辈们指点,我实在看不出来
      

  5.   

    我把
    Dim dv As DataView = New DataView(DS_z.Tables("news"))
    dv.RowFilter = "TopicID = " + v改为了
     da_z.SelectCommand.Parameters(0).Value = v //以筛选出想要的内层数据
     Dim dv As DataView = New DataView(DS_z.Tables("news"))
     Return dv这样一改,第一格内层循环到是正确,可是以后的每个内层的值都又和第一个内层的值是完全相同的!!!这又是什么原因呢?
    真是奇了怪了!
      

  6.   

    http://www.javavsnet.com/bbs/view.aspx?id=502&boardid=16程序效果:
    http://db.chinacars.com/ShowBrand.aspx?manufacture_id=82
      

  7.   

    dl.DataSource= FilterData(DataBinder.Eval  (Container.DataItem,"root").ToString   ()) 改成
     dl.DataSource= FilterData(DataBinder.Eval  (e.item.DataItem,"root").ToString   ())