asp.net 動(dòng)態(tài)生成rdlc報(bào)表(原創(chuàng))
更新時(shí)間:2011年12月23日 00:50:46 作者:
因?yàn)楣拘枨?研究微軟的Reportviewer 因?yàn)橛性S多特別要求所以動(dòng)態(tài)調(diào)用 比較靈活 我的需求是 根據(jù)數(shù)據(jù)不同的合并表頭 (參考了隨心所欲的博客文檔 再次表示感謝)
復(fù)制代碼 代碼如下:
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 數(shù)據(jù)源名字必須和此報(bào)表原綁定的數(shù)據(jù)源名相同
this.ReportViewer1.LocalReport.DataSources.Add(new ReportDataSource("Orders_DataTable1", ds.Tables[0]));
this.ReportViewer1.LocalReport.Refresh();
}
}
//這個(gè)方法就是自定義報(bào)表的樣式
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操作了 沒(méi)必要看我的 根據(jù)自己的需求而做
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);
//建設(shè)期
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 = "建設(shè)期";
xmlCellValue.InnerText = "建設(shè)期";
XmlNode xnRemove;
for (int i = 0; i <int.Parse(cCount) - 1; i++)
{
xnRemove = xCells.ChildNodes.Item(2);
xCells.RemoveChild(xnRemove);
}
//投產(chǎn)期
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 = "投產(chǎn)期";
xmlCellValueT.InnerText = "投產(chǎn)期";
for (int j = 0; j < int.Parse(dCount) - 1; j++)
{
xnRemove = xCells.ChildNodes.Item(3);
xCells.RemoveChild(xnRemove);
}
//生產(chǎn)期
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 = "生產(chǎn)期";
xmlCellValueC.InnerText = "生產(chǎn)期";
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;
}
技巧 可以先在報(bào)表里自己設(shè)計(jì)好需要的格式 用
XmlDocument sourceDoc = new XmlDocument();
string path = AppDomain.CurrentDomain.BaseDirectory + "Orders.rdlc";
然后用sourceDoc .save()保存生成xml
可以看到此xml你需要改的格式是哪個(gè)地方
相關(guān)文章
asp.net實(shí)現(xiàn)XML文件讀取數(shù)據(jù)綁定到DropDownList的方法
這篇文章主要介紹了asp.net實(shí)現(xiàn)XML文件讀取數(shù)據(jù)綁定到DropDownList的方法,結(jié)合實(shí)例形式分析了asp.net針對(duì)xml文件操作及DropDownList控件的使用技巧,需要的朋友可以參考下2017-02-02ASP.NET Datagridview自動(dòng)換行的小例子
這篇文章介紹了ASP.NET Datagridview自動(dòng)換行的代碼,有需要的朋友可以參考一下,希望對(duì)你有所幫助2013-07-07Sqlite 常用函數(shù)封裝提高Codeeer的效率
以下是頻繁用到的Sqlite函數(shù),內(nèi)容格式相對(duì)固定,封裝一下有助于提高開(kāi)發(fā)效率^_^至少提高Codeeer的效率了2012-12-12ASP.NET?Core?WebApi返回結(jié)果統(tǒng)一包裝實(shí)踐記錄
本文主要是展示了針對(duì)ASP.NET Core WeApi結(jié)果統(tǒng)一返回格式的相關(guān)操作,通過(guò)示例我們一步一步的展示了完成這一目標(biāo)的不斷升級(jí)的實(shí)現(xiàn),雖然整體看起來(lái)比較簡(jiǎn)單,但是卻承載著筆者一次又一次的思考升級(jí)2022-04-04.net開(kāi)發(fā)中幾個(gè)重要的認(rèn)識(shí)誤區(qū)小結(jié)
.net如今已經(jīng)很流行,成為趕時(shí)髦的程序員的首選。但是,大量剛剛接觸.net的程序員的確存在一定的認(rèn)識(shí)誤區(qū),這里先介紹一部分。2010-04-04ASP.NET GridView 實(shí)現(xiàn)課程表顯示(動(dòng)態(tài)合并單元格)實(shí)現(xiàn)步驟
GridView,ASP.NET中很常用的數(shù)據(jù)顯示控件,這里,我將用這個(gè)控件來(lái)實(shí)現(xiàn)課程表的顯示。首先說(shuō)說(shuō)課程表的顯示與普通記錄的顯示有何不同?感興趣的朋友可以了解下,或許對(duì)你有所幫助2013-02-02