如何将自定义对象的数据表绑定到GridView

时间:2018-08-22 08:11:40

标签: c# asp.net gridview datatable

我有一个包含由ID链接的其他两个自定义对象列表的列表。本质上,我有一个具有许多属性的“ CPDActivity”对象和一个具有多个属性的“ CPDActivityExtended”对象。然后,我有一个'CPDActivityComplete'对象,其中包含每个其他对象。这些完整的对象将添加到填充数据表的列表中。

我需要能够将此DataTable绑定到GridView并显示CPDActivityComplete的两个子对象的属性值。例如,“ A”列下的CPDActivityComplete.CPDActivity.A。

这是我要执行的操作的基本图片: enter image description here

可视化的自定义对象列表: enter image description here

到目前为止,我已经尝试过:

使用实体框架和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属性?

1 个答案:

答案 0 :(得分:1)

切换到强类型GridView。然后,您可以轻松访问所有属性和类型安全性。

因此,首先将ItemType添加到GridView

<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();