asp.net 动态生成rdlc报表(原创)

 更新时间:2011年12月23日 00:50:46   作者:  
因为公司需求 研究微软的Reportviewer 因为有许多特别要求所以动态调用 比较灵活 我的需求是 根据数据不同的合并表头 (参考了随心所欲的博客文档 再次表示感谢)
复制代码 代码如下:

string cCount = "";
string dCount = "";
string jCount = "";
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
string id = Request.QueryString["OrderID"] == null ? "1" : Request.QueryString["OrderID"].ToString();
SqlConnection con = new SqlConnection("server=CHENZQ;uid=sa;pwd=luca623;database=luca");
SqlDataAdapter sda = new SqlDataAdapter("select * from view_Order where C_orderID='" + id + "'", con);
DataSet ds = new DataSet();
sda.Fill(ds);
cCount = ds.Tables[0].Rows[0]["C_CTime"].ToString();
dCount = ds.Tables[0].Rows[0]["C_TTime"].ToString();
jCount = ds.Tables[0].Rows[0]["C_DTime"].ToString();
//这段代码是最重要
ReportViewer1.Reset();
this.ReportViewer1.LocalReport.LoadReportDefinition(GenerateRdlc());
ReportViewer1.LocalReport.DataSources.Clear();
//Orders_DataTable1 数据源名字必须和此报表原绑定的数据源名相同
this.ReportViewer1.LocalReport.DataSources.Add(new ReportDataSource("Orders_DataTable1", ds.Tables[0]));
this.ReportViewer1.LocalReport.Refresh();
}
}
//这个方法就是自定义报表的样式
public MemoryStream GenerateRdlc()
{
XmlDocument sourceDoc = new XmlDocument();
string path = AppDomain.CurrentDomain.BaseDirectory + "Orders.rdlc";
//c_CTime = ds.Tables[0].Rows[0]["C_CTime"].ToString();
sourceDoc.Load(path);
//下面就是xml操作了 没必要看我的 根据自己的需求而做
XmlNode xHeader = sourceDoc.ChildNodes.Item(1).ChildNodes.Item(13).ChildNodes.Item(1).ChildNodes.Item(0).ChildNodes.Item(4);
XmlNode xCells = xHeader.ChildNodes.Item(0).ChildNodes.Item(0).ChildNodes.Item(0);
//建设期
XmlNode xmlCell = xCells.ChildNodes.Item(1);
XmlElement xeCol = sourceDoc.CreateElement("ColSpan");
xeCol.InnerText = cCount;
xeCol.InnerXml = cCount;
xmlCell.InnerXml += xeCol.OuterXml;
XmlNode xmlCellValue = xmlCell.ChildNodes.Item(0).ChildNodes.Item(0).ChildNodes.Item(4);
xmlCellValue.InnerXml = "建设期";
xmlCellValue.InnerText = "建设期";
XmlNode xnRemove;
for (int i = 0; i <int.Parse(cCount) - 1; i++)
{
xnRemove = xCells.ChildNodes.Item(2);
xCells.RemoveChild(xnRemove);
}
//投产期
XmlNode xmlCellT = xCells.ChildNodes.Item(2);
XmlElement xeColT = sourceDoc.CreateElement("ColSpan");
xeColT.InnerText = dCount;
xeColT.InnerXml = dCount;
xmlCellT.InnerXml += xeColT.OuterXml;
XmlNode xmlCellValueT = xmlCellT.ChildNodes.Item(0).ChildNodes.Item(0).ChildNodes.Item(4);
xmlCellValueT.InnerXml = "投产期";
xmlCellValueT.InnerText = "投产期";
for (int j = 0; j < int.Parse(dCount) - 1; j++)
{
xnRemove = xCells.ChildNodes.Item(3);
xCells.RemoveChild(xnRemove);
}
//生产期
XmlNode xmlCellC = xCells.ChildNodes.Item(3);
XmlElement xeColC = sourceDoc.CreateElement("ColSpan");
xeColC.InnerText = jCount.ToString();
xeColC.InnerXml = jCount.ToString();
xmlCellC.InnerXml += xeColC.OuterXml;
XmlNode xmlCellValueC = xmlCellC.ChildNodes.Item(0).ChildNodes.Item(0).ChildNodes.Item(4);
xmlCellValueC.InnerXml = "生产期";
xmlCellValueC.InnerText = "生产期";
for (int j = 0; j < int.Parse(jCount) - 1; j++)
{
xnRemove = xCells.ChildNodes.Item(4);
xCells.RemoveChild(xnRemove);
}
MemoryStream ms = new MemoryStream();
XmlSerializer serializer = new XmlSerializer(typeof(XmlDocument));
serializer.Serialize(ms, sourceDoc);
ms.Position = 0;
return ms;
}

技巧 可以先在报表里自己设计好需要的格式 用
XmlDocument sourceDoc = new XmlDocument();
string path = AppDomain.CurrentDomain.BaseDirectory + "Orders.rdlc";
然后用sourceDoc .save()保存生成xml
可以看到此xml你需要改的格式是哪个地方

相关文章

  • 解决DropDownList总是选中第一项的方法

    解决DropDownList总是选中第一项的方法

    这篇文章主要介绍了解决DropDownList总是选中第一项的方法,DropDownList下拉框服务器控件是最常用的控件之一,虽然使用方便,但也会出现奇怪的错误,感兴趣的小伙伴们可以参考一下
    2015-10-10
  • .Net中生成二维的表格的代码 分享

    .Net中生成二维的表格的代码 分享

    找了很久才找到的在.NET中生成二维表格的代码,不敢独享,现在就贴出来给大家看看,相信对大家有所帮助。
    2013-07-07
  • asp.net中如何实现水印

    asp.net中如何实现水印

    水印的实现方法有很多,而且各种各样,在本文将为大家介绍下在asp.net中时如何实现的,如果你不会可以参考下
    2013-09-09
  • ASP.NET中Onclick与OnClientClick遇到的问题

    ASP.NET中Onclick与OnClientClick遇到的问题

    本文主要介绍了ASP.NET中Onclick与OnClientClick遇到的问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-04-04
  • asp.net中的GridView分页问题

    asp.net中的GridView分页问题

    这篇文章主要介绍了asp.net中的GridView分页问题,实例讲述了采用GridView分页出现的问题及对应的解决方案,非常具有实用价值,需要的朋友可以参考下
    2014-11-11
  • ASP.NET MVC使用Ajax的辅助的解决方法

    ASP.NET MVC使用Ajax的辅助的解决方法

    我们将大致了解一下ASP.NET MVC如何使用Ajax的辅助方法
    2013-03-03
  • asp.net自定义控件中注册Javascript问题解决方案

    asp.net自定义控件中注册Javascript问题解决方案

    这篇文章主要介绍了asp.net自定义控件中注册Javascript的问题,需要的朋友可以参考下
    2014-05-05
  • .Net学习笔记之Layui多图片上传功能

    .Net学习笔记之Layui多图片上传功能

    这篇文章主要给大家介绍了关于.Net学习笔记之Layui多图片上传功能的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用.Net具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-07-07
  • asp.net下XML的加密和解密实现方法

    asp.net下XML的加密和解密实现方法

    xml加密(XML Encryption)是w3c加密xml的标准。这个加密过程包括加密xml文档的元素及其子元素,通过加密,xml的初始内容将被替换,但其xml格式仍然被完好的保留。
    2010-02-02
  • Asp.net Core与类库读取配置文件信息的方法

    Asp.net Core与类库读取配置文件信息的方法

    这篇文章主要给大家介绍了关于Asp.net Core与类库读取配置文件信息的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-12-12

最新评论