0

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

无法创建静态类“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

4 回答 4

0

错误说明了一切。

您不能创建static类的实例。如果您想这样做,static请从您的类声明中删除关键字。

MSDN说:

静态类与非静态类基本相同,但有一个区别:静态类不能实例化。换句话说,您不能使用 new 关键字来创建类类型的变量。因为没有实例变量,所以您可以使用类名本身来访问静态类的成员。

于 2014-04-22T16:46:29.353 回答
0

静态类不应该被实例化:

静态类与非静态类基本相同,但有一个区别:静态类不能实例化。换句话说,您不能使用 new 关键字来创建类类型的变量。因为没有实例变量,所以您可以使用类名本身来访问静态类的成员。

(来源:MSDN

很可能,该GetAllByFilter方法也是静态的。如果是这种情况,您的问题将通过将故障线更改为以下方式来解决:

var filtereditems = InventoryAdapter.GetAllByFilter(inventoryFilter);
于 2014-04-22T16:46:40.960 回答
0

您将需要这样的类声明,以按照您的代码实现方式进行。

public class InventoryAdapter
{
  public InventoryAdapter() { }

  public object GetAllByFilter() { }
}

或者像这样调用你的方法,如果它是静态的/你不拥有或控制它:

var filtereditems = InventoryAdapter.GetAllByFilter(inventoryFilter);
于 2014-04-22T16:49:19.337 回答
0

很抱歉延迟回到这个问题 - 生病和其他新的工作重点。

所以, - 非常简单的事情。错误地假设“没有人会做(或不会做)那个”,作为程序员,我们应该比做出这个假设更好,对吧?无论如何,我不得不将<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 就是解决问题所需的全部内容。

于 2014-05-01T15:42:11.467 回答