簡體   English   中英

如何將自定義對象的 DataTable 綁定到 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM