最後に、次のように実装しました。私はそれが他の人にいくらか役立つかもしれないと思いました。だから私の解決策を投稿しています:これはXML
の実装で行うことができます最初に次のようにデータをXMLに
変換します:
private void ConvertToXml(ref XmlDocument xm)
{
const string header = @"<ENVELOPE>";
var strenvelopes = "";
GridItemCollection selectedRows;
selectedRows = dgAddressList.SelectedItems;
if (selectedRows.Count > 0)
{
foreach (GridItem item in dgAddressList.SelectedItems)
{
strenvelopes += @"<ADDRESS>" +
"<NAME>" + "<![CDATA[" + ((object[])(item.DataItem))[2].ToString() + "]]>" + "</NAME>" +
"<CONTACT>" + "<![CDATA[" + ((object[])(item.DataItem))[1].ToString() + "]]>" + "</CONTACT>" +
"<STREET>" + "<![CDATA[" + ((object[])(item.DataItem))[3].ToString() + "]]>" + "</STREET>" +
"<SUBURBSTATE>" + "<![CDATA[" + ((object[])(item.DataItem))[4].ToString() + "]]>" + "</SUBURBSTATE>" +
"</ADDRESS>";
}
}
const string footer = @"</ENVELOPE>";
var envelopes = header + strenvelopes + footer;
xm.LoadXml(envelopes);
}
独自の値に置き換える 必要があり((object[])(item.DataItem))[].ToString()
ます次に、次のようにレポートを生成します。
private void GenerateReport()
{
var xm = new XmlDocument();
ConvertToXml(ref xm);
var xml = xm.InnerXml.ToString();
rptViewer = ucrvEnvelope.FindControl("rptViewer") as ReportViewer;
if (rptViewer != null)
{
rptViewer.ProcessingMode = ProcessingMode.Remote;
rptViewer.ServerReport.ReportServerUrl = new Uri("http://localhost/MyReports");
rptViewer.ServerReport.ReportPath = "/Reporting/rptEnvelope";
rptViewer.PromptAreaCollapsed = true;
}
ReportParameter myParam = new ReportParameter("list", xml);
rptViewer.ServerReport.SetParameters(new ReportParameter[] { myParam });
rptViewer.ShowParameterPrompts = false;
rptViewer.ShowBackButton = true;
rptViewer.ServerReport.Refresh();
}
レポートにパラメータを追加する 必要があり"list"
ます。"list"
次のデータセットを介してXML全体をこれに渡すためです。
このXMLを処理するデータセット:
通常、データセット内にストアドプロシージャを作成するか、クエリを作成します。
これはXMLであるため、 XMLの方法で処理する必要があります。次のクエリを作成して処理します。 XMLデータ
Query Type: Text
DECLARE @docHandle int DECLARE @xmlDocument varchar(max); DECLARE @listXML nvarchar(max)
SET @listXML = @list
SET @xmlDocument = @listXML EXEC sp_xml_preparedocument @docHandle OUTPUT, @xmlDocument
SELECT * FROM OPENXML (@docHandle, N'/ENVELOPE/ADDRESS') WITH
(
NAME nvarchar(max) 'NAME',
CONTACT nvarchar(max) 'CONTACT',
STREET nvarchar(max) 'STREET',
SUBURBSTATE nvarchar(max) 'SUBURBSTATE'
)
フィールドなどはNAME
、CONTACT
最初にXMLドキュメントを作成したものと同じである必要があります。ConvertToXML
つまり、DBからストローされた手順を介してレポートにデータを渡すのではなく、aspxページから実際にデータを取得します-コードビハインドとそれをXMLに変換し、このデータセットを介してレポートサーバーレポートに渡しますコードビハインドでレポートに渡されます..出来上がり!