您的位置:首页 > 编程语言 > ASP

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你需要改的格式是哪个地方
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: