一个DATALIST控件里嵌套REAPETER控件.我REAPETER控件可以获取绑定DATALIST的数据源里的数据吗?比如,我DATALIST的数据源的SELECTCOMMAND="SELECT USRNAME,PASSWORD FROM USERINFO WHERE SEX='男'"然后我再REAPETER的ITEMPLATE里能直接用EVAL("USERNAME")吗?

解决方案 »

  1.   

    可以啊,我就做过的,把外面的DataList绑定的ID传给里的REAPETER当作参数
      

  2.   

    怎么我这样做不行啊.我郁闷
    我贴代码,大家帮我看看.<body>
        <form id="form1" runat="server">
        <div>
            <asp:DataList ID="DataList1" runat="server" DataKeyField="typeid" 
                DataSourceID="sqlds_type" RepeatColumns="2" Width="478px">
                <ItemTemplate>
                    typeid:
                    <asp:Label ID="typeidLabel" runat="server" Text='<%# Eval("typeid") %>' />
                    <br />
                    typeName:
                    <asp:Label ID="typeNameLabel" runat="server" Text='<%# Eval("typeName") %>' />
                    <br />
                    <br />
                    <br />
                    <ul>
                        <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
                            ConnectionString="<%$ ConnectionStrings:CMSConnectionString %>" 
                            SelectCommand="SELECT [title], [typeid] FROM [news] WHERE ([typeid] = @typeid)">
                            <SelectParameters>
                                <asp:ControlParameter ControlID="DataList1" Name="typeid" 
                                    PropertyName="SelectedValue" Type="Int32" />
                            </SelectParameters>
                        </asp:SqlDataSource>
                    <asp:Repeater ID="Repeater1" runat="server" DataSourceID="SqlDataSource1">
                    <ItemTemplate>
                    <li><%# Eval("title") %></li></ItemTemplate>//运行后,这里不显示出来title.2个表,type表,NEWS表,news的typeid是外键在type表的typeid
                    </asp:Repeater> </ul>
                </ItemTemplate>
            </asp:DataList>
            <asp:SqlDataSource ID="sqlds_type" runat="server" 
                ConnectionString="<%$ ConnectionStrings:CMSConnectionString %>" 
                SelectCommand="SELECT * FROM [type]"></asp:SqlDataSource>
        </div>
        </form>
    </body>
    我非得加个隐藏控件保存DATALIST获取的typeid再赋给Reapeter数据源里的SELECT [title], [typeid] FROM [news] WHERE ([typeid] = @typeid).我郁闷,为什么非得要这么做才行?
      

  3.   


    我非得加个隐藏控件保存DATALIST获取的typeid再赋给Reapeter数据源里的SELECT [title], [typeid] FROM [news] WHERE ([typeid] = @typeid). 我郁闷,为什么非得要这么做才行?=========================就算这么做,也用不着隐藏控件吧
      

  4.   

    后台写个方法如:public datatable method(string id)  ,设置 Reapeter 的 DataSource = ' method(Eval("id"))'
      

  5.   


        <asp:Repeater ID="p_1" runat="server">
            <ItemTemplate>
                <tr>
                    <td width="472" align="center" bgcolor="#D7E9F9"><div style="word-wrap:break-word;">
                        <%# Eval("title") %>'>
                        <asp:DataList ID="dl_1" runat="server" DataSource='<%# GetProduct(Eval("title").ToString()) %>' RepeatColumns="2">
                            <ItemTemplate>
                                <%# Eval("name") %>
                            </ItemTemplate>
                        </asp:DataList>
                    </td>
                </tr>
            </ItemTemplate>
        </asp:Repeater>
        protected void Page_Load(object sender, EventArgs e)
        {
            p_1.DataSource=GetDataSet("select * from 表名");
            p_1.DataBind();
        }    public DataSet GetProduct(string pTypeId)
        {
            return GetDataSet("select * from 表名", " where title=" + pTypeId);    
        }
        private DataSet GetDataSet(string sql)
        {
            SqlConnection con = new SqlConnection(@"xxxx"); // 连接字符串
             SqlCommand cmd = new SqlCommand(sql, con);
            DataSet set = new DataSet();
            SqlDataAdapter adapter = new SqlDataAdapter(cmd);
            try
            {
                con.Open();
                adapter.Fill(set);
                return set;
            }
            catch (Exception e)
            {
                throw new Exception(e.Message);
            }
            finally
            {
                con.Close();
            }
        }以前写的简单示例,希望有用
      

  6.   


        <asp:Repeater ID="p_1" runat="server">
            <ItemTemplate>
                <tr>
                    <td width="472" align="center" bgcolor="#D7E9F9"><div style="word-wrap:break-word;">
                        <%# Eval("title") %>'>
                        <asp:DataList ID="dl_1" runat="server" DataSource='<%# GetProduct(Eval("title").ToString()) %>' RepeatColumns="2">
                            <ItemTemplate>
                                <%# Eval("name") %>
                            </ItemTemplate>
                        </asp:DataList>
                    </td>
                </tr>
            </ItemTemplate>
        </asp:Repeater>
        protected void Page_Load(object sender, EventArgs e)
        {
            p_1.DataSource=GetDataSet("select * from 表名");
            p_1.DataBind();
        }    public DataSet GetProduct(string pTypeId)
        {
            return GetDataSet("select * from 表名", " where title=" + pTypeId);    
        }
        private DataSet GetDataSet(string sql)
        {
            SqlConnection con = new SqlConnection(@"xxxx"); // 连接字符串
             SqlCommand cmd = new SqlCommand(sql, con);
            DataSet set = new DataSet();
            SqlDataAdapter adapter = new SqlDataAdapter(cmd);
            try
            {
                con.Open();
                adapter.Fill(set);
                return set;
            }
            catch (Exception e)
            {
                throw new Exception(e.Message);
            }
            finally
            {
                con.Close();
            }
        }以前写的简单示例,希望有用