将属性的属性绑定到GridView

时间:2010-11-20 16:48:10

标签: c# asp.net gridview datasource

嘿,
我想在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的DataSource是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 个答案:

答案 0 :(得分:2)

我认为你有两个选择:

  1. 为CartItem添加属性,分配给电影对象的标题和价格。
  2. 切换为使用TemplateField代替BoundField
  3. 选项1:

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

    选项2:(请参阅reference

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