//两个存储过程都有一个输入参数,现在第一个存储过程输入参数是:manufacture_id
第二个输入参数是第一个记录集的brand_id字段,就是这个地方不知道怎么写?public void listPinPai()
{
int manufacture_id=Convert.ToInt32(Request["manufacture_id"]);

SqlConnection conn=new SqlConnection(System.Configuration.ConfigurationSettings.AppSettings["connstr"]);

//第一个Repeater控件开始
SqlDataAdapter cmd = new SqlDataAdapter("cf_List_Pinpai", conn);
cmd.SelectCommand.CommandType =CommandType.StoredProcedure ;

cmd.SelectCommand.Parameters.Add("@manufacture_id",SqlDbType.Int);
cmd.SelectCommand.Parameters["@manufacture_id"].Value =manufacture_id;
//第一个Repeater控件结束 //第二个Repeater控件开始
SqlDataAdapter cmd1 = new SqlDataAdapter("cf_List_Chexi", conn);
cmd1.SelectCommand.CommandType =CommandType.StoredProcedure ;

cmd1.SelectCommand.Parameters.Add("@brand_id",SqlDbType.Int);
cmd1.SelectCommand.Parameters["@brand_id"].Value =?????; //这个输入参数怎么写?这里的数就是第一个记录集的brand_id,这里不知道怎么写?请哪位老大帮忙
//第二个Repeater控件开始
conn.Open(); DataSet ds = new DataSet();
cmd.Fill(ds, "pic");
DataTable dt=ds.Tables["pic"]; r1.DataSource=dt.DefaultView;
r1.DataBind(); cmd.Dispose();
conn.Close(); 
}

解决方案 »

  1.   

    在前台页面中做,这里边讲得很详细,有例子How To Display Hierarchical Data by Using Nested Repeater Controls and Visual C# .NEThttp://support.microsoft.com/default.aspx?scid=kb;EN-US;306154
      

  2.   

    用 OnItemDataBound,参数用个隐藏的控件,上面绑定brand_id,再用e.Item.FindControl 找到 就是你要的第二个参数了。
      

  3.   

    刚写好的 DataList 嵌套 DataGrid 供参考
    前台:
    <asp:datalist id="DataList1" runat="server" Width="545" RepeatDirection="Horizontal" RepeatColumns="2"
    DataKeyField="classid" OnItemDataBound="BoundData" HorizontalAlign="Center">
    <ItemTemplate>
    <table cellpadding="0" cellspacing="1" border="0" bgcolor="#cccccc">
    <tr>
    <td bgcolor="#ffffff"><%# DataBinder.Eval(Container.DataItem, "classname") %></td>
    </tr>
    <tr>
    <td bgcolor="#ffffff" width="255" height="150" valign="top">
    <asp:DataGrid ID="DataGrid1" AutoGenerateColumns="False" ShowHeader="False" ShowFooter="False"
    Border="0" EnableViewState=False Runat="server">
    <Columns>
    <asp:BoundColumn DataField="title"></asp:BoundColumn>
    </Columns>
    </asp:DataGrid>
    </td>
    </tr>
    <tr>
    <td bgcolor="#ffffff" align="right"><a href='list.aspx?classid=<%# DataBinder.Eval(Container.DataItem,"classid")%>'>更多新闻...</a></td>
    </tr>
    </table>
    <br>
    </ItemTemplate>
    </asp:datalist>
      

  4.   

    .asp.cs private void Page_Load(object sender, System.EventArgs e)
    {
    if(!IsPostBack)
    {
    getClassItem();

    }
    }
    private void getClassItem()
    {
    string con=ConfigurationSettings.AppSettings["dsn"];
    SqlConnection conn=new SqlConnection(con);
    conn.Open();
    SqlCommand comm=new SqlCommand("select * from db_fClass order by classid ",conn);
    SqlDataReader rd;
    rd=comm.ExecuteReader();
    DataList1.DataSource=rd;
    DataList1.DataBind();
    rd.Close();
    conn.Close();
    } protected void BoundData(object sender,DataListItemEventArgs e)
    {
    if(e.Item.ItemType==ListItemType.Item||e.Item.ItemType==ListItemType.AlternatingItem)
    {
    DataGrid dg=(DataGrid)e.Item.FindControl("DataGrid1");
    string index=this.DataList1.DataKeys[e.Item.ItemIndex].ToString();
    string con=ConfigurationSettings.AppSettings["dsn"];
    SqlConnection conn=new SqlConnection(con);
    conn.Open();
    SqlCommand comm=new SqlCommand("select top 4 * from db_Article where classid="+index,conn);
    SqlDataReader rd;
    rd=comm.ExecuteReader();
    dg.DataSource=rd;
    dg.DataBind();
    rd.Close();
    conn.Close();

    }

    }
      

  5.   

    楼上的方法可以解决楼主的问题,另一种方法是:
    1.还是先仔细看看http://support.microsoft.com/default.aspx?scid=kb;EN-US;306154 这个例子,是用ds.Relation关联两个数据集,然后分别绑定到两个Repeater,注意第二个数据集的数据要和第一个配套,不然会报错;
    2.第二个不需要用参数,因为全部都读出来了;
    3.然后页面上把Repeater2隐藏,点击Repeater1上面的按钮时,e.Item.FindControl("Repeater2").Visible=true,只会显示对应的Repeater2,其他的还是会隐藏的,再点击Visible=false可以收起来
    这样也可以实现效果。
      

  6.   

    http://support.microsoft.com/default.aspx?scid=kb;EN-US;306154 我用的是微软的这个方法高度出来,但是有个弊病,如果用微软这个方法,第二个记录集有几万条记录会很慢的,longhorn008(菜鸟.net) 这个方法不错。但是我用他就错了。“System.Web.UI.WebControls.Repeater”并不包含对“DataKeys”的定义//显示某个厂商的所有品牌
    public void listPinPai()
    {
    int manufacture_id=Convert.ToInt32(Request["manufacture_id"]); SqlConnection conn=new SqlConnection(System.Configuration.ConfigurationSettings.AppSettings["connstr"]);

    //第一个Repeater控件开始
    SqlDataAdapter cmd = new SqlDataAdapter("cf_List_Pinpai", conn);
    cmd.SelectCommand.CommandType =CommandType.StoredProcedure ;

    cmd.SelectCommand.Parameters.Add("@manufacture_id",SqlDbType.Int);
    cmd.SelectCommand.Parameters["@manufacture_id"].Value =manufacture_id;
    //第一个Repeater控件结束 conn.Open(); DataSet ds = new DataSet();
    cmd.Fill(ds, "brand"); r1.DataSource = ds.Tables["brand"];
    r1.DataBind();

    cmd.Dispose();
    conn.Close(); }protected void BoundData(object sender,RepeaterItemEventArgs e)
    { if(e.Item.ItemType==ListItemType.Item||e.Item.ItemType==ListItemType.AlternatingItem)
    {
    Repeater r3=(Repeater)e.Item.FindControl("r2");

    string brand_id=this.r1.DataKeys[e.Item.ItemIndex].ToString(); //这行错了,请哪位老大帮外修改一下,谢谢
    SqlConnection conn=new SqlConnection(System.Configuration.ConfigurationSettings.AppSettings["connstr"]);
    SqlDataAdapter cmd = new SqlDataAdapter("cf_List_Chexi", conn);
    cmd.SelectCommand.CommandType =CommandType.StoredProcedure ;

    cmd.SelectCommand.Parameters.Add("@brand_id",SqlDbType.NVarChar,30);
    cmd.SelectCommand.Parameters["@brand_id"].Value =brand_id; conn.Open(); DataSet ds = new DataSet();
    cmd.Fill(ds, "chexi")
    r3.DataSource=ds.Tables["chexi"];
    r3.DataBind();

    cmd.Dispose();
    conn.Close();

    }
    }
      

  7.   

    Repeater 没有DataKeyField 属性。
    把值放在隐藏的控件里
    <ItemTemplate>
    <asp:TextBox ID=txtBox Runat=server Visible=False Text='<%# DataBinder.Eval(Container.DataItem, "classid") %>'> </asp:TextBox>
    ....
    取参数
    TextBox txtClassid=(TextBox)e.Item.FindControl("txtBox");
    string index=txtClassid.Text;
      

  8.   

    谢谢longhorn008(菜鸟.net)调试成功,现在我想再钱套 datalistRepeater---->Repeater----datalist请密切关注此贴,谢谢,有问题再向你请教!
      

  9.   

    三个钱套也调试成功了谢谢 longhorn008(菜鸟.net) ,谢谢大家现在有个小问题。就是datalist分两列,如何让每列各占宽度的 50%,3更就占33%,4列点25%???<asp:DataList Runat=server ID="d1" RepeatColumns=2>
            <itemtemplate>
      <a href=cartype.aspx?cartype_id=<%# DataBinder.Eval(Container.DataItem, "[\"cartype_id\"]")%>><%# DataBinder.Eval(Container.DataItem, "[\"cartypename\"]")%></a </itemtemplate>
    </asp:DataList>
      

  10.   

    找到了,
    <asp:DataList Runat=server ID="d1" RepeatColumns=2 ItemStyle-Width="267" ItemStyle-Height=22 ItemStyle-HorizontalAlign=Left >有点问题,为什么ItemStyle-Width的值只能是数字,用百分比就不行了 ItemStyle-Width="50%"
    只能用ItemStyle-Width="267"  真不明白