一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

Rdlc 動態(tài)加載xml 實(shí)現(xiàn)圖表寬度(高度)自適應(yīng)

 唐伯龍 2011-07-23

Rdlc 動態(tài)加載xml 實(shí)現(xiàn)圖表寬度(高度)自適應(yīng)

2011-07-23 10:28 by mr.張, 442 visits, 收藏, 編輯

微軟提供的Rdlc 報(bào)表為我們提供的很大的便利,功能強(qiáng)大,使用簡單。但在使用過程中總是有那么點(diǎn)美中不足:圖表大小是固定的,不能根據(jù)內(nèi)容自適應(yīng)大小。這就造成了如下情況,看圖說話:

數(shù)據(jù)少時(shí)圖表比較稀疏

數(shù)據(jù)多時(shí)圖表很擠

    這對于我們追求完美的程序員來說是不能接收的,堅(jiān)決要改造。

思路:    

Rdlc 是基于xml的,我們可以通過動態(tài)修改rdlc的xml數(shù)據(jù),來更改rdlc 定義的圖表大小。

寬度的計(jì)算:類別總數(shù)*序列數(shù)*(條形單位寬度+類別間隔)

寬度計(jì)算根據(jù)圖表的類型不同計(jì)算公式也不同,上述公式只適合 "簡單柱形圖""簡單條形圖",其它類型的圖表以后解決。

Rdlc報(bào)表xml解析:

    這里我們只需要動態(tài)改變 圖表的寬度和高度,需要知道如下幾個(gè)節(jié)點(diǎn):

<Chart Name="chart1"> 中間數(shù)據(jù)省略 </Chart> xpath 路徑為: Report/Body/ ReportItems/ Chart

    Chart的類型Type節(jié)點(diǎn): <Chart> <Type>Column</Type> </Chart> 其中 Type為Column 代表 簡單柱形圖 ,Type 為 Bar 代表 簡單條形圖

Chart的寬度 Width 節(jié)點(diǎn): <Chart> <Width>23cm</Width> </Chart>

Chart的 高度Height 節(jié)點(diǎn): <Chart> <Height>11.5cm</Height> </Chart>

部分代碼:

public class RdlcReportHelper

{

private XmlDocument _rdlcDoc;

private XmlNode _root;

private string _chartName;

private double _perWidth = 0.15; //厘米

private XPathDocument xpathdoc;

private XPathNavigator xnv;

private XmlNamespaceManager xnm;

    private string[] _chartType = new string[] { "Bar", "Column" };

    public RdlcReportHelper(string path)

{

//加載xml

_rdlcDoc = new XmlDocument();

_rdlcDoc.Load(path);

_root = _rdlcDoc.LastChild;

xnm = new XmlNamespaceManager(_rdlcDoc.NameTable);

xnm.AddNamespace("rd", "http://schemas.microsoft.com/SQLServer/reporting/reportdesigner");

xnm.AddNamespace("default", "http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition");

xnm.PushScope();

xpathdoc = new XPathDocument(path);

xnv = xpathdoc.CreateNavigator();

}

/// <summary>

/// 轉(zhuǎn)換xml

/// </summary>

/// <returns></returns>

public MemoryStream AutoSizeReport()

{

        …………
        XmlNode ChartNode = _root.SelectSingleNode("http://default:Body/default:ReportItems/default:Chart[@Name='" + _chartName + "']", xnm); //查找
 Chart 節(jié)點(diǎn)

        XmlNode ChartTypeNode = ChartNode.SelectSingleNode("default:Type", xnm); //查找圖表類型節(jié)點(diǎn)

if (w != 0)

{

if (ChartTypeNode.InnerText == "Bar")

{

XmlNode heightNode = ChartNode.SelectSingleNode("default:Height", xnm); //設(shè)置 高度

heightNode.InnerText = w + "cm";

}

else if (ChartTypeNode.InnerText == "Column")

{

XmlNode widthNode = ChartNode.SelectSingleNode("default:Width", xnm); //設(shè)置寬度

widthNode.InnerText = w + "cm";

}

}

}

 

如何使用:

使用設(shè)計(jì)器設(shè)計(jì)好報(bào)表,設(shè)置要自動伸展的圖表名稱,類別字段、序列字段、值字段和單位寬度。

RdlcReportHelper reporthelper = new RdlcReportHelper(Server.MapPath("ReportTest.rdlc"));

reporthelper.AutoChartName = "chart1"; //設(shè)置自動伸展圖表名稱

reporthelper.DataSource = dt; //設(shè)置綁數(shù)據(jù)源

reporthelper.TypeField = "Year"; //設(shè)置類別字段

reporthelper.SeriesField = "TypeName"; //設(shè)置序列字段

reporthelper.ValueField = "Money"; //設(shè)置值字段

reporthelper.PerWidth = 0.15; //第個(gè)條形的最小寬度 默認(rèn)0.15  

this.ReportViewer1.LocalReport.LoadReportDefinition(reporthelper.AutoSizeReport());  

//this.ReportViewer1.LocalReport.ReportPath = Server.MapPath("ReportTest.rdlc");  

this.ReportViewer1.LocalReport.DataSources.Add(new ReportDataSource("DataSet1_DataTable1", dt));

this.ReportViewer1.LocalReport.Refresh();

最終效果如下:

再多的數(shù)據(jù)也能自動伸展

文筆有限,描述不清,大家下載代碼看吧。

    本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    日韩欧美综合在线播放| 91国内视频一区二区三区| 伊人久久青草地婷婷综合| 伊人久久青草地综合婷婷| 国产亚洲视频香蕉一区| 日韩一区二区三区有码| 午夜福利激情性生活免费视频| 搡老熟女老女人一区二区| 精品熟女少妇一区二区三区 | 亚洲欧美精品伊人久久| 91精品视频免费播放| 日韩高清毛片免费观看| 色婷婷成人精品综合一区| 日本精品最新字幕视频播放| 欧美日韩国内一区二区| 91亚洲熟女少妇在线观看| 午夜精品久久久99热连载| 午夜福利92在线观看| 欧美日韩国产二三四区| 亚洲日本中文字幕视频在线观看 | 国产精品内射视频免费| 嫩草国产福利视频一区二区| 欧美一区二区三区99| 精品欧美国产一二三区| 中文字幕有码视频熟女| 国产一区国产二区在线视频| 午夜免费精品视频在线看| 亚洲国产av在线观看一区| 欧美一区二区三区高潮菊竹 | 国产一区二区久久综合| 久久福利视频在线观看| 欧美二区视频在线观看| 麻豆精品在线一区二区三区| 麻豆蜜桃星空传媒在线观看| 国产一区二区三区不卡| 成人日韩在线播放视频| 国产男女激情在线视频| 亚洲视频一区自拍偷拍另类| 美国欧洲日本韩国二本道| 中文字幕亚洲人妻在线视频| 偷自拍亚洲欧美一区二页|