如果我解释这个问题很可怕,请原谅我。我有一个项目,我有独立的业务对象。我试图用其中一个业务对象创建一个asp:listview,但它一直告诉我它是一个无效的类型,甚至不显示。
业务对象逻辑在这里:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Linq;
using System.Web;
using WebStore.DatabaseHelper;
using System.Configuration;
namespace WebStore.BusinessObjectHelper
{
public class ProductCategoryList
{
private BindingList<ProductCategory> _List = new BindingList<ProductCategory>();
public BindingList<ProductCategory> List
{
get { return _List; }
}
public ProductCategoryList GetAll()
{
Database db = new Database(ConfigurationManager.AppSettings["store"]);
db.Command.CommandType = System.Data.CommandType.StoredProcedure;
db.Command.CommandText = "tblProductCategory_GetAll";
DataSet ds = new DataSet();
ds = db.ExecuteQuery();
foreach (DataRow dr in ds.Tables[0].Rows)
{
ProductCategory pc = new ProductCategory();
pc.Initialize(dr);
pc.InitializeBusinessData(dr);
pc.IsNew = false;
pc.IsDirty = false;
_List.Add(pc);
}
return this;
}
public ProductCategoryList Save()
{
for (int i = 0; i < _List.Count; i++)
{
if (_List[i].IsSavable())
{
_List[i] = _List[i].Save();
}
}
return this;
}
}
}
这就是我想要做的事情:
<div id="CategoryMenu" style="text-align: center">
<asp:ListView ID="categoryList" runat="server" ItemType="WebStore.BusinessObjectHelper.ProductCategoryList" SelectMethod="GetAll">
<ItemTemplate>
<b style="font-size: large; font-style: normal">
<a href="ProductList.aspx?id=<%# Eval("ID") %>">
<%# Eval("name") %>
</a>
</b>
</ItemTemplate>
<ItemSeparatorTemplate>| </ItemSeparatorTemplate>
</asp:ListView>
</div>
我收到错误:
类型&#39; System.InvalidOperationException&#39;的例外情况发生在 System.Web.dll但未在用户代码中处理
其他信息:数据源是无效类型。肯定是 IListSource,IEnumerable或IDataSource。
在我的代码背后:
protected void Page_Load(object sender, EventArgs e)
{
categoryList.DataSource = new ProductCategoryList();
categoryList.DataBind();
}
public ProductCategoryList GetCategories()
{
var _db = new WebStore.BusinessObjectHelper.ProductCategoryList();
ProductCategoryList query = _db.GetAll();
return query;
}
我无法在asp:listview中显示此对象吗?
答案 0 :(得分:0)
错误讯息......
其他信息:数据源是无效类型。它必须是 IListSource , IEnumerable 或 IDataSource 。
...告诉你什么是错的。那就是ListView
类只知道如何“列出”继承/实现IListSource,IEnumerable或IDataSource类的东西。
您的业务对象ProductCategoryList
需要实现其中一个接口,以便ListView
可以迭代它。
namespace WebStore.BusinessObjectHelper
{
public class ProductCategoryList: IEnumerable<ProductCategory>
{
// *implement the IEnumerable interface
}
}
另见:https://stackoverflow.com/a/6908510/1718702
基本上你将自定义类交给ListView
(它完全不知道你的类做了什么),并期望它猜测它应该用它做什么(并且它会引发异常)。你需要实现其中一个接口来说“ Here!这就是你应该如何正确使用我! ”。
答案 1 :(得分:0)
此方法未返回IEnumerable, or IDataSource.
正在返回ProductCategoryList
对象类型。
public ProductCategoryList GetAll()
{
/*
...
*/
return this;
}
您可以更改方法GetAll()
的返回类型或实现ProductCategoryList
的接口,以使其成为IEnumerable