2009-06-16 94 views
1

我對c#很新。 我有一個頁面,需要多個記錄集和一個返回它們的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> 

回答

9

在您的閱讀器中調用NextResult()方法以移至下一個結果。不,你不能使用SqlDataSource來做到這一點,你需要使用代碼隱藏或將程序拆分成不同的查詢。

+0

按秒打我。 – AllenG 2009-06-16 17:14:13

2

感謝您的回答所有人。 NextResult()可以很好地提供從拖放控件創建中進行的一些更改。他們來了。

  1. 從aspx頁面
  2. 刪除數據源來自Repeater控件
  3. 刪除DataSourceID屬性創建您的代碼隱藏返回DataReader對象的功能。如AstMgtDr()
  4. 在你的頁面加載設置Repeater控件

    Repeater1.DataSource = AstMgtDr();

    Repeater1.DataBind();

  5. 的數據源和數據綁定屬性在你的aspx頁面的頂部,添加頁面級指令使用「System.Data.Common」 命名空間 <%@ Import namespace="System.Data.Common" %>

  6. 要顯示y我們的數據:

這是最好的 性能的方法,但它需要明確的 打字

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

這是利用場 名的另一種方法 - 比更貴 以前的方法,但比默認的Eval更快。

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

希望這樣可以節省別人一些時間。

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 
相關問題