尝试过滤网格中的数据,接收“无法创建静态类的实例”错误

时间:2014-04-22 16:45:09

标签: c# asp.net .net static-class

我正在尝试过滤后面代码中网格中填充的项目。当我尝试从数据访问层调用我的适配器时,我收到以下错误:

无法创建静态类的实例' 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;
}

任何人都可以提供一些关于我出错的指导吗?我知道这很简单 - 这是一个继承的项目,我仍然试图连接所有的点。谢谢你看看。

4 个答案:

答案 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就是解决所需的全部内容。