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
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;
|
|
}
|
|
|
|
}
|
|
}
|