ReportViewer 报表的加载方式有两种:一种是嵌入式资源,一种是文件路径;
使用路径方式加载报表并修改报表文件,可以设置打印的页边距。
代码如下:
namespace JawNet.Classes
{
/// <summary>
/// 用于设置Rdlc报表的页边距等
/// </summary>
public class RdlcMargins
{
/// <param name="path">报表路径</param>
public RdlcMargins(string path)
{
this.ReportPath = path;
this.xDoc = new XmlDocument();
try
{
this.xDoc.Load(path);
this.xRoot = this.xDoc.DocumentElement;
}
catch (Exception)
{
throw;
}
}
public string ReportPath
{
get;
set;
}
public XmlDocument xDoc
{
get;
set;
}
public XmlElement xRoot
{
get;
set;
}
/// <summary>
/// 获取属性值
/// </summary>
/// <param name="pName">属性名称</param>
/// <returns>属性值</returns>
/// <remarks></remarks>
public string GetProperty(string pName)
{
XmlElement n ;//= default(XmlElement);
XmlNamespaceManager nsmgr = new XmlNamespaceManager(this.xDoc.NameTable);
nsmgr.AddNamespace("rd", this.xRoot.NamespaceURI);
n = (XmlElement)this.xRoot.SelectSingleNode("rd:"+pName,nsmgr);
if ((n != null))
{
return n.InnerText;
}
else
{
return "";
}
}
/// <summary>
/// 设置属性值
/// </summary>
/// <param name="pName">属性名称</param>
/// <param name="pValue">属性值</param>
/// <remarks></remarks>
public void SetProperty(string pName, string pValue)
{
//sServerAddress = pValue;
XmlElement n ;//= default(XmlElement);
XmlNamespaceManager nsmgr =new XmlNamespaceManager(this.xDoc.NameTable);
nsmgr.AddNamespace("rd",this.xRoot.NamespaceURI);
n = (XmlElement)this.xRoot.SelectSingleNode("rd:"+pName,nsmgr);
//throw new Exception(this.xRoot.NamespaceURI);
if ((n != null))
{
n.InnerText = pValue;
}
else
{
XmlElement node ;//= default(XmlElement);
node = xDoc.CreateElement(pName,this.xRoot.NamespaceURI);
node.InnerText = pValue;
xDoc.DocumentElement.AppendChild(node);
}
xDoc.Save(this.ReportPath);
}
}
}
此设置中较为难处理的地方主要是读取和设置节点值。
因为报表XML文件中,使用了微软的报表命名空间,因此在读取和设置时,必须考虑此问题。
而我们一般在自己写的XML文件中,都不设置命名空间,使用默认的方法就可以读取和设置。
此代码参考了网上的一些文章和社区文章。如:孟宪会回答别人的问题。
使用方法:
RdlcMargins rm=new RdlcMargins(Application.StartUpPath+"//Rpt//rpt.rdlc");
rm.getProperty("LeftMargin");
rm.setProperty("LeftMargin","0.5cm");
注意:使用时,请修改此类的命名空间,以适合自己的程序