Мне было поручено разработать объектную модель ORM + для нашего продукта. Он в основном использовался для разработки Windows + WinForms, но теперь его необходимо использовать и с нашими продуктами ASP.NET.
Однако, похоже, существует проблема с привязкой объекта Collection к GridView (и я подозреваю, что другие элементы управления источником данных ASP.NET).
Команда разработчиков онлайн получает следующую ошибку
[HttpException (0x80004005): The IListSource does not contain a data source named ''. Check your DataMember value.]
Объект коллекции, который мы используем, использует коллекцию 'view' для обработки сортировки / фильтрации (аналогично тому, как DataView относится к DataTable), и это "List", который возвращает реализация IListSource. Но по какой-то причине элемент управления ASP.NET недоволен этим и выдает исключение.
Если я использую метод расширения Linq 'ToList' для коллекции, он успешно связывается - но преобразование списка в список кажется довольно бессмысленным, и поскольку GridView связывается с DataTables, которые также реализуют IListSource, это должно быть то, что я сделал неправильно в объектной модели.
Но я немного растерялся относительно того, где искать, кажется, что большинство примеров Google показывают привязку к набору данных, поэтому не особенно полезны.
Как всегда, любые идеи приветствуются.
редактировать
AlumniShopItems имеет тип:
DataObjectCollection<AlumniShopItem>
который является подклассом:
DataObjectCollection<T> : BindingList<T>, IListSource, IList<T>, IDataObjectCollection, IFillableList where T : DataObject
IListSource возвращает следующий типизированный список: ObjectListView<T>
который реализует следующие интерфейсы:
IBindingListView, IList<T>, ITypedList, IRaiseItemChangedEvents, ICancelAddNew, IDeserializationCallback
Спасибо
Marlon
Ниже приведен код, который они используют:
<asp:GridView ID="ShopGrid" runat="server" AutoGenerateColumns="False" AutoGenerateEditButton="True"
OnRowEditing="ShopGrid_RowEditing"
OnRowUpdating="ShopGrid_RowUpdating" OnRowCancelingEdit="CancelEdit"
OnRowDataBound="RowBinding" >
<Columns>
<asp:TemplateField HeaderText="ID" Visible="false">
<EditItemTemplate>
<asp:Label ID="Label1" runat="server" Text='<%#Bind("Ident")%>'></asp:Label>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="Label1" runat="server" Text='<%#Bind("Ident")%>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Item Name" >
<EditItemTemplate>
<asp:TextBox ID="NameText" runat="server" Text='<%#Bind("Name")%>'></asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="NameLabel" runat="server" Text='<%#Bind("Name")%>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Pay Pal ID" >
<EditItemTemplate>
<asp:TextBox ID="PayPalText" runat="server" Text='<%#Bind("PayPalID")%>'></asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="PayPalLabel" runat="server" Text='<%#Bind("PayPalID")%>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Price" >
<EditItemTemplate>
<asp:TextBox ID="PhotoPath" runat="server" Text="" > </asp:TextBox>
<asp:Button ID="Upload" runat="server" Text="Upload" />
</EditItemTemplate>
<ItemTemplate>
<asp:Image ID="itemPhoto" runat="server" />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Price" >
<EditItemTemplate>
<asp:CheckBox ID="CheckBox1" runat="server" Checked='<%#Bind("Current")%>' Enabled="true" />
</EditItemTemplate>
<ItemTemplate>
<asp:CheckBox ID="CheckBox1" runat="server" Checked='<%#Bind("Current")%>' Enabled="false" />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
Где-то при загрузке страницы:
Line 57: alumniShopItems.FillMe();
Line 58: ShopGrid.DataSource = alumniShopItems;
Line 59: ShopGrid.DataBind();