1

我已经看到 (3)DataList在 ASP.NET 中使用嵌套或中继器的不同示例,但都使用原始DataTable/DataSetCreateChildView调用的组合来创建外部和内部之间的关系DataList

好吧,因为它是 2013 年而不是 2003 年,所以我有一个具有以下结构的类:

public class Customer
{    
   public string FullName { get; set; }   
   public List<Orders> { get; set; }   
}

这个想法是Orders集合是内部嵌套DataSource的绑定。问题是我似乎无法弄清楚如何在绑定代码中设置关系。内部 DataList 实际上不能通过Intellisense 在代码中直接访问,因为它嵌套在主 DataList 下。这是事件中查找内部并分配其using的典型代码: DataListItemDataBoundDataListDataSourceCreateChildView

protected void outerRep_ItemDataBound(object sender, DataListItemEventArgs e)
{
    if (e.Item.ItemType == ListItemType.Item)
    {
        DataRowView drv = e.Item.DataItem as DataRowView;
        DataList innerDataList = e.Item.FindControl("innerDataList") as DataList;
        innerDataList.DataSource = drv.CreateChildView("OrdersRelation");
        innerDataList.DataBind();
    }
}

我看到的所有示例中的“OrdersRelation”设置如下:

// Attach the relationship to the dataSet
ds.Relations.Add(new DataRelation("OrdersRelation", ds.Tables[0].Columns["OrderID"],
ds.Tables[1].Columns["OrderID"]));
outerDataList.DataSource = ds.Tables[0];
outerDataList.DataBind();

显然这不适用,因为我正在使用一个强类型对象,其集合属性为“Orders”。

如何获得相同的结果并将我的内部绑定DataList到我的Orders集合属性?

4

1 回答 1

0

我想通了;只是花了一点时间才回到原来的 ASP.NET 服务器控制模式;)

我们的想法是仍然使用该事件ItemDataBound,但同时检查两者Item以及AlternatingItem将. 然后我继续使用绑定到我存储在会话中的原始集合,并使用快速将正确的对象拉回。一旦缩小范围,我可以使用它的集合绑定到内部属性。它就像一个魅力:DataItemCustomerObjectDataListFind().OrdersDataList.DataSource

protected void ui_dlst_ETLMainInformation_ItemDataBound(object sender, DataListItemEventArgs e)
{

   if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
   {
      Customer c = e.Item.DataItem as Customer;
      DataList innerDataList = e.Item.FindControl("innerDataListControl") as DataList;

      List<Customers> customers = ((IList)Session["CustomersCollection"]).Cast<Customers>().ToList();

      Customer customer = customers.Find(ct => ct.ID == c.ID);

      innerDataList.DataSource = customer.Orders;
      innerDataList.DataBind();
    }
}
于 2013-11-14T21:49:24.867 回答