2015-11-18 39 views
0

如何從父節點中讀取數據項?如何從父級中繼器讀取數據項?

<asp:Repeater ID="rpt" runat="Server"> 
    <ItemTemplate> 
     <%# DataBinder.Eval(Container.DataItem, "MyRepeaterDataItem")%> 

     <asp:GridView ID="gv" runat="Server"> 
     <Columns> 
      <asp:TemplateField> 
      <HeaderTemplate> 
       <%# DataBinder.Eval(Container.DataItem, "MyRepeaterDataItem")%> 
      </HeaderTemplate> 
      <ItemTemplate> 
       TEXT 
      </ItemTemplate> 
      </asp:TemplateField> 
     </Columns> 
     </asp:GridView> 

    </ItemTemplate> 
    </asp:Repeater> 

我想獲得屬於中繼器出現在嵌套GridView的標題中的DataItem的MyRepeaterDataItem

我一直在使用.Parent.NamingContainer嘗試,但不能得到使用VB.NET

回答

1

正確的語法假設你結合的的RepeaterItem的ItemDataBound事件處理程序數據源到GridView你就可以將一個處理器用於在GridView使用的AddHandler的RowCreated(或數據綁定)活動:

Private Sub rpt_ItemDataBound(sender As Object, e As RepeaterItemEventArgs) Handles rpt.ItemDataBound 
    If e.Item.ItemType = ListItemType.AlternatingItem OrElse e.Item.ItemType = ListItemType.Item Then 
     AddHandler gvTarget.RowCreated, AddressOf GridViewRowCreated 
     'Bind your Datasource to the GridView AFTER you wire it up: 
     'Dim gvTarget As GridView = CType(e.Item.FindControl("gv"), GridView) 
     'gvTarget.DataSource = lstYourDataSource 
     'gvTager.DataBind() 
    End If 
End Sub 

那麼你的事件處理程序GV的RowCreated可以從父的RepeaterItem獲得的價值:

Public Sub GridViewRowCreated(ByVal sender As Object, ByVal e As GridViewRowEventArgs) 
    Dim lblHeader As Label = CType(e.Row.FindControl("lblGridViewHeader"), Label) 
    'Check due to Header/Footer. 
    If Not lblHeader Is Nothing Then 
     lblHeader.Text = DataBinder.Eval(CType(sender.Parent, RepeaterItem).DataItem, "MyRepeaterDataItem") 
    End If 
End Sub 

上面提到的代碼要求您將一個標籤添加到您的GridView的HeaderTemplate中:

<asp:GridView ID="gv" runat="Server"> 
    <Columns> 
     <asp:TemplateField> 
     <HeaderTemplate> 
      <asp:Label ID="lblGridViewHeader" runat="server"></asp:Label> 
     </HeaderTemplate> 
     <ItemTemplate> 
      TEXT 
     </ItemTemplate> 
     </asp:TemplateField> 
    </Columns> 
    </asp:GridView> 

或任意你可能只是這樣做在GridViewRowCreated:

e.Row.Cells(0).Text = DataBinder.Eval(CType(sender.Parent, RepeaterItem).DataItem, "MyRepeaterDataItem") 
+0

所以不能直接綁定到gridview? '<%#DataBinder.Eval(CType(sender.Parent,RepeaterItem).DataItem,「MyRepeaterDataItem」)%>' – Obsidian

0

獲取父數據項從任何嵌套控件

經過一些試驗和錯誤,我找到了一個簡單的解決方案,可以在沒有任何代碼的情況下工作。

VB.NET

<HeaderTemplate> 
    <%# DataBinder.Eval(Container, "NamingContainer.NamingContainer.DataItem.MyRepeaterDataItem")%> 
</HeaderTemplate> 

MyRepeaterDataItem是數據列。