嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):813200300
本次赞助数额为: 2 元微信扫码支付:2 元
请留下您的邮箱,我们将在2小时内将文件发到您的邮箱
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;
}
}