2010-11-03 2 views
0

Эй, я хотел бы использовать Вложенные хранимые процедуры в ASP.NET 2.Использование вложенных повторителей с хранимыми процедурами

Первая хранимая процедура возвращает все Campains и второй один возвращает все элементы в кампании.

У меня есть мои 2 повторителей настроить, и теперь я пытаюсь передать параметр из родительского ретранслятора детского повторителя хранимой процедуры т.е. идентификатор кампании .... это доказывает хитрую

В коде позади я хотел попробовать

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'

Любая помощь будет принята с благодарностью

EDIT: изменил код Сзади к

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(); 

    } 

} 

Но нет радости его передача правильного идентификатора кампании в хранимую процедуру, но это неверно отображается на лицевой стороне

любые идеи?

ответ

0

Вместо того, чтобы прикрепить DataBinding события, вы должны быть прикрепление ItemDataBound события:

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

DataBinding события для всей повторителя, то ItemDataBound сгорит за единицу.

+0

Это исправляло ошибку, а не радость .. это, похоже, не правильно привязывает данные. – StevieB

+0

@StevieB - поскольку ваш обработчик событий не привязывает какие-либо данные к вложенному ретранслятору, я не удивлен. – Oded

+0

@Oded ok Я попробовал SqlDataSource2.SelectParameters ["campaignId"]. DefaultValue = DataBinder.Eval (e.Item.DataItem, "campaignId"). ToString(); Повторитель s = (повторитель) e.Item.FindControl («Repeater2»); s.DataBind(); – StevieB

0

Microsoft публикует шаг за шагом руководством для отображения иерархических данных с помощью вложенной Repeater управления: Display Hierarchical Data

Помните, что это Возможное вернуть два набора данных из процедуры Store (процедура магазина, который заканчивается с два селекцией)

Это пример с использованием 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> 
Смежные вопросы