asp.net 动态生成rdlc报表(原创)
asp.net 动态生成rdlc报表(原创)
发布时间:2016-12-29 来源:查字典编辑
摘要:复制代码代码如下:stringcCount="";stringdCount="";stringjCount="";protectedvoid...

复制代码 代码如下:

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

推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
相关阅读
网友关注
最新asp.net教程学习
热门asp.net教程学习
编程开发子分类