0

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ページが読み込まれるたびにa を読みたくない以上のものを扱う可能性があることを考えると。

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を参照しましたが、役に立ちませんでした。

注: このコードは、同じアプリケーション プール内の同じサーバー上の別のサイトに読み込まれて正常に実行されることがわかりました。したがって、これは構成の問題に関係していると思います。

4

2 に答える 2

0

ここで ObjectDataSource を間違って使用している可能性があると思います。

ObjectDataSource についての私の理解では、レコードの型と、レコード データ型のコレクションを返す "select メソッド" を指定します。

または、ObjectDataSource で Entity Framework を使用します

于 2013-05-15T00:32:26.570 に答える
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 への参照を追加する必要があります。

于 2013-05-15T02:05:36.720 に答える