也许有一种更简单的方法——但您可以努力为父级获取 DataItem。
<asp:DataList runat="server" DataSource="<%#TheProducts %>">
<ItemTemplate>
<asp:GridView DataSource='<%#((Product)Container.DataItem).Prices %>' runat="server" AutoGenerateColumns="false">
<Columns>
<asp:TemplateField>
<ItemTemplate><%#((Product)((DataListItem)(((GridViewRow)Container).Parent).DataItemContainer).DataItem).Name%></ItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
<ItemTemplate><%#Container.DataItem %></ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
</ItemTemplate>
</asp:DataList>
后面的代码如下所示:
protected List<Product> TheProducts
{
get { return new List<Product>
{
new Product{Name="A", Prices = new List<int>{1,2,4}},
new Product{Name="B", Prices = new List<int>{5,6,7}}
};
}
}
protected void Page_Load(object sender, EventArgs e)
{
if(!this.IsPostBack)
this.DataBind();
}
和 Product 类可能如下所示:
public class Product
{
public string Name { get; set; }
private List<int> _prices = null;
public List<int> Prices
{
set { this._prices = value; }
get
{
if(_prices == null)
this.Prices = new List<int>();
return _prices;
}
}
}