最后我们像下面这样实现它。我想它可能对其他人有用。所以我发布了我的解决方案:
这可以通过实现XML
First convert your data into 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的 Dataset :
通常,我们所做的就是你写一些存储过程或在数据集中写一些查询,因为我们是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'
)
FieldsNAME
等CONTACT
应与您最初在顶部创建的 XML 文档相同ConvertToXML
所以底线是,您不是通过数据库中的存储过程将数据传递给报告,而是实际上从 aspx 页面获取数据 - 代码隐藏并将其转换为 XML 并通过此数据集将其传递给您的报告服务器报告
所以什么在后面的代码中传递给您的报告..瞧!