Frage

Ich bin ziemlich neu in c #. Ich habe eine Seite, die mehr Cord-Sets und ein einzelnes sproc erfordert, die sie zurückgibt. Ich bin mit einem Repeater-Steuerelement für den Haupt-Cord. Wie komme ich zum nächsten zurück-Cord bekommen?


OK, so ist die Datenquelle in der aspx-Seite. Ich würde es auf den Code hinter Seite haben zu bewegen Nextresult Recht zu benutzen? Hier ist nun mein Code. Wie kann ich die Datenquelle auf den Code-Behind bewegen, implementieren einen Datareader, so kann ich Nextresult benutzen?

<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>
War es hilfreich?

Lösung

Rufen Sie die Nextresult () -Methode für Ihre Leser zum nächsten Ergebnis zu gelangen.

Nein, Sie können dies mit SqlDataSource nicht tun, müssen Sie Code-Behind verwenden oder das Verfahren in einzelne Abfragen zu brechen.

Andere Tipps

Vielen Dank für Ihre Antworten jedermanns Sache. Nextresult () funktioniert gut, sofern Sie schon einige Änderungen aus der Drag & Drop-Steuerung Schöpfung gehen zu machen. Hier sind sie.

  1. Entfernen Sie die Datenquelle aus der aspx Seite
  2. Entfernen Sie die DataSourceID Eigenschaft aus dem Repeater-Steuerelement
  3. Erstellen Sie eine Funktion in Ihrem Code-Behind, die ein Datareader-Objekt zurückgibt. zB AstMgtDr ()
  4. Auf Ihrer Seite lädt die Datenquelle und databind Eigenschaften für das Repeater-Steuerelement gesetzt

    Repeater1.DataSource = AstMgtDr();

    Repeater1.DataBind();

  5. An der Spitze Ihrer aspx Seite, eine Seite Ebene Richtlinie fügen Sie den „System.Data.Common“ zu verwenden, Namespace  <%@ Import namespace="System.Data.Common" %>

  6. Ihre Daten anzuzeigen:

  

Dies ist die Methode, mit der besten   Leistung, aber es bedarf der ausdrücklichen   Typisierung

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

Dies ist eine weitere Methode Feld mit   Namen - teurer als die   vorherige Methode, aber schneller als die Standard-Eval.

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

Hope spart jemand anderes etwas Zeit.

Diese Frage wurde ein paar Mal gesehen und ich wollte nur meine eigene Lösung unterbreiten.
weiß, dass ich die ursprüngliche Frage war c #, aber ich unterstütze Legacy-Systeme und es ist einfach, den Code zu konvertieren.
Das kam heute für mich. Ich brauchte eine schnelle und schmutzige Art und Weise die Ergebnisse aus einer gespeicherten Prozedur anzuzeigen, die 7 verschiedene Datensätze zurückgegeben.
Ich ging über diesen durch eine System.Data.DataSet mit meinen gespeicherten Prozedur Ergebnissen zu füllen. Dann Datagrids dynamisch erstellen, und das Hinzufügen von ihnen einen Platzhalter.

HTML-Code:

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

VB.NET-Code:

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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top