2010-11-03 25 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>