Привязать свойство свойства к GridView - PullRequest
1 голос
/ 20 ноября 2010

Эй,
Я хотел бы показать название и цену фильма в моем Gridview. Название и цена являются свойствами класса Movie, а Movie является свойством класса CartItem.

Вот код моего gridview

<asp:GridView ID="gvShoppingCart" runat="server" AutoGenerateColumns="False">
<Columns>
     <asp:BoundField DataField="Title" HeaderText="Title" />
     <asp:BoundField DataField="Price" HeaderText="Price" />
</Columns>
</asp:GridView>

Источник данных моего gridview - List<CartItem>.

Это классы

public class CartItem
{
    private Movie _movieInCart;
    private int _Count;

    public CartItem()
    { }

    public CartItem(Movie movie, int count)
    {
        _movieInCart = movie;
        _count= count;
    }


    public Film MovieInCart
    {
        get { return _movieInCart; }
        set { _movieInCart = value; }
    }

    public int Count
    {
        get { return _count; }
        set { _count = value; }
    }

    public double getSubTotal()
    {
        return _movieInCart.Price * _count;
    }
}


public class Movie
{
     private string _title;
     private double _price;

     public string Title
     {
         get { return _title; }
         set { _title= value; }
     }

     public double Price
     {
         get { return _price; }
         set { _price= value; }
     }     

//More properties here 
}

Очевидно, что GridView показывает только свойства первого уровня, но как мне показать эти свойства второго уровня.

Большое спасибо, Винсент

1 Ответ

2 голосов
/ 20 ноября 2010

Я думаю, у вас есть два варианта:

  1. Добавить свойства в CartItem для заголовка и цены, которые делегируются объекту фильма.
  2. Переключиться на использование TemplateField вместо BoundField.

Вариант 1:

public string Title
{
   return _movieInCart != null ? _movieInCart.Title : null;
}

Вариант 2: (см. ссылка )

<asp:TemplateField HeaderText="Title">
  <ItemTemplate>
    <asp:Label
      runat="server"
      Text='<%# Bind("MovieInCart.Title") %>'>
    </asp:Label>
  </ItemTemplate>
</asp:TemplateField> 
...