У меня есть веб-приложение на C #, где у меня есть сетка, которая принимает List <>, который принимает интерфейс. Существует три типа объектов, которые реализуют интерфейс, который находится в списке.
Я установил источник данных 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 <> возвращает объект сам по себе, а не интерфейс, или это что-то в сетке, которое его отбрасывает?
Или я иду по неверному пути?
Надеюсь, у кого-то есть способ исправить это, пожалуйста.
Спасибо
Джон Хокинс
EDIT
<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" />
Интерфейс предоставляет имя, идентификатор и имя типа.
"HeaderText =" ID "Visible =" False "/>
дает нельзя применять индексатор.