2009-06-09 97 views
1

我很難弄清楚如何將自定義IList綁定到gridview。 IList包含另一個定製IList。我需要將這個IList的屬性綁定到gridview。Binding Gridview to IList <BusinessObject>包含IList <BusinessObject>

public class Seminar : BusinessObject 
{ 
    private string _description = String.Empty; 
    private List<User> _attendees; 

    public string Description {get {return _description;} set {_description = value;}} 
    public List<User> Attendees {get {return _attendees;} set {_attendees = value;}} 
} 

public class User : BusinessObject 
{ 
    private string _name = String.Empty; 
    public string Name { get { return _name; } set { _name = value; } } 
} 

後端page.aspx.cs:

List<Seminar> seminarList = SeminarManager.Get(id); 
gridSeminars.DataSource = seminarList; 
gridSeminars.DataBind(); 

前端page.aspx:

<asp:GridView ID="gridSeminars" runat="server"> 
<Columns> 
    <asp:BoundField DataField="Id" /> 
    <asp:BoundField DataField="Description" /> 
    <asp:BoundField DataField="Name" /> 
</Columns> 
</asp:GridView> 

的問題是在GridView填充 「名稱」 字段。所有建議都歡迎。

+0

我用約翰的回答解決我的問題。 – Brian 2009-06-12 14:36:20

回答

0

你有沒有試過,

Attendees.Name 

編輯: 與會者是一個IEnumerable本身。以上建議僅適用於Attendee.Name

如果你wan't顯示你需要做一個模板列的所有與會者,也許使用一箇中繼器或東西...是這樣的:

<asp:TemplateField> 
     <ItemTemplate> 
      <asp:Repeater runat="server" DataSource='<%# Eval("Attendees") %>'> 
       <ItemTemplate> 
        <tr> 
        <td> 
        Name 
        </td> 
        <td> 
         <%# Eval("Name")%> 
        </td> 
        </tr> 
       </ItemTemplate> 
      </asp:Repeater> 
     </ItemTemplate> 
    </asp:TemplateField> 
+0

由於它是IEnumerable類型,所以Attendees屬性本身沒有Name屬性,但嵌套控件解決方案是一個很好的屬性。 – 2009-06-09 15:40:06

0

約翰的答案是一個很好的答案,特別是關於如何將集合綁定到期望可以轉換爲字符串的列的部分。

另一種選擇是放置包含可選綁定控件(Repeater,另一個GridView等)的TemplateField,並將DataSource屬性綁定到業務對象的Attendees屬性。另外,如果你已經使用GridView的想法結婚了,但是在像這些需要更多控制佈局的情況下,我會建議使用新的ListView(.NET 3.5)控件,或者最近我剛剛使用嵌套式中繼器,以便我可以更精確地控制我嘗試生成的佈局。

希望這會有所幫助。

0

我假設你想扁平化層次結構併爲每個用戶顯示一行。如果你有機會到LINQ,您可以使用此:

List<Seminar> seminarList = SeminarManager.Get(id); 

gridSeminars.DataSource = from seminar in seminarList // loop through all of the seminars in the list 
          from user in seminar.Attendees // loop through all of the users in the current seminar 
          select new // create a new, flattened object to bind to. 
          { 
          seminar.Id, 
          seminar.Description, 
          user.Name 
          }; 

gridSeminars.DataBind(); 

http://weblogs.asp.net/zeeshanhirani/archive/2008/03/26/select-many-operator-part-1.aspx

+0

這看起來好像能夠很快解決我的問題,但我一直遇到語法錯誤,它不會讓我寫出「來自用戶在研討會中的線路。出席者」。我需要弄清楚這個LINQ的東西! – Brian 2009-06-12 14:38:22