华域联盟 .Net asp.net 动态生成rdlc报表(原创)

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

复制代码 代码如下:

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你需要改的格式是哪个地方

您可能感兴趣的文章:

  • C#实现微信公众号群发消息(解决一天只能发一次的限制)实例分享
  • C#微信公众号开发之接收事件推送与消息排重的方法
  • .NET微信公众号开发之准备工作
  • .NET微信公众号开发之公众号消息处理
  • 图文介绍报表与企业微信公众号集成方案

本文由 华域联盟 原创撰写:华域联盟 » asp.net 动态生成rdlc报表(原创)

转载请保留出处和原文链接:https://www.cnhackhy.com/43054.htm

本文来自网络,不代表华域联盟立场,转载请注明出处。

作者: sterben

发表回复

联系我们

联系我们

2551209778

在线咨询: QQ交谈

邮箱: [email protected]

工作时间:周一至周五,9:00-17:30,节假日休息

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部