我被赋予为我们的产品设计ORM +对象模型的任务。它主要用于Windows + WinForms开发,但它现在也需要与我们的ASP.NET产品一起使用。ASP.NET GridView自定义绑定错误
但是,将Collection对象绑定到GridView似乎存在问题(并且我怀疑其他ASP.NET数据源控件)。
在线开发团队收到以下错误
[HttpException (0x80004005): The IListSource does not contain a data source named ''. Check your DataMember value.]
我们使用集合对象使用“视图”收集处理排序/过滤(类似于数据视图如何与数据表),这是IListSource实现返回的'List'。但由于某种原因,ASP.NET控件不满意它并抛出异常。
如果我在集合上使用Linq扩展方法'ToList',它会成功绑定 - 但将列表转换为列表似乎毫无意义,并且GridView绑定到也实现IListSource的DataTables,它必须是我已经在对象模型中做错了。
但是我对于在哪里看起来有点失落,似乎大部分谷歌示例显示绑定到数据集,所以不是特别有用。
一如既往,任何见解都受到欢迎。
编辑
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
感谢
马龙
下面是他们正在使用的代码:
<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();
“FillMe()”内发生了什么? – Arief 2011-06-06 08:02:40
您的DataSource将空值作为空字符串返回吗? – Akhil 2011-06-06 08:11:39
“alumniShopItems”的类型是什么?及其基类和接口(如果有的话) – Eranga 2011-06-06 08:18:33