2012-09-14 45 views
4

比方說,我有一個像這樣的數據:綁定ASP.NET 2.0的GridView我自己的IList <T> .SomeMemberOfMyOwnCustomType.SomeProperty

class Location 
{ 
    public int Id { get; private set; } 
    public string City { get; set; } 
    public string State { get; set; } 
    public string Country { get; set; } 
} 

class Friend 
{ 
    public int Id { get; } 
    public string FriendName { get; set; } 
    public Location Address { get; set; } 
    public int Age { get; set; } 
    public bool IsReliable { get; set; } 
} 

比方說,我綁定一個ASP.NET 2.0 GridView控件我自己的IList像這樣:

GridView1.DataSource = new List<Friend> 
{ 
    new Friend { Name = "...", Age = 22, ... } 
}; 

GridView1.DataBind(); 

但我想有隻在我的GridView下面列,分別自定義標題/列標題:

  1. FRIENDNAME(列標題:好友名稱)
  2. 市(列標題:市)
  3. 年齡(列標題:年齡)

我該怎麼辦呢?

換句話說,我如何選擇性地將GridView控件綁定到自定義IList的自定義成員?

回答

5

已經幾年我不碰的WebForms網格,但IIRC你可以做到這一點在電網側上,使用<Columns>符號:

<asp:GridView ...> 
    <Columns> 
     <asp:BoundField DataField="FriendName" 
     readonly="true"  
     headertext="Friend Name"/> 
     <asp:BoundField DataField="Address.City" 
     readonly="true"  
     headertext="City"/> 
     <asp:BoundField DataField="Age" 
     readonly="true"  
     headertext="Age"/> 
    </Columns> 
</asp:GridView> 

,或者使用了IEnumerable/LINQ的擴展,改變你的resuls像這樣:

GridView.DataSource = friends.Select(friend => 
    new { FriendName, City = friend.Address.City, Age }); 

,並創建一個類似<Columns>符號來表示這個新的輸出,你也需要這樣的定製HEADERTEXT。

編輯:如果DateField =「Address.City」將無法正常工作,則存在templateField選項,<ItemTemplate>可以簡單地在其內容中爲<%# Eval("Address.City") %>

1

事情是這樣的:

<asp:GridView ID="FriendGridView" runat="server" AutoGenerateColumns="false"> 
    <Columns> 
     <asp:BoundField HeaderText="Friend Name" 
      DataField="FriendName" SortExpression="FriendName" /> 
     <asp:BoundField HeaderText="Age" 
      DataField="Age" SortExpression="Age" /> 
     <asp:BoundField HeaderText="City" 
      DataField="Address.City" SortExpression="Address.City" /> 
    </Columns> 
</asp:GridView> 

檢查:ASP.NET: GridView and Business Objects

1

您還可以創建列網格和在你的Page_Load代碼映射他們,叫generateColumns子程序,然後一旦已完成,請對其進行綁定。該GenerateColumns看起來是這樣的:

Private Sub GenerateContactGridColumns() 
    Dim clmName As New BoundField() 
    clmName.DataField = "FriendName" 
    clmName.HeaderText = "Name" 

    Dim clmCity As New BoundField() 
    clmCity.DataField = "City" 
    clmCity.HeaderText = "City" 

    Dim clmEdit As New CommandField() 
    clmEdit.ButtonType = ButtonType.Image 
    clmEdit.EditImageUrl = Me.ThemeImagesPath & "/edit.gif" 
    clmEdit.DeleteImageUrl = Me.ThemeImagesPath & "/delete.gif" 
    clmEdit.ShowEditButton = True 
    clmEdit.ShowDeleteButton = True 

    gvContacts.Columns.Clear() 
    gvContacts.Columns.Add(clmName) 
    gvContacts.Columns.Add(clmCity) 
    gvContacts.Columns.Add(clmEdit) 
End Sub 

而且,我通常使用實體框架等實體可以被添加到使用部分類,然後我可以定義在深入到子對象的實體的屬性。例如,朋友可以有一個返回address.city的城市屬性。