实例介绍
【实例简介】
C#调用Fastreport,实现服务器FTP下载模版打印,本地文件打印
【实例截图】
【核心代码】
/// <summary>
/// XML操作类
/// </summary>
internal class ToBCBXmlHepler
{
/// <summary>
/// 把数据集的内容转化为报表控件所需的XML字符串
/// </summary>
/// <param name="dtTable"></param>
/// <returns></returns>
public static string TableToXml(DataTable dtTable)
{
StringBuilder printStr = new StringBuilder();
XmlWriterSettings setting = new XmlWriterSettings
{
Indent = true,
OmitXmlDeclaration = true
};
using (XmlWriter printXml = XmlWriter.Create(printStr, setting))
{//XML头
printXml.WriteStartElement("xml");
printXml.WriteAttributeString("version", "1.0");
printXml.WriteAttributeString("standalone", "yes");
printXml.WriteStartElement("DATAPACKET");
printXml.WriteStartElement("METADATA");
printXml.WriteStartElement("FIELDS");
//数据字段及数据类型
foreach (DataColumn column in dtTable.Columns)
{
if (column.DataType.Name == "Int64" || column.DataType.Name == "Boolean"
|| column.DataType.Name == "String" || column.DataType.Name == "DateTime"
|| column.DataType.Name == "Decimal" || column.DataType.Name == "Double"
|| column.DataType.Name == "Int32" || column.DataType.Name == "Single"
|| column.DataType.Name == "Int16" || column.DataType.Name == "Byte"
|| column.DataType.Name == "Byte[]")
{
printXml.WriteStartElement("FIELD");
printXml.WriteAttributeString("attrname", column.ColumnName);
//字段的数据类型
if (column.DataType.Name == "Int64")
{ //bigint
printXml.WriteAttributeString("fieldtype", "i8");
printXml.WriteAttributeString("WIDTH", "8");
}
else if (column.DataType.Name == "Boolean")
{ //bit
printXml.WriteAttributeString("fieldtype", "boolean");
printXml.WriteAttributeString("WIDTH", "2");
}
else if (column.DataType.Name == "String")
{ //char
//如果是Select串这种图片加载方式,传过来的CarImage字段值是字符串,而OCX读图片时的数据类型为"bin.hex"
/*
if (Column.ColumnName.Contains("CarImage"))
{
PrintXml.WriteAttributeString("fieldtype", "bin.hex");
PrintXml.WriteAttributeString("SUBTYPE", "Binary");
}
else
*/
{
printXml.WriteAttributeString("fieldtype", "string");
var maxLength = column.MaxLength;
if (maxLength < 0) maxLength = 300;//如果长度为-1传到OCX会出错
printXml.WriteAttributeString("WIDTH", maxLength.ToString());
}
}
else if (column.DataType.Name == "DateTime")
{ //dateTime
printXml.WriteAttributeString("fieldtype", "dateTime");
printXml.WriteAttributeString("WIDTH", "16");
}
else if (column.DataType.Name == "Decimal")
{ //Decimal
//PrintXml.WriteAttributeString("fieldtype", "number");
//PrintXml.WriteAttributeString("WIDTH", "19");
printXml.WriteAttributeString("fieldtype", "fixed");
printXml.WriteAttributeString("WIDTH", "18");
}
else if (column.DataType.Name == "Double")
{ //Float
//PrintXml.WriteAttributeString("fieldtype", "float");
//PrintXml.WriteAttributeString("WIDTH", "8");
printXml.WriteAttributeString("fieldtype", "r8");
printXml.WriteAttributeString("WIDTH", "8");
}
else if (column.DataType.Name == "Int32")
{ //int
printXml.WriteAttributeString("fieldtype", "int");
printXml.WriteAttributeString("WIDTH", "4");
}
else if (column.DataType.Name == "Single")
{ //Real r8
//PrintXml.WriteAttributeString("fieldtype", "r4");
//PrintXml.WriteAttributeString("WIDTH", "4");
printXml.WriteAttributeString("fieldtype", "r8");
printXml.WriteAttributeString("WIDTH", "8");
}
else if (column.DataType.Name == "Int16")
{ //smallint
printXml.WriteAttributeString("fieldtype", "i2");
printXml.WriteAttributeString("WIDTH", "2");
}
else if (column.DataType.Name == "Byte")
{ //tinyint
//PrintXml.WriteAttributeString("fieldtype", "ui1");
//PrintXml.WriteAttributeString("WIDTH", "1");
printXml.WriteAttributeString("fieldtype", "i2");
//PrintXml.WriteAttributeString("WIDTH", "1");
}
else if (column.DataType.Name == "Byte[]")//OCX读图片时用的数据类型
{ //tinyint
printXml.WriteAttributeString("fieldtype", "bin.hex");
printXml.WriteAttributeString("SUBTYPE", "Binary");
}
printXml.WriteEndElement();
}
}
printXml.WriteEndElement();
printXml.WriteEndElement();
printXml.WriteStartElement("ROWDATA");
foreach (DataRow row in dtTable.Rows)
{
printXml.WriteStartElement("ROW");
foreach (DataColumn column in dtTable.Columns)
{
if (row.IsNull(column))
continue;
if (column.DataType.Name == "Int64" || column.DataType.Name == "Boolean"
|| column.DataType.Name == "String" || column.DataType.Name == "DateTime"
|| column.DataType.Name == "Decimal" || column.DataType.Name == "Double"
|| column.DataType.Name == "Int32" || column.DataType.Name == "Single"
|| column.DataType.Name == "Int16" || column.DataType.Name == "Byte"
|| column.DataType.Name == "Byte[]")
{
if (column.DataType.Name == "DateTime")
{
DateTime tmpDateTime = Convert.ToDateTime(row[column]);
string tmpStr = tmpDateTime.ToString("yyyy-MM-dd") "T" tmpDateTime.ToString("HH:mm:ss");
printXml.WriteAttributeString(column.ColumnName, tmpStr);
}
else if (column.DataType.Name == "Byte[]")
{
printXml.WriteAttributeString(column.ColumnName, Convert.ToBase64String((byte[])row[column]));
}
else
{
printXml.WriteAttributeString(column.ColumnName, row[column].ToString());
}
}
}
printXml.WriteEndElement();
}
printXml.WriteEndElement();
printXml.WriteEndElement();
}
//将生成的XML串第一行的首尾加上?,是为了HYPrint.ocx中XML导入DataSet时用到的格式.
string str = printStr.ToString();
str = str.Replace("<xml version=\"1.0\" standalone=\"yes\">", "<?xml version=\"1.0\" standalone=\"yes\"?>");
return str;
}
/*生成的例子
<?xml version="1.0" standalone="yes"?>
<DATAPACKET version="2.0">
<METADATA>
<FIELDS>
<FIELD attrname="Ope_ODate" fieldtype="dateTime" WIDTH="16" />
<FIELD attrname="Ope_InfType" fieldtype="int" WIDTH="4" />
<FIELD attrname="Ope_InfClass" fieldtype="int" WIDTH="4" />
<FIELD attrname="Ope_EmpId" fieldtype="string" WIDTH="10" />
<FIELD attrname="Ope_EmpName" fieldtype="string" WIDTH="8" />
<FIELD attrname="Ope_SoftName" fieldtype="string" WIDTH="20" />
<FIELD attrname="Ope_Computer" fieldtype="string" WIDTH="20" />
<FIELD attrname="Ope_Infomation" fieldtype="string" WIDTH="150" />
</FIELDS>
</METADATA>
<ROWDATA>
<ROW Ope_ODate="2012-02-22T17:09:00" Ope_InfType="1" Ope_InfClass="0" Ope_EmpId="system" Ope_EmpName="system" Ope_SoftName="数据管理" Ope_Computer="127.0.0.1" Ope_Infomation="冀B23142车辆收费记录被删除!" />
<ROW Ope_ODate="2012-02-23T09:47:07" Ope_InfType="1" Ope_InfClass="0" Ope_EmpId="system" Ope_EmpName="system" Ope_SoftName="数据管理" Ope_Computer="127.0.0.1" Ope_Infomation="检测流水号:032012021100005的车辆注册数据被删除!" />
<ROW Ope_ODate="2012-02-10T15:14:00" Ope_InfType="1" Ope_InfClass="0" Ope_EmpId="system" Ope_EmpName="system" Ope_SoftName="数据维护" Ope_Computer="127.0.0.1" Ope_Infomation="备份车辆检测数据,起止日期:2012021020120210" />
<ROW Ope_ODate="2012-02-28T16:13:15" Ope_InfType="1" Ope_InfClass="0" Ope_EmpId="system" Ope_EmpName="system" Ope_SoftName="数据管理" Ope_Computer="127.0.0.1" Ope_Infomation="检测流水号:032012021100005的车辆注册数据被删除!" />
<ROW Ope_ODate="2011-06-08T11:57:18" Ope_InfType="1" Ope_InfClass="0" Ope_EmpId="system" Ope_EmpName="system" Ope_SoftName="数据维护" Ope_Computer="127.0.0.1" Ope_Infomation="备份车辆检测数据,起止日期:2011060820110608" />
<ROW Ope_ODate="2011-07-28T09:56:11" Ope_InfType="1" Ope_InfClass="0" Ope_EmpId="system" Ope_EmpName="system" Ope_SoftName="数据管理" Ope_Computer="127.0.0.1" Ope_Infomation="检测流水号:012011062700001的车辆注册数据被删除!" />
<ROW Ope_ODate="2012-02-14T11:49:29" Ope_InfType="1" Ope_InfClass="0" Ope_EmpId="system" Ope_EmpName="system" Ope_SoftName="数据管理" Ope_Computer="127.0.0.1" Ope_Infomation="冀A-IIIIII车辆收费记录被删除!" />
<ROW Ope_ODate="2011-12-21T16:31:08" Ope_InfType="1" Ope_InfClass="0" Ope_EmpId="system" Ope_EmpName="system" Ope_SoftName="数据维护" Ope_Computer="127.0.0.1" Ope_Infomation="备份车辆检测数据,起止日期:2001122120111221" />
<ROW Ope_ODate="2012-02-10T10:29:12" Ope_InfType="1" Ope_InfClass="0" Ope_EmpId="system" Ope_EmpName="system" Ope_SoftName="数据维护" Ope_Computer="192.168.1.167" Ope_Infomation="备份车辆检测数据,起止日期:2010021020120210" />
<ROW Ope_ODate="2011-12-21T16:50:50" Ope_InfType="1" Ope_InfClass="0" Ope_EmpId="system" Ope_EmpName="system" Ope_SoftName="数据维护" Ope_Computer="127.0.0.1" Ope_Infomation="恢复车辆检测数据:G:\HYAis\HYWebMang\\BackFile\2检测数据20111221163359.mdb" />
<ROW Ope_ODate="2011-12-21T16:33:59" Ope_InfType="1" Ope_InfClass="0" Ope_EmpId="system" Ope_EmpName="system" Ope_SoftName="数据维护" Ope_Computer="127.0.0.1" Ope_Infomation="备份车辆检测数据,起止日期:2001122120111221" />
<ROW Ope_ODate="2012-03-03T16:48:36" Ope_InfType="1" Ope_InfClass="1" Ope_EmpId="system" Ope_EmpName="system" Ope_SoftName="档案管理" Ope_Computer="127.0.0.1" Ope_Infomation="删除车辆【冀ASY0001】的车辆信息!" />
<ROW Ope_ODate="2012-03-03T16:48:33" Ope_InfType="1" Ope_InfClass="1" Ope_EmpId="system" Ope_EmpName="system" Ope_SoftName="档案管理" Ope_Computer="127.0.0.1" Ope_Infomation="删除车辆【冀ASY0002】的车辆信息!" />
<ROW Ope_ODate="2012-02-10T15:31:04" Ope_InfType="1" Ope_InfClass="0" Ope_EmpId="system" Ope_EmpName="system" Ope_SoftName="数据维护" Ope_Computer="192.168.1.223" Ope_Infomation="备份车辆检测数据,起止日期:2012021020120210" />
<ROW Ope_ODate="2012-02-10T10:29:25" Ope_InfType="1" Ope_InfClass="0" Ope_EmpId="system" Ope_EmpName="system" Ope_SoftName="数据维护" Ope_Computer="192.168.1.167" Ope_Infomation="备份车辆检测数据,起止日期:2001021020120210" />
<ROW Ope_ODate="2012-02-10T15:32:18" Ope_InfType="1" Ope_InfClass="0" Ope_EmpId="system" Ope_EmpName="system" Ope_SoftName="数据维护" Ope_Computer="192.168.1.223" Ope_Infomation="备份车辆检测数据,起止日期:2012021020120210" />
<ROW Ope_ODate="2011-06-02T17:04:24" Ope_InfType="1" Ope_InfClass="0" Ope_EmpId="system" Ope_EmpName="system" Ope_SoftName="数据维护" Ope_Computer="127.0.0.1" Ope_Infomation="备份车辆检测数据,起止日期:2011060220110602" />
<ROW Ope_ODate="2012-02-10T15:31:11" Ope_InfType="1" Ope_InfClass="0" Ope_EmpId="system" Ope_EmpName="system" Ope_SoftName="数据维护" Ope_Computer="192.168.1.223" Ope_Infomation="备份车辆检测数据,起止日期:2012021020120210" />
<ROW Ope_ODate="2012-02-10T10:28:57" Ope_InfType="1" Ope_InfClass="0" Ope_EmpId="system" Ope_EmpName="system" Ope_SoftName="数据维护" Ope_Computer="192.168.1.167" Ope_Infomation="备份车辆检测数据,起止日期:2012021020120210" />
<ROW Ope_ODate="2012-02-22T11:14:57" Ope_InfType="1" Ope_InfClass="0" Ope_EmpId="system" Ope_EmpName="system" Ope_SoftName="数据管理" Ope_Computer="127.0.0.1" Ope_Infomation="冀B12233车辆收费记录被删除!" />
<ROW Ope_ODate="2012-02-28T17:04:05" Ope_InfType="1" Ope_InfClass="0" Ope_EmpId="system" Ope_EmpName="system" Ope_SoftName="数据管理" Ope_Computer="127.0.0.1" Ope_Infomation="冀B243322车辆收费记录被删除!" />
</ROWDATA>
</DATAPACKET>
</xml>
* */
/// <summary>
/// 拼写BCB DataSet数据集用XML
/// </summary>
/// <param name="det"></param>
/// <returns></returns>
public static string GetBcbXml(DataSet det)
{
int tablenum = det.Tables.Count;
string xml = "";
string rowEnter = "\r\n";
for (int i = 0; i < tablenum; i )
{
xml = "<xml xmlns:s='uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882'" rowEnter;
xml = "xmlns:dt='uuid:C2F41010-65B3-11d1-A29F-00AA00C14882'" rowEnter;
xml = "xmlns:rs='urn:schemas-microsoft-com:rowset'" rowEnter;
xml = "xmlns:z='#RowsetSchema'>" rowEnter;
xml = "<?xml version=\"1.0\" encoding=\"gb2312\"?>" rowEnter;
xml = "<s:Schema id='RowsetSchema'>" rowEnter;
xml = "<s:ElementType name='row' content='eltOnly' rs:updatable='true'>" rowEnter;
int rowCount = det.Tables[i].Rows.Count;
int columnCount = det.Tables[i].Columns.Count;
for (int j = 0; j < columnCount; j )
{
xml = BcbColumn(det.Tables[i].Columns[j], j 1);
}
xml = "<s:extends type='rs:rowbase'/>" rowEnter;
xml = "</s:ElementType>" rowEnter;
xml = "</s:Schema>" rowEnter;
xml = "<rs:data>" rowEnter;
for (int j = 0; j < rowCount; j )
{
xml = "<z:row";
for (int z = 0; z < columnCount; z )
{
string name = " " det.Tables[i].Columns[z].ColumnName;
if (det.Tables[i].Columns[z].DataType == Type.GetType("System.Byte[]"))
{
byte[] b = new byte[0];
if (det.Tables[i].Rows[j][z] != DBNull.Value)
b = (byte[])(det.Tables[i].Rows[j][z]);
string rowvalue = "";
for (int m = 0; m < b.Length; m )
{
rowvalue = b[m].ToString("X2");
}
xml = name "='" rowvalue.ToLower() "'";
}
else
{
string rowvalue = Convert.ToString(det.Tables[i].Rows[j][z]);
xml = name "='" rowvalue "'";
}
}
xml = "/>" rowEnter;
}
xml = "</rs:data>" rowEnter;
xml = "</xml>" rowEnter;
}
return xml;
}
public static string BcbColumn(DataColumn column, int colounNumber)
{
string rowEnter = "\r\n";
string rowxml = "<s:AttributeType name='" column.ColumnName "' rs:number='" colounNumber.ToString() "' rs:nullable='true' rs:maydefer='true' rs:writeunknown='true' rs:basetable='DataSet'" rowEnter;
rowxml = " rs:basecolumn='" column.ColumnName "'>" rowEnter;
if (column.DataType == Type.GetType("System.Byte[]"))
rowxml = "<s:datatype dt:type='bin.hex' dt:maxLength='1073741823' rs:long='true'/>" rowEnter;
else
rowxml = "<s:datatype dt:type='string' dt:maxLength='255'/>" rowEnter;
rowxml = "</s:AttributeType>" rowEnter;
return rowxml;
}
/// <summary>
/// 获取XML字符串内字段值
/// </summary>
/// <param name="xmlsrc">源字符串</param>
/// <param name="xmlNode">字符串名称</param>
/// <returns>返回字符串值 -999为空字符串 -888不适用</returns>
public static string GetXmlNodeValue(string xmlsrc, string xmlNode)
{
string xmlNodeValue = "";
var nodeStart = $"<{xmlNode}>";
var nodeEnd = $"</{xmlNode}>";
if (xmlsrc.Contains(nodeStart) && xmlsrc.Contains(nodeEnd))
{
var start = xmlsrc.IndexOf(nodeStart, 0, StringComparison.Ordinal) nodeStart.Length;
var len = xmlsrc.IndexOf(nodeEnd, 0, StringComparison.Ordinal) - start;
xmlNodeValue = xmlsrc.Substring(start, len);
}
if (xmlNodeValue.Equals("不适用") || xmlNodeValue.Equals("不支持") || xmlNodeValue.Equals("N/A"))
xmlNodeValue = "-9999";
return xmlNodeValue;
}
/// <summary>
/// 获取XML字符串内字段值
/// </summary>
/// <param name="xmlsrc">源字符串</param>
/// <param name="xmlNode">字符串名称</param>
/// <returns>返回字符串值</returns>
public static string GetXmlValue(string xmlsrc, string xmlNode)
{
string xmlNodeValue = "";
var nodeStart = $"<{xmlNode}>";
var nodeEnd = $"</{xmlNode}>";
if (xmlsrc.Contains(nodeStart) && xmlsrc.Contains(nodeEnd))
{
var start = xmlsrc.IndexOf(nodeStart, 0, StringComparison.Ordinal) nodeStart.Length;
var len = xmlsrc.IndexOf(nodeEnd, 0, StringComparison.Ordinal) - start;
xmlNodeValue = xmlsrc.Substring(start, len);
}
return xmlNodeValue;
}
/// <summary>
/// 删除XML中指定的字符串
/// </summary>
/// <param name="xmlsrc">源字符串</param>
/// <param name="xmlNode">字符串名称</param>
/// <returns>返回字符串值</returns>
public static string DelXmlAssignStr(string xmlsrc, string xmlNode)
{
string xmlValue = xmlsrc;
var nodeStart = $"<{xmlNode}>";
var nodeEnd = $"</{xmlNode}>";
if (xmlsrc.Contains(nodeStart) && xmlsrc.Contains(nodeEnd))
{
var start = xmlsrc.IndexOf(nodeStart, 0, StringComparison.Ordinal);
var len = xmlsrc.IndexOf(nodeEnd, 0, StringComparison.Ordinal) - start nodeEnd.Length;
xmlValue = xmlsrc.Remove(start, len);
}
return xmlValue;
}
}
标签: FastReport Fast re 调用 fa
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
网友评论
我要评论