2012-02-07 2 views
0

Итак, моя проблема заключается в том, что у меня есть три повторителя. Внутри этого ретранслятора у меня есть еще один повторитель, а третий - второй. Между ними больше, но это не имеет значения. Ниже HTML - мой код VB. Моя проблема в том, что rptCrashPercentageAvg ничего не обновляет. Как можно rptCrashStatsDisplay получить доступ к rptCrashPercentageAvg?Найдите ретранслятор, который находится внутри другого ретранслятора

<asp:Repeater ID="rptCrashStatsDisplay" runat="server"> 
     <ItemTemplate> 
      <asp:Repeater ID="rptCrashPercentage" runat="server"> 
       <ItemTemplate> 
        <tr class="statsRowA"> 
         <td class="emphasis" style="padding-left: 20px"> 
          <%# DataBinder.Eval(Container.DataItem,"CRASH_TYPE_DESC") %>: 
         </td> 
         <td style="padding-left: 5px"> 
          <%--background-color: <%# Iif(DataBinder.Eval(Container.DataItem,"CRASH_TYPE_PERCENT")>DataBinder.Eval(Container.DataItem,"COUNT(*)"), "red", "null") %>"--%> 
          <%#String.Format("{0:N1}", DataBinder.Eval(Container.DataItem, "CRASH_TYPE_PERCENT"))%> 
          % 
         </td> 
         <asp:Repeater ID="rptCrashPercentageAvg" runat="server"> 
          <ItemTemplate> 
           <td style="padding-left: 5px"> 
            <%#String.Format("{0:N1}", DataBinder.Eval(Container.DataItem, "AVG_VAL"))%> 
            % 
           </td> 
          </ItemTemplate> 
         </asp:Repeater> 
        </tr> 
       </ItemTemplate> 
      </asp:Repeater> 
     </ItemTemplate> 
    </asp:Repeater> 
Private Sub rptCrashStatsDisplay_ItemDataBound(ByVal sender As System.Object, _ 
ByVal e As System.Web.UI.WebControls.RepeaterItemEventArgs) Handles rptCrashStatsDisplay.ItemDataBound 
    Dim dv As DataRowView = CType(e.Item.DataItem, DataRowView) 
    If Not IsNothing(dv) Then 
     Dim rptCrashPercentage As Repeater = CType(e.Item.FindControl("rptCrashPercentage"), Repeater) 
     Dim view As DataView = dv.CreateChildView("statRel1") 
     If (view.Count > 0) Then 
      rptCrashPercentage.DataSource = view 
      rptCrashPercentage.DataBind() 
     End If 
     Dim rptCrashPercentageAvg As Repeater = CType(e.Item.FindControl("rptCrashPercentageAvg"), Repeater) 
     Dim viewAvg As DataView = dv.CreateChildView("statRel2") 
     If (viewAvg.Count > 0) Then 
      rptCrashPercentageAvg.DataSource = viewAvg 
      rptCrashPercentageAvg.DataBind() 
     End If 
    End If 
End Sub 

ответ

2

Я хотел бы попробовать сделать, что вы ищете его в правильном месте. Он будет выглядеть в заголовке вашего репитера для управления, и поскольку он не найдет его там, это будет Ничто в первый раз, когда вы его попробуете и не будете использовать.

If e.Item.ItemType = ListItemType.Item Or e.Item.ItemType = ListItemType.AlternatingItem Then 
    Dim rptCrashPercentageAvg As Repeater = CType(e.Item.FindControl("rptCrashPercentageAvg"), Repeater) 
    'Shouldn't be "nothing" here. 
End If 

В противном случае вы можете попробовать более неэффективный метод:

Dim rptCrashPercentageAvg As Repeater = CType(e.Item.FindControl("rptCrashPercentageAvg"), Repeater) 
If rptCrashPercentageAvg IsNot Nothing Then 
    Dim viewAvg As DataView = dv.CreateChildView("statRel2") 
    If (viewAvg.Count > 0) Then 
     rptCrashPercentageAvg.DataSource = viewAvg 
     rptCrashPercentageAvg.DataBind() 
    End If 
End If 

Edit: Кроме того, поскольку на самом деле является ретранслятор, вы не должны нуждаться в CType.

+0

Это действительно работает, но мы действительно пошли с другим подходом. Мы решили, что на стороне базы данных все данные будут возвращены в одну таблицу. Таким образом, все идет в один повторитель вместо того, чтобы пытаться иметь ретранслятор в репитере – cjohnson2136

Смежные вопросы