我有两个datalist对象,外层的为main_dl,内层的为x_dl
我现在想让main_dl中的root,  决定x_dl中显示的news,该如何操作呢?<asp:datalist id=main_dl  runat="server"DataSource="<%# main_DS %>">
    <ItemTemplate>
       
       <%# DataBinder.Eval(Container.DataItem,"root") %>
       
       <asp:datalist id=x_dl runat="server"DataSource="<%# x_DS %>">
           <ItemTemplate>
             <%# DataBinder.Eval(Container.DataItem,"news") %>
           </ItemTemplate>
       </asp:datalist>
    
   </ItemTemplate>
</asp:datalist>
谢谢前辈们!

解决方案 »

  1.   

    能不能根据ROOT的值查找数据库然后绑定子DATALIST的数据
      

  2.   

    在Datalist1中放LinkButton,数据绑定 root;
    那么在
    private void Datalist1_SelectedIndexChanged(object sender, System.EventArgs e)
    {
    以下加入:
    string aaa=((LinkButton)Datalist1.Items[Datalist1.SelectedIndex).FindControl("root所在的LinkButton的id")).Text;
    sql="select * from news where root='"+aaa+"'
    连接远程数据库获得DataSet2
    DataList2.DataSouce=ds2;
    DataList2.DataBind();
    }
      

  3.   

    1.datalist1上点右键,选”编辑摸板“,选”项摸板“,在ItemTemplate中放入一个LinkButton,
    数据绑定”root"字段;
    在以下:
    private void Page_Load(object sender, System.EventArgs e)
    {
    if(!IsPostBack)
    {
    生成dataset1;
                                DataList1.DataSouce=dataset1;
                                DataList1.DataBind();
                       }
    在DataList1上点右键,选”属性“;选触电标记,在SelectedIndexChanged 右边双击:页面跳转如下: private void Datalist1_SelectedIndexChanged(object sender, System.EventArgs e)
    {
    以下加入:
    string aaa=((LinkButton)Datalist1.Items[Datalist1.SelectedIndex).FindControl("root所在的LinkButton的id")).Text.ToString();
    sql="select * from news where root='"+aaa+"'
    连接远程数据库获得DataSet2
    DataList2.DataSouce=ds2;
    DataList2.DataBind();
    }试一下!
      

  4.   

    你的x_DS 是怎么得到的?你可以通过过滤x_DS 的值,
    <asp:datalist id=main_dl  runat="server"DataSource="<%# main_DS %>">
        <ItemTemplate>
           
           <%# DataBinder.Eval(Container.DataItem,"root") %>
           
           <asp:datalist id=x_dl runat="server"DataSource="<%# FilterData(x_DS,DataBinder.Eval(Container.DataItem,"root")) %>">
               <ItemTemplate>
                 <%# DataBinder.Eval(Container.DataItem,"news") %>
               </ItemTemplate>
           </asp:datalist>
        
       </ItemTemplate>
    </asp:datalist>
    DataView FilterData(DataSet ds, Object v)
    {
      //do work here, for example, use DataView
      DataView dv = new DataView(ds.Tables[0]);
      dv.RowFilter = "root = " + v.ToString();
      return dv;
    }
    或参考
    HOW TO:使用嵌套 Repeater 控件和 Visual C# .Net 显示分层数据
    http://support.microsoft.com/kb/306154/zh-cn
      

  5.   

    如果你是希望点击某个分类,从而显示该分类下的所有记录,那么, gsp365(aaa) 说的大致如此.
    就是你的ROOT行,另外放一个按钮,这样,当点击按钮的时候,我们可以通过此按钮的事件,获得当前行的ROOT值,并且,通过当前行,获取当前行里面嵌套的DATALIST控件,再通过ROOT值求取出DATALIST控件的数据集,绑定之后,显示即可.
      

  6.   

    结帖了,才发现还有一个问题,如果我的函数是:
    FilterData(x_DS,DataBinder.Eval(Container.DataItem,"root"))的话,FilterData()
          {       }
    函数的参数时什么?我在函数里面要怎么转化为string类型呢?
    谢谢前辈!
      

  7.   

    1)FilterData(x_DS,DataBinder.Eval(Container.DataItem,"root"))的话,FilterData()
          {       }
    函数的参数时什么?我在函数里面要怎么转化为string类型呢?
    2)DataSource="<%# FilterData(x_DS,DataBinder.Eval(Container.DataItem,"root")) %>">
    提示错误,“服务器标记错误”
    谢谢前辈
      

  8.   

    DataSource='<%# FilterData(x_DS,DataBinder.Eval(Container.DataItem,"root")) %>'
    orDataSource='<%# FilterData(x_DS,DataBinder.Eval(Container.DataItem,"root").ToString()) %>'orDataSource='<%# FilterData(x_DS,(string)DataBinder.Eval(Container.DataItem,"root")) %>'
    DataView FilterData(DataSet ds, string v)