我正在尝试使用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
但是,当我尝试运行时会出现以下异常:
出了什么问题?我以为我在这里做了一件非常基本的事情。我已经尝试了很多不同的选项,而我所知道的是,如果删除GridView
或ObjectDataSource
,页面工作正常。如果我将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
注意:我发现此代码可以很好地加载到同一应用程序池中同一服务器上的另一个站点。因此,我认为这与配置问题有关。
答案 0 :(得分:0)
我认为您可能在这里错误地使用了ObjectDataSource。
我对ObjectDataSource的理解是你给它一个记录类型,以及一个“select方法”,它将返回你的记录数据类型的集合。
答案 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的引用才能注册这些属性。