asp.net 动态生成rdlc报表(原创)
2011-12-23 00:00
645 查看
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你需要改的格式是哪个地方
相关文章推荐
- 动态生成rdlc 报表(原创)
- Asp.net中动态控制RDLC报表
- ASP.NET中动态控制RDLC报表
- Asp.net中动态控制RDLC报表
- ASP.NET中动态控制RDLC报表
- 动态生成rdlc 报表(原创)
- Asp.net中动态控制RDLC报表
- asp.net中轻量级报表RDLC的动态数据绑定
- ASP.net动态生成table(原创)
- ASP.NET中动态控制RDLC报表
- Asp.net中动态控制RDLC报表 自定义RDLC
- ASP.NET中动态控制RDLC报表
- ASP.NET中动态控制RDLC报表
- Asp.net动态生成html页面(二)
- ASP.NET动态加载用户控件的页面生成过程
- 分享一个动态生成RDLC报表的类
- TreeView无刷新动态生成树[C# Asp.net 2.0]
- 在ASP.NET 2.0中使用RDLC格式的报表的问题
- Asp.Net 动态生成验证码