![](/img/trans.png)
[英]How do I bind a DataTable with complex data objects to a GridView?
[英]How to bind DataTable of custom objects to GridView
我有一個列表,其中包含由 Id 鏈接的另外兩個自定義對象列表。 本質上,我有一個具有許多屬性的“CPDActivity”對象和一個具有更多屬性的“CPDActivityExtended”對象。 然后我有一個 'CPDActivityComplete' 對象,其中包含一個其他對象。 這些完整的對象被添加到一個列表中,該列表是填充 DataTable 的內容。
我需要能夠將此 DataTable 綁定到 GridView 並顯示 CPDActivityComplete 的兩個子對象的屬性值。 例如,“A”列下的 CPDActivityComplete.CPDActivity.A。
到目前為止我嘗試過的:
數據表是使用實體框架和 LINQ 填充的,我已將 GridView 綁定到生成的數據表:
DataTable dt = getCPDData.ToDataTable<CPDActivityComplete>(cpdActivityCompleteList);
cpd_gv_activities.DataSource = dt;
cpd_gv_activities.DataBind();
我有一個簡單的 GridView 來測試:
<asp:GridView ID="cpd_gv_activities" runat="server" AutoGenerateColumns="false" AllowPaging="True" PageSize="15">
<Columns>
<asp:TemplateField HeaderText="Full Name">
<ItemStyle CssClass="fixedcell"></ItemStyle>
<ItemTemplate>
<asp:Label ID="vd_gv_lbl_FullName" runat="server" Text='<%# Bind("CPDActivity.A") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
</Columns>
但這會導致錯誤:
DataBinding: 'System.String' does not contain a property with the name 'A'.
如何將 label.text 綁定到 CPDActivityExtended.CPDActivity.A 屬性?
切換到強類型 GridView。 然后您可以輕松訪問所有屬性和類型安全。
所以首先在GridView中添加ItemType
<asp:GridView ID="cpd_gv_activities" runat="server" ItemType="YourNameSpace.CPDActivityComplete">
現在您可以在 GridView 中使用Item
並訪問屬性
<asp:Label ID="vd_gv_lbl_FullName" runat="server" Text='<%# Item.A %>'></asp:Label>
最后,不要轉換為 DataTable(一開始不需要),而是直接將 List 與類綁定。
cpd_gv_activities.DataSource = cpdActivityCompleteList;
cpd_gv_activities.DataBind();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.