我有一个 C# Web 应用程序,其中有一个带有 List<> 接口的 gridview。列表中存在三种实现接口的对象类型。
我将gridviews 数据源设置为列表并调用databind。当我运行应用程序时,我收到以下错误:
{"Property accessor 'Name' on object 'Bailey.Objects.Company' threw the following exception:'Object does not match target type.'"}
我改变了列表中的对象顺序,发现第一个对象类型工作得很好,但是当它找到另一个对象的第一个实例时,它会抛出这个错误。
List<IBaileyObject> listToDisplay = listofItems;
GridViewItemList.DataSource = listToDisplay;
GridViewItemList.DataBind();
我想要的是数据源和绑定保留在接口上,而不是像它看起来正在发生的那样向下转换为对象。
这是因为 List<> 将对象作为它自己而不是接口返回,还是因为它在 gridview 中的某些东西正在向下投射?
还是我走错了路?
我希望有人有办法解决这个问题。
谢谢
乔恩·霍金斯
编辑
<asp:TemplateField HeaderText="Selected">
<ItemTemplate>
<asp:CheckBox runat="server" ID="chkbox" Width="10%" Enabled="true" AutoPostBack="false" />
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="ID" HeaderText="ID" Visible="False" />
<asp:BoundField DataField="Name" HeaderText="Name" />
<asp:BoundField DataField="TypeName" HeaderText="Type" />
</Columns>
<FooterStyle BackColor="#1C5E55" Font-Bold="True" ForeColor="White" />
<RowStyle BackColor="#E3EAEB" />
<PagerStyle BackColor="#666666" ForeColor="White" HorizontalAlign="Center" />
<SelectedRowStyle BackColor="#C5BBAF" Font-Bold="True" ForeColor="#333333" />
<HeaderStyle BackColor="#1C5E55" Font-Bold="True" ForeColor="White" />
<EditRowStyle BackColor="#7C6F57" />
<AlternatingRowStyle BackColor="#F8F8F8" />
该接口公开了 Name、ID 和 TypeName。
" HeaderText="ID" Visible="False" />
给出不能应用索引器。