我正在尝试过滤后面代码中网格中填充的项目。当我尝试从数据访问层调用我的适配器时,我收到以下错误:
无法创建静态类的实例' SFTIP.DataAccessLayer.InventoryAdapter'
过滤器仅用于显示网格中与用户角色相关的项目(AssetOwnershipProgramIds
)。
错误发生在此行的new InventoryAdapter()
段中:
filteredList = new InventoryAdapter().GetAllByFilter(inventoryFilter);
以下是我尝试构建的过滤器的代码:
public List<Inventory> BindGrid()
{
List<Inventory> filteredList = new List<Inventory>();
SearchFilterInventory inventoryFilter = new SearchFilterInventory();
User currentUser;
currentUser = (Session["CurrentUser"] == null) ? (User)Session["CurrentUser"] : new User();
if (currentUser.AdminPrograms.Count > 0)
{
inventoryFilter.AssetOwnershipProgramIds.Add(currentUser.AdminPrograms[0].ReferenceId);
filteredList = new InventoryAdapter().GetAllByFilter(inventoryFilter);
}
return filteredList;
}
任何人都可以提供一些关于我出错的指导吗?我知道这很简单 - 这是一个继承的项目,我仍然试图连接所有的点。谢谢你看看。
答案 0 :(得分:0)
错误说明了一切。
您无法创建static
类的实例。如果您想这样做,请从类声明中删除static
关键字。
MSDN说:
静态类与非静态类基本相同,但在那里 是一个区别:静态类无法实例化。其他 单词,你不能使用new关键字来创建变量 班级类型。因为没有实例变量,所以您可以访问 使用类名本身的静态类的成员。
答案 1 :(得分:0)
静态类不是要实例化的:
静态类与非静态类基本相同,但在那里 是一个区别:静态类无法实例化。其他 单词,你不能使用new关键字来创建变量 班级类型。因为没有实例变量,所以您可以访问 使用类名本身的静态类的成员。
(资料来源:MSDN)
可能,GetAllByFilter
方法也是静态的。如果是这种情况,您的问题将通过将故障线更改为:
var filtereditems = InventoryAdapter.GetAllByFilter(inventoryFilter);
答案 2 :(得分:0)
你需要一个像这样的类声明,以实现代码的方式。
public class InventoryAdapter
{
public InventoryAdapter() { }
public object GetAllByFilter() { }
}
或者像这样打电话给你的方法,如果它意味着静止/你不拥有或控制它:
var filtereditems = InventoryAdapter.GetAllByFilter(inventoryFilter);
答案 3 :(得分:0)
对于重新回到此状态的延迟感到抱歉 - 生病了&amp;其他较新的工作重点。
所以, - 非常简单。错误地假设&#34;没有人会做(或不做)那个&#34;作为程序员,我们应该知道比做出这个假设更好,对吗?无论如何,我必须在<SelectParameters>
页面中将ObjectDataSource
添加回aspx
:
<asp:ObjectDataSource ID="odsItInventory" runat="server" SelectMethod="BindGrid"
TypeName="ADRUO.GUI.UserControls.ExtendedInventoryGridUserControl">
<SelectParameters>
<asp:SessionParameter Name="User" Type="Object" SessionField="CurrentUser" />
</SelectParameters>
</asp:ObjectDataSource>
感谢您的帮助 - 您的所有评论都很有帮助,我相信如果我在页面中有这些参数,每个答案都会有效。事实上,param add就是解决所需的全部内容。