0

ASP.NET を使用しています。ReportPage1 と ReportOutputPage1 があります。これらは異なる aspx ファイルであり、異なる MasterPages を持っています。ただし、両方のページで使用するには同じ SqlDataSource オブジェクトが必要です。ReportPage では、StoredProcedure を呼び出してデータを CSV ファイルにインポートするために SqlDataSource が必要ですが、ReportOutputPage では、SqlDataSource を使用して同じ StoredProcedure を呼び出して GridView に入力する必要があります。

ReportPage1 は「メイン」ページです。このページからボタンをクリックすると、ReportOutputPage1 が開き、新しいウィンドウに表示されます。ReportPage はReportOutputPage1 のPreviousPageです。

上記は Report1 の例です。Report2 (SqlDataSource2 を使用) および Report3 (SqlDataSource3) などについても同じ考えです。10 の異なるレポート。

2ページごとにSqlDataSourceを再利用する方法(ReportPageとReportOutputPage)?

  1. Web で見つけた最初の提案 - ReportPage と ReportOutputPage の両方に masterpage を使用します。ReportPage と ReportOutputPage の異なるマスターページが既にあるため、これは機能しません。また、レポートごとに 10 個の異なるマスターページを作成する必要があります。

  2. 2 番目の提案は、ReportPage で SqlDataSource を定義し、ReportOutputPage で PrevousePage を使用してそれを再利用することでしたが、これは私の特別なケースでは機能しません (私は Ajax スタッフと部分ページ ポストバックを使用しており、PreviousPage を失っています。また、SqlDataSource をシリアル化できませんでした) ViewState などに保存します)。

  3. ユーザー コントロールを作成します。おそらくこれでうまくいくかもしれませんが、新しいレポートのたびに UserControl を作成するのは時間がかかります (10 個のレポート - 10 個のユーザー コントロール?)。

  4. 単純に SqlDataSource をコピーして貼り付けます (私は 1 つのレポートに対して行いました) が機能しますが、コードの再利用のようなものが欲しいです。必要に応じて、誰かが 2 つの異なる場所で SqlDataSource を変更するのを忘れる可能性があります。

Report および ReportOutput ページのコード (特に SqlDataSource) を再利用する方法を教えてください。

4

1 に答える 1

2

同じものを使用する必要性を定義できますSqlDataSourceか? それらが 2 つの異なるページであり、2 つの異なる用途のように聞こえる場合は、2 つの異なる を使用してみませんSqlDataSourceか? いずれにせよ、ページは分離されており、一方のオブジェクトを他方のページと共有することはできません。

データベースとのやり取りのためにアプリケーションにデータレイヤーを追加し、リクエスト時にデータをデータグリッドにバインドすることを検討することをお勧めします。こうすることで、データベース インタラクションを一度構築すれば、それを別のページで再利用できます。

もう 1 つのオプションは、単純に 2 つSqlDataSourceの を使用して、両方のページにコピー アンド ペーストすることです。選択を行おうとしている場合、または何らかの基準が 2 番目のページに適用される場合QueryStringParameterは、SqlDataSource.

お役に立てれば。

編集:これを App_Code のどこかにポップし、特定の使用要件を渡します。

Public Shared Function GetData(connString As String, command As String, Optional params As SqlParameter() = Nothing) As DataTable
    Dim conn As New SqlConnection(connString)
    Dim da As New SqlDataAdapter(command, conn)
    Dim dt As New DataTable
    da.SelectCommand.CommandType = CommandType.StoredProcedure
    da.SelectCommand.CommandTimeout = 6000 '6 seconds.
    If Not IsNothing(params) Then
        For Each p As SqlParameter In params
            da.SelectCommand.Parameters.Add(p)
        Next
    End If
    Try
        conn.Open()
        da.Fill(dt)
        Return dt
    Catch ex As Exception
        Throw ex
    Finally
        conn.Close()
    End Try
End Function

次に、データテーブルをグリッドビューにバインドしますが、ファイルへの出力方法がわかりません。

Private Sub BindData(gridview As GridView, data As DataTable)
    gridview.DataSource = data
End Sub

コード ビハインドからデータベース インタラクションを再利用できるようになりました。

Protected Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load
   BindData(MyGridView,GetData(ConnectionStrings(connName).ConnectionString, _
                 "dbo.SomeSprocOrOther", _
                 New SqlParameter(){New SqlParameter("paramName","paramValue")})
End Sub
于 2012-10-01T12:36:07.773 に答える