OutOfMemoryException将ObjectDataSource绑定到GridView

时间:2013-05-14 19:54:54

标签: asp.net gridview datasource objectdatasource

我正在尝试使用GridView来显示从SQL Server中提取的表格。这是一个事件日志。我已将GridView控件放在我的页面上,同时放置了ObjectDataSource控件。我配置了:

<%@ Page Language="VB" %>

<!DOCTYPE html PUBLIC "-//W"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
    <title></title>
</head>
<body>
    <form id="Form1" method="post" runat="server">
    <asp:GridView ID="gvHistory" runat="server" DataSourceID="dsHistory">
    </asp:GridView>
    <asp:ObjectDataSource ID="dsHistory" runat="server" SelectMethod="GetHistoryRows"
        TypeName="AspDotNetStorefrontAdmin.ROIImportHistory"></asp:ObjectDataSource>
    </form>
</body>
</html>

我在App_Code文件夹中创建了一个类,如下所示:

Imports System.Data

Namespace AspDotNetStorefrontAdmin

    Public Class ROIImportHistory

        Public Shared Function GetHistoryRows() As DataTable

            Dim localDatatable As New DataTable

            localDatatable.Columns.Add()
            localDatatable.Columns.Add()
            localDatatable.Columns.Add()
            localDatatable.Rows.Add(New Object() {"Hi", "Hi2", "Hi3"})

            Return localDatatable

        End Function
    End Class

End Namespace

但是,当我尝试运行时会出现以下异常:

出了什么问题?我以为我在这里做了一件非常基本的事情。我已经尝试了很多不同的选项,而我所知道的是,如果删除GridViewObjectDataSource,页面工作正常。如果我将DataTable直接绑定到GridView,那么事情也能正常工作。

我的目的是获得真正的分页和过滤。鉴于我每次加载页面时都不想加载DataTable

Server Error in '/' Application.
Exception of type 'System.OutOfMemoryException' was thrown.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.OutOfMemoryException: Exception of type 'System.OutOfMemoryException' was thrown.

Source Error:

An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.

Stack Trace:


[OutOfMemoryException: Exception of type 'System.OutOfMemoryException' was thrown.]
   System.Reflection.Assembly._GetType(String name, Boolean throwOnError, Boolean ignoreCase) +0
   System.Web.UI.Util.GetTypeFromAssemblies(ICollection assemblies, String typeName, Boolean ignoreCase) +201
   System.Web.Compilation.BuildManager.GetType(String typeName, Boolean throwOnError, Boolean ignoreCase) +302
   System.Web.UI.WebControls.ObjectDataSourceView.GetType(String typeName) +70
   System.Web.UI.WebControls.ObjectDataSourceView.ExecuteSelect(DataSourceSelectArguments arguments) +1692
   System.Web.UI.DataSourceView.Select(DataSourceSelectArguments arguments, DataSourceViewSelectCallback callback) +27
   System.Web.UI.WebControls.DataBoundControl.PerformSelect() +261
   System.Web.UI.WebControls.BaseDataBoundControl.EnsureDataBound() +82
   System.Web.UI.WebControls.CompositeDataBoundControl.CreateChildControls() +95
   System.Web.UI.Control.EnsureChildControls() +146
   System.Web.UI.Control.PreRenderRecursiveInternal() +61
   System.Web.UI.Control.PreRenderRecursiveInternal() +224
   System.Web.UI.Control.PreRenderRecursiveInternal() +224
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +3394


Version Information: Microsoft .NET Framework Version:2.0.50727.6400; ASP.NET Version:2.0.50727.6387 

我引用thisthis无济于事。

注意:我发现此代码可以很好地加载到同一应用程序池中同一服务器上的另一个站点。因此,我认为这与配置问题有关。

2 个答案:

答案 0 :(得分:0)

我认为您可能在这里错误地使用了ObjectDataSource。

我对ObjectDataSource的理解是你给它一个记录类型,以及一个“select方法”,它将返回你的记录数据类型的集合。

或者,use Entity Framework with the ObjectDataSource

答案 1 :(得分:0)

我不确定这是你的问题的原因,但是在我使用ObjectDataSource控件的那天(在MVC进入阶段之前)我曾经不得不用DataObject属性和数据提取来装饰数据源类使用DataObjectMethod属性的方法,否则ObjectDataSource控件不会绑定到我的业务逻辑方法。所以在你的情况下,这意味着:

 <DataObject>
 Public Class ROIImportHistory

     <DataObjectMethod(DataObjectMethodType.Select, True)>
     Public Shared Function GetHistoryRows() As DataTable

         Dim localDatatable As New DataTable
         localDatatable.Columns.Add()
         localDatatable.Columns.Add()
         localDatatable.Columns.Add()
         localDatatable.Rows.Add(New Object() {"Hi", "Hi2", "Hi3"})
         Return localDatatable

     End Function

End Class

属性告诉ObjectDataSource控件该类及其方法可用作数据源。我再次确定这不是你问题的原因,但值得一试。您需要添加对System.ComponentModel的引用才能注册这些属性。