Этот вопрос просматривался несколько раз, и я просто хотел представить свое собственное решение.
Я знаю, что исходным вопросом был c #, но я поддерживаю устаревшие системы, и код легко конвертировать.
Это пришло ко мне сегодня. Мне нужен был быстрый и грязный способ отображения результатов хранимой процедуры, которая вернула 7 разных наборов данных.
Я пошел по этому пути, заполнив System.Data.DataSet результатами своей хранимой процедуры. Затем динамически создайте DataGrids и добавьте их в 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