1

私はC#にかなり慣れていません。複数のレコードセットを必要とするページと、それらを返す 1 つの sproc があります。メイン レコードセットにリピーター コントロールを使用しています。次の返されたレコードセットにアクセスするにはどうすればよいですか?


データソースは aspx ページにあります。NextResult を使用するには、コード ビハインド ページに移動する必要がありましたか? ここに私のコードがあります。データソースを分離コードに移動し、データリーダーを実装して nextresult を使用するにはどうすればよいですか?

<asp:SqlDataSource ID="AssetMgtSearch" runat="server" 
                ConnectionString="<%$ ConnectionStrings:OperationConnectionString %>" 
                SelectCommand="spAssetMgtItemList" SelectCommandType="StoredProcedure">
            </asp:SqlDataSource>
            <div class="contentListFullHeight">
                <table cellspacing="0" cellpadding="0" border="0" class="contentList">
                    <tr>
                        <th>ShipmentID/</td>
                        <th>MaterialID/</td>
                        <th>ItemID/</td>
                    </tr>
                    <asp:Repeater ID="Repeater1" runat="server" DataSourceID="AssetMgtSearch">
                        <ItemTemplate> 
                            <tr>
                                <td colspan="3" style="border-top:solid thin blue">&nbsp;</td>
                            </tr>
                            <tr>
                                <td><%#Container.DataItem(0)%></td>
                                <td><%#Container.DataItem(1)%></td>
                                <td><%#Container.DataItem(2)%></td>
                            </tr>
                        </ItemTemplate>                           
                    </asp:Repeater>
                </table>
4

3 に答える 3

9

リーダーで NextResult() メソッドを呼び出して、次の結果に移動します。

いいえ、SqlDataSource を使用してこれを行うことはできません。codebehind を使用するか、プロシージャを個別のクエリに分割する必要があります。

于 2009-06-16T17:12:13.330 に答える
2

みなさん、ありがとうございました。NextResult()は、ドラッグアンドドロップコントロールの作成からかなりの数の変更を加えればうまく機能します。はい、どうぞ。

  1. aspxページからデータソースを削除します
  2. リピーターコントロールからDataSourceIDプロパティを削除します
  3. コードビハインドに、データリーダーオブジェクトを返す関数を作成します。例:AstMgtDr()
  4. ページの読み込み時に、Repeaterコントロールのdatasourceプロパティとdatabindプロパティを設定します

    Repeater1.DataSource = AstMgtDr();

    Repeater1.DataBind();

  5. aspxページの上部に、「System.Data.Common」名前空間を使用するページレベルのディレクティブを追加します <%@ Import namespace="System.Data.Common" %>

  6. データを表示するには:

これは最高のパフォーマンスを発揮する方法ですが、明示的な入力が必要です

`<%#((DbDataRecord)Container.DataItem).GetInt32(0)%>`

これは、フィールド名を使用する別の方法です。以前の方法よりもコストがかかりますが、デフォルトのEvalよりも高速です。

`<%# ((DbDataRecord)Container.DataItem)["ShipmentID"] %>`

これが他の誰かの時間を節約することを願っています。

于 2009-06-17T21:19:05.387 に答える
0

この質問は何度も閲覧されており、私は自分の解決策を提出したかっただけです.
元の質問が c# だったことは知っていますが、レガシー システムをサポートしており、コードを簡単に変換できます。

今日はこれが思い浮かびました。7 つの異なるデータセットを返すストアド プロシージャからの結果をすばやく表示する方法が必要でした。

System.Data.DataSet にストアド プロシージャの結果を入力することで、これを実現しました。次に、動的に DataGrid を作成し、それらを PlaceHolder に追加します。

HTML コード:

<html>
  <body>
  <form id="form1" runat="server">
    <asp:PlaceHolder ID="phMetrics" runat="server"/>
  </form>
  </body>
</html>

VB.NET コード:

Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load
    Dim ds As System.Data.DataSet = Me.GetMetrics()
    If ds IsNot Nothing Then
        For i As Integer = 0 To ds.Tables.Count - 1
            Dim _rpt As New System.Web.UI.WebControls.DataGrid()
            With _rpt
                .AutoGenerateColumns = True
                .Attributes.Add("name", "table_" & i + 1)
                .DataSource = ds.Tables(i)
                .DataBind()
            End With
            Me.phMetrics.Controls.Add(_rpt)
        Next
    End If
End Sub

Private Function GetMetrics() As System.Data.DataSet
    Dim dsMetrics As New System.Data.DataSet

    Using _sqlConn As New System.Data.SqlClient.SqlConnection(_sqlConnString)
        _sqlConn.Open()
        Dim _SqlCommand As New System.Data.SqlClient.SqlCommand("[dbo].[My_Stored_Procedure]", _sqlConn)
        With _SqlCommand
            .CommandType = System.Data.CommandType.StoredProcedure
            .Parameters.Add(New System.Data.SqlClient.SqlParameter("@ClientID", 101))
        End With
        Dim _sqlAdapter As New System.Data.SqlClient.SqlDataAdapter(_SqlCommand)
        With _sqlAdapter
            .Fill(dsMetrics)
            .Dispose()
        End With
        _sqlConn.Close()
        _sqlConn.Dispose()
    End Using

    Return dsMetrics
End Function
于 2017-01-04T21:51:22.400 に答える