2010-11-03 57 views
0

嘿,我想在ASP.NET 2.使用嵌套的存储过程使用嵌套中继器使用存储过程

的第一个存储过程返回所有Campains和第二个返回该活动的所有项目。

我有我的2个中继器设置,现在我想从父转发到子中继器存储过程即活动ID参数传递....这证明棘手

在后面的代码,我想尝试

public void Repeater1_ItemDataBound(Object sender, RepeaterItemEventArgs e) 
{ 
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == 
    ListItemType.AlternatingItem || e.Item.ItemType == ListItemType.EditItem) 
    { 
     SqlDataSource2.SelectParameters["campaignId"].DefaultValue = 
      DataBinder.Eval(e.Item.DataItem, "campaignId").ToString(); 
    } 

} 

但我不知道如何调用此方法或得到它,如果我尝试这个

<asp:Repeater ID="Repeater1" runat="server" DataSourceID="SqlDataSource1" OnDataBinding="Repeater1_ItemDataBound"> 

我得到错误加载

CS0123:没有重载 'Repeater1_ItemDataBound' 匹配委托 'System.EventHandler'

任何帮助,将不胜感激

编辑:改变了我的代码背后

public void Repeater1_ItemDataBound(Object sender, RepeaterItemEventArgs e) 
{ 
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == 
    ListItemType.AlternatingItem || e.Item.ItemType == ListItemType.EditItem) 
    { 
     Response.Write(DataBinder.Eval(e.Item.DataItem, "campaignId").ToString()); 
     SqlDataSource2.SelectParameters["campaignId"].DefaultValue = 
      DataBinder.Eval(e.Item.DataItem, "campaignId").ToString(); 
     SqlDataSource2.SelectParameters["statusId"].DefaultValue = 
      "1"; 

    } 

    foreach (RepeaterItem repeaterItem in Repeater1.Items) 
    { 
     ((Repeater)(repeaterItem.FindControl("Repeater2"))).DataBind(); 

    } 

} 

,但没有喜悦它传递正确的广告系列ID到存储过程,但这不是正确显示在前端

任何想法?

回答

0

,而不是试图附加DataBinding事件,你应该安装的ItemDataBound事件:

<asp:Repeater ID="Repeater1" runat="server" 
     DataSourceID="SqlDataSource1" OnItemDataBound="Repeater1_ItemDataBound"> 

DataBinding事件是整个中继器,该ItemDataBound将触发每个项目。

+0

修复错误好吧没有喜悦......它似乎没有正确绑定数据。 – StevieB 2010-11-03 11:56:26

+0

@StevieB - 由于您的事件处理程序没有将任何数据绑定到嵌套的Repeater,因此我并不感到惊讶。 – Oded 2010-11-03 11:58:13

+0

@Oded ok我试过SqlDataSource2.SelectParameters [“campaignId”]。DefaultValue = DataBinder.Eval(e.Item.DataItem,“campaignId”)。ToString(); Repeater s =(Repeater)e.Item.FindControl(“Repeater2”); s.DataBind(); – StevieB 2010-11-03 12:06:37

0

微软一步引导发布的步骤来显示使用嵌套中继器的阶层数据控制:Display Hierarchical Data

记住它是更多钞票从一个存储过程(一个存储过程以两个的SELECT结束)

返回两个数据集

这是使用EnterpriseLibrary

Try 
     Using cmd As DbCommand = db.GetStoredProcCommand("spYourStoreProcedure") 
      db.AddInParameter(cmd, "@customer", DbType.Int32, nCustomer) 
      Using ds = db.ExecuteDataSet(cmd) 
       ds.Tables(0).TableName = "Parent" 
       ds.Tables(1).TableName = "Child" 
       ds.Relations.Add("MyRelation", ds.Tables("Parent").Columns("customer"), ds.Tables("Child").Columns("customer")) 

       ParentRepeater.DataSource = ds.Tables("Parent") 
       ParentRepeater.DataBind() 
      End Using 
     End Using 
    Catch ex As Exception 
     ' Manage your excepion 
     Exit Sub 
    End Try 

这是一个简单的嵌套中继器的示例:

<asp:Repeater ID="ParentRepeater" runat="server"> 
    <HeaderTemplate> 
     <ul> 
    </HeaderTemplate> 
    <ItemTemplate> 
     <li> 
      <b><%# Container.DataItem("customer_name")%></b> 
      <asp:Repeater ID="repFuncionesXArea" runat="server" DataSource='<%# Container.DataItem.Row.GetChildRows("MyRelation") %>' > 
       <HeaderTemplate> 
        <ul> 
       </HeaderTemplate> 
       <ItemTemplate> 
        <li><%# Container.DataItem("customer_history")%></li> 
       </ItemTemplate> 
       <FooterTemplate> 
        </ul> 
       </FooterTemplate> 
      </asp:Repeater> 
     </li> 
    </ItemTemplate> 
    <FooterTemplate> 
     </ul> 
    </FooterTemplate> 
</asp:Repeater>