宜昌华友成品库管理软件
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

198 lines
8.7 KiB

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Xml;
namespace SiaSun.LMS.WPFClient
{
/// <summary>
/// 显示样式类
/// </summary>
public class CustomerDescriptions
{
/// <summary>
/// 从FieldDescription.xml读取样式数据并返回数据集合
/// </summary>
public DataTable GetStyleDataTable(string TableName)
{
try
{
//获得描述信息
XmlDocument xmlDoc = new XmlDocument();
DataTable tableFieldDescription = new DataTable();
//获得描述信息
xmlDoc.Load(MainApp.File_FieldDescription_Path);
//获得节点
XmlNode xmlNode = xmlDoc.SelectSingleNode(string.Format(@"/Tables/Table[@Name='{0}']", TableName));
if (xmlNode == null)
throw new Exception(string.Format("XML中找不到节点{0}", TableName));
tableFieldDescription = new SiaSun.LMS.Common.XmlFiles().GetDataTable(xmlNode.OuterXml);
return tableFieldDescription;
}
catch (Exception ex)
{
throw new Exception(string.Format("读取样式文件,节点{0}", TableName) + ex.Message, ex);
}
}
/// <summary>
/// 从Form_Style.xml中获得窗体样式
/// </summary>
public DataTable GetFormStyleDataTable(string FormName,string TableName)
{
try
{
//获得描述信息
XmlDocument xmlDoc = new XmlDocument();
DataTable tableFieldDescription = new DataTable();
xmlDoc.Load(MainApp.File_FormStyles_Path);
//获得节点
XmlNode xmlNode = xmlDoc.SelectSingleNode(string.Format(@"/Styles/Form[@Name='{0}']", FormName));
if (xmlNode == null)
throw new Exception(string.Format("XML中找不到窗体节点{0}", FormName));
xmlNode = xmlNode.SelectSingleNode(string.Format(@"Table[@Name='{0}']", TableName));
if (xmlNode == null)
throw new Exception(string.Format("XML中找不到窗体{0}的样式节点{1}", FormName));
tableFieldDescription = new SiaSun.LMS.Common.XmlFiles().GetDataTable(xmlNode.OuterXml);
return tableFieldDescription;
}
catch
{
try
{
return GetStyleDataTable(TableName);
}
catch (Exception ex)
{
throw new Exception(string.Format("读取窗体样式文件,节点{0}", TableName) + ex.Message, ex);
}
}
}
/// <summary>
/// 设置默认值
/// </summary>
public void SetDefaultValue(DataTable tableSource,string WindowName,string TableName)
{
using (DataTable tableFieldDescription = string.IsNullOrEmpty(WindowName) ? this.GetStyleDataTable(TableName) : this.GetFormStyleDataTable(WindowName, TableName))
{
foreach (DataColumn col in tableSource.Columns)
{
DataRow[] arDataRow = tableFieldDescription.Rows.Cast<DataRow>().ToArray();
if (arDataRow.Count(r => r["Column"].ToString() ==col.ColumnName) > 0)
{
DataRow row = arDataRow.First(r => r["Column"].ToString() == col.ColumnName);
if (!row.IsNull("DefaultValue") && !string.IsNullOrEmpty(row["DefaultValue"].ToString()))
{
col.DefaultValue = row["DefaultValue"];
}
}
}
}
}
/// <summary>
/// 获得ComboBox列相关的数据源
/// </summary>
public DataTable GetComboBoxDataTable(string DataBind)
{
if (DataBind.ToLower().Contains("select"))
return MainApp._I_BaseService.GetList(DataBind.ToLower());
else
return MainApp._I_SystemService.ITEM_LIST_GetDictionary(DataBind);
}
/// <summary>
/// 根据数据源,更改列的名称,返回新的数据源,用于打印时生成报表和导出
/// </summary>
public DataTable GetReportDataTable(DataTable tableSource,string WindowName,string TableName,ref DataTable tableHeader)
{
DataTable tableReport = tableSource.Copy();
using (DataTable tableFieldDescription = string.IsNullOrEmpty(WindowName) ? this.GetStyleDataTable(TableName) : this.GetFormStyleDataTable(WindowName, TableName))
{
//字典,存储ComboBox列的名称和数据源
Dictionary<string, DataTable> dicComboPair = new Dictionary<string, DataTable>();
DataRow[] arDataRowField = tableFieldDescription.Rows.Cast<DataRow>().ToArray();
for (int i = tableReport.Columns.Count - 1; i >= 0; i--)
{
//数据表显示的列
string strColumnName = tableReport.Columns[i].ColumnName;
//判断是否存在描述
if (arDataRowField.Count(r => r["Column"].ToString() == strColumnName) == 0)
{
tableReport.Columns.Remove(strColumnName);
}
else
{
DataRow rowField = arDataRowField.First(r => r["Column"].ToString() == strColumnName);
//判断显示信息是否空
if (rowField.IsNull("Header") || string.IsNullOrEmpty(rowField["Header"].ToString()))
{
tableReport.Columns.Remove(strColumnName);
}
else
{
//判断是否是Combox列,如果是则存储在字典中
if (rowField["ControlType"].ToString().ToLower() == "combobox" && !string.IsNullOrEmpty(rowField["DataBind"].ToString()))
{
//更改数据表的值类型
tableReport.Columns.Add(string.Format("{0}_1", rowField["Column"].ToString()), typeof(System.String));
//添加字典
dicComboPair.Add(rowField["Column"].ToString(), this.GetComboBoxDataTable(rowField["DataBind"].ToString()));
}
}
}
}
//判断是否存在ComboBox列
if (dicComboPair.Count > 0)
{
foreach (DataRow rowReport in tableReport.Rows)
{
foreach (KeyValuePair<string, DataTable> pair in dicComboPair)
{
if (!rowReport.IsNull(pair.Key))
{
if (pair.Value.Select(string.Format("VALUE='{0}'", rowReport[pair.Key].ToString())).Length > 0)
{
//复制ComboBox中显示的元素
rowReport[string.Format("{0}_1", pair.Key)] = pair.Value.Select(string.Format("VALUE='{0}'", rowReport[pair.Key].ToString()))[0]["NAME"];
}
}
}
}
//移除原有的列,并将复制的列名更改为原有的列名
foreach (KeyValuePair<string, DataTable> pair in dicComboPair)
{
tableReport.Columns.Remove(pair.Key);
tableReport.Columns[string.Format("{0}_1", pair.Key)].ColumnName = pair.Key;
}
}
//设置表头描述
if (tableHeader != null)
{
foreach (DataColumn col in tableReport.Columns)
{
if (tableFieldDescription.Select(string.Format("Column='{0}'", col.ColumnName)).Length > 0)
{
DataRow rowField = tableFieldDescription.Select(string.Format("Column='{0}'", col.ColumnName))[0];
tableHeader.Rows.Add(new object[] { rowField["Header"].ToString() });
}
}
}
}
return tableReport;
}
}
}