using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Shapes; using System.Xml; using System.Data; using System.Reflection; using AvalonDock; namespace SiaSun.LMS.WPFClient.SYS { /// /// WINDOW_STYLE.xaml 的交互逻辑 /// public partial class WINDOW_STYLE : DocumentContent { XmlDocument xmlDoc = null; XmlNode nodeRoot = null; DataTable tableDescription = null; public WINDOW_STYLE() { InitializeComponent(); } /// /// 加载窗体 /// private void DocumentContent_Loaded(object sender, RoutedEventArgs e) { //加载XML文档 LoadXml(); //加载所有窗体样式 LoadFormStyles(); //初始化表结构 InitDataTable(); } //加载XML文档 private void LoadXml() { try { xmlDoc = new XmlDocument(); xmlDoc.Load(MainApp.File_FormStyles_Path); //判断文档是否加载 if (xmlDoc != null) { //判断根节点是否存在 nodeRoot = xmlDoc.SelectSingleNode("Styles"); } } catch (Exception ex) { MainApp._MessageDialog.ShowException(ex); } } //加载所有存在的样式 private void LoadFormStyles() { this.tvwWinStyles.Items.Clear(); foreach (XmlNode nodeXml in nodeRoot.ChildNodes) { try { if (nodeRoot.ChildNodes == null) continue; if (nodeXml.NodeType == XmlNodeType.Comment) continue; //添加列表 TreeViewItem itemWindow = new TreeViewItem(); itemWindow.Header = nodeXml.Attributes[0].InnerText; itemWindow.Tag = itemWindow.Header; this.tvwWinStyles.Items.Add(itemWindow); //判断表节点是否存在 foreach (XmlNode nodeTable in nodeXml.SelectNodes("Table")) { TreeViewItem item = new TreeViewItem(); item.Header = nodeTable.Attributes[0].Value; item.Tag = item.Header; itemWindow.Items.Add(item); } } catch (Exception ex) { MainApp._MessageDialog.ShowException(ex); } } } //初始化DataTable private DataTable InitDataTable() { //从实体类中加载属性信息 Assembly assemblyModel = Assembly.LoadFrom(MainApp._APP_PATH + "SiaSun.LMS.Model.dll"); if (assemblyModel == null) return null; Module moduleModel = assemblyModel.ManifestModule; Type typeModel = moduleModel.GetType(assemblyModel.GetName().Name + ".FIELD_DESCRIPTION"); if (typeModel == null) return null; //声明datatable并添加列 tableDescription = new DataTable("FIELD_DESCRIPTION"); SiaSun.LMS.Model.FIELD_DESCRIPTION mFIELD_DESCRIPTION = new SiaSun.LMS.Model.FIELD_DESCRIPTION(); foreach (PropertyInfo propertyInfo in typeModel.GetProperties()) { DataColumn column = new DataColumn(propertyInfo.Name, propertyInfo.PropertyType); column.DefaultValue = propertyInfo.GetValue(mFIELD_DESCRIPTION, null).ToString(); tableDescription.Columns.Add(column); } return tableDescription; } //删除样式定义 private void menuItemDelete_Click(object sender, RoutedEventArgs e) { if (this.tvwWinStyles.SelectedItem == null) return; if (MainApp._MessageDialog.ShowDialog("Delete",null) == Sid.Windows.Controls.TaskDialogResult.Ok) { TreeViewItem itemSelected = this.tvwWinStyles.SelectedItem as TreeViewItem; TreeViewItem itemParent = itemSelected.Parent as TreeViewItem; try { if (itemParent == null) { string strFormName = itemSelected.Header.ToString(); XmlNode nodeForm = nodeRoot.SelectSingleNode(string.Format("Form[@Name='{0}']", strFormName)); if (nodeForm != null) { nodeRoot.RemoveChild(nodeForm); } //移除节点 this.tvwWinStyles.Items.Remove(itemSelected); this.gridStyles.ItemsSource = null; } else { string strFormName = itemParent.Header.ToString(); string strTableName = itemSelected.Header.ToString(); XmlNode nodeForm = nodeRoot.SelectSingleNode(string.Format("Form[@Name='{0}']", strFormName)); if (nodeForm != null) { XmlNode nodeTable = nodeForm.SelectSingleNode(string.Format("Table[@Name='{0}']", strTableName)); if (nodeForm != null) { nodeForm.RemoveChild(nodeTable); //移除节点 itemParent.Items.Remove(itemSelected); this.gridStyles.ItemsSource = null; } } } //保存并重新加载 xmlDoc.Save(MainApp.File_FormStyles_Path); } catch (Exception ex) { MainApp._MessageDialog.ShowException(ex); } } } #region ------点击节点显示窗体样式配置 /// /// 选择节点显示该节点信息 /// private void tvwWinStyles_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs e) { //数据源设置空 this.gridStyles.ItemsSource = null; TreeViewItem itemSelected = this.tvwWinStyles.SelectedItem as TreeViewItem; if (itemSelected != null) { TreeViewItem itemParent = itemSelected.Parent as TreeViewItem; //判断是否最小节点 if (itemParent != null) { //显示配置项 grpBoxStyle.Header = string.Format("{0}-配置项", itemSelected.Header); //加载数据 LoadData(itemParent.Header.ToString(), itemSelected.Header.ToString()); } } } //点击节点,加载并显示数据 private void LoadData(string FormName, string TableName) { try { //获得窗体节点 XmlNode nodeFormTable = nodeRoot.SelectSingleNode(string.Format("Form[@Name='{0}']", FormName)); if (nodeFormTable != null) { //获得表单节点 XmlNode nodeTable = nodeFormTable.SelectSingleNode(string.Format("Table[@Name='{0}']", TableName)); if (nodeTable != null) { LoadDataTableFromXml(nodeTable, TableName); } } } catch (Exception ex) { MainApp._MessageDialog.ShowException(ex); } //绑定并显示数据 DataGrid_Bind(); } //从XML中加载数据 private void LoadDataTableFromXml(XmlNode nodeModel, string TableName) { //从XML中加载描述定义 tableDescription.Rows.Clear(); foreach (XmlNode nodeFile in nodeModel.SelectNodes("Field")) { try { DataRow rowField = tableDescription.NewRow(); rowField["Column"] = nodeFile.Attributes["Column"] == null ? string.Empty : nodeFile.Attributes["Column"].Value; rowField["DbType"] = nodeFile.Attributes["DbType"] == null ? string.Empty : nodeFile.Attributes["DbType"].Value; rowField["Header"] = nodeFile.Attributes["Header"] == null ? string.Empty : nodeFile.Attributes["Header"].Value; rowField["ControlType"] = nodeFile.Attributes["ControlType"] == null ? string.Empty : nodeFile.Attributes["ControlType"].Value; rowField["DefaultValue"] = nodeFile.Attributes["DefaultValue"] == null ? string.Empty : nodeFile.Attributes["DefaultValue"].Value; rowField["ReadOnly"] = (nodeFile.Attributes["ReadOnly"] == null || string.IsNullOrEmpty(nodeFile.Attributes["ReadOnly"].Value)) ? "0" : nodeFile.Attributes["ReadOnly"].Value; rowField["Validation"] = nodeFile.Attributes["Validation"] == null ? string.Empty : nodeFile.Attributes["Validation"].Value; rowField["DataBind"] = nodeFile.Attributes["DataBind"] == null ? string.Empty : nodeFile.Attributes["DataBind"].Value; rowField["Remark"] = nodeFile.Attributes["Remark"] == null ? string.Empty : nodeFile.Attributes["Remark"].Value; rowField["Order"] = nodeFile.Attributes["Order"] == null ? "1" : nodeFile.Attributes["Order"].Value; rowField["AllowQuery"] = (nodeFile.Attributes["AllowQuery"] == null || string.IsNullOrEmpty(nodeFile.Attributes["AllowQuery"].Value)) ? "0" : nodeFile.Attributes["AllowQuery"].Value; rowField["QueryOperation"] = nodeFile.Attributes["QueryOperation"] == null ? string.Empty : nodeFile.Attributes["QueryOperation"].Value; tableDescription.Rows.Add(rowField); } catch (Exception ex) { MainApp._MessageDialog.ShowException(ex); } } } //绑定数据并设置显示列信息 private void DataGrid_Bind() { //设置数据源 gridStyles.ItemsSource = tableDescription.DefaultView; //设置样式 gridStyles.U_TranslateDataGridViewStyle(null, "FIELD_DESCRIPTION", null, true); } #endregion /// /// 添加样式名称 /// private void btnWinName_Click(object sender, RoutedEventArgs e) { if (txtWinName.Text.TrimEnd().Length > 0) { string strFormName = txtWinName.Text; //检查该节点的名称是否存在 if (nodeRoot.SelectSingleNode(string.Format("Form[@Name='{0}']", strFormName)) != null) { MainApp._MessageDialog.ShowException(string.Format("名称为{0}的节点已经存在!", strFormName)); return; } try { MainWindow.mainWin.Cursor = Cursors.Wait; XmlNode nodeForm = xmlDoc.CreateNode(XmlNodeType.Element, "Form", xmlDoc.NamespaceURI); nodeRoot.AppendChild(nodeForm); nodeForm.Attributes.Append(xmlDoc.CreateAttribute("Name")).Value = strFormName; xmlDoc.Save(MainApp.File_FormStyles_Path); //添加新节点 TreeViewItem itemNew = new TreeViewItem(); itemNew.Header = strFormName; itemNew.Tag = strFormName; this.tvwWinStyles.Items.Add(itemNew); //选中节点 itemNew.IsSelected = true; //重新加载 LoadXml(); } catch (Exception ex) { MainApp._MessageDialog.ShowException(ex); } finally { MainWindow.mainWin.Cursor = Cursors.Arrow; } } } //刷性重新加载列表 private void btnRefresh_Click(object sender, RoutedEventArgs e) { MainWindow.mainWin.Cursor = Cursors.Wait; //加载XML文档 LoadXml(); //加载所有窗体样式 LoadFormStyles(); MainWindow.mainWin.Cursor = Cursors.Arrow; } /// /// 加载样式 /// private void btnLoadStyle_Click(object sender, RoutedEventArgs e) { TreeViewItem itemSelected = this.tvwWinStyles.SelectedItem as TreeViewItem; if (itemSelected != null) { if (txtStyleName.Text.TrimEnd().Length == 0 || this.tvwWinStyles.SelectedItem == null ) { return; } string strFormName = itemSelected.Header.ToString(); string strXmlNodeName = txtStyleName.Text; //FieldDescription中加载 SiaSun.LMS.Common.XmlFiles xmlFile = new SiaSun.LMS.Common.XmlFiles(MainApp.File_FieldDescription_Path); try { MainWindow.mainWin.Cursor = Cursors.Wait; //获得节点列表,查找属性匹配的节点 XmlNodeList listNode = xmlFile.SelectNodes("Tables/Table"); //判断是否存在节点 if (listNode.Cast().Count(n => n.Attributes[0].Value == strXmlNodeName) == 0) { MainApp._MessageDialog.ShowException(string.Format("请检查样式文件中{0}的节点是否存在!", strXmlNodeName)); return; } else { //获得节点 XmlNode nodeTable = listNode.Cast().Single(n => n.Attributes[0].Value == strXmlNodeName); //加载节点数据 LoadDataTableFromXml(nodeTable, strXmlNodeName); //显示数据信息 DataGrid_Bind(); } } catch (Exception ex) { MainApp._MessageDialog.ShowException(ex); } finally { MainWindow.mainWin.Cursor = Cursors.Arrow; } } } /// /// 工具栏按钮 /// private void ToolBar_Click(object sender, RoutedEventArgs e) { Button btnObj = e.Source as Button; if (btnObj != null) { try { MainWindow.mainWin.Cursor = Cursors.Wait; //添加按钮 if (btnObj == btnAdd) { if (tableDescription != null) { DataRow rowNew = tableDescription.NewRow(); tableDescription.Rows.Add(rowNew); } } //删除按钮 if (btnObj == btnDelete) { if (gridStyles.CurrentItem == null) return; DataGridRow rowGridCurrent = gridStyles.CurrentItem as DataGridRow; if (rowGridCurrent != null) { gridStyles.Items.Remove(rowGridCurrent); } //for (int i = gridModel.SelectedItems.Count - 1; i >= 0; i--) //{ // DataRowView viewRow = gridModel.SelectedItems[i] as DataRowView; // if (viewRow != null) // { // viewRow.Delete(); // } //} } //保存按钮 if (btnObj == btnSave) { this.Save(); } } catch (Exception ex) { MainApp._MessageDialog.ShowException(ex); } finally { MainWindow.mainWin.Cursor = Cursors.Arrow; } } } /// /// 保存操作 /// private void Save() { TreeViewItem itemSelect = this.tvwWinStyles.SelectedItem as TreeViewItem; if (itemSelect == null) return; if (MainApp._MessageDialog.ShowDialog(Enum.MessageConverter.Save) == Sid.Windows.Controls.TaskDialogResult.Cancel) return; //结束编辑 gridStyles.CommitEdit(DataGridEditingUnit.Row, true); string strFormName = string.Empty; string strTableName = string.Empty; //获得上级节点 TreeViewItem itemParent = itemSelect.Parent as TreeViewItem; //判断选择的节点 if (itemParent == null) { if (this.txtStyleName.Text.Length == 0) return; strFormName = itemSelect.Header.ToString(); strTableName = this.txtStyleName.Text; try { //判断表单的节点是否存在 if(this.tvwWinStyles.Items.Cast().Count(r=>r.Header.ToString() == strTableName) == 0) { //XML中添加节点 XmlNode nodeForm = nodeRoot.SelectSingleNode(string.Format("Form[@Name='{0}']", strFormName)); if (nodeForm != null) { //获得表名节点 XmlNode nodeTable = nodeForm.SelectSingleNode(string.Format("Table[@Name='{0}']", strTableName)); if (nodeTable == null) { //添加该表名的节点 XmlNode node = xmlDoc.CreateNode(XmlNodeType.Element, "Table", xmlDoc.NamespaceURI); node.Attributes.Append(xmlDoc.CreateAttribute("Name")).Value = strTableName; nodeForm.AppendChild(node); //保存节点 SaveStyles(node); //添加节点 TreeViewItem itemNew = new TreeViewItem(); itemNew.Header = strTableName; itemNew.Tag = strTableName; itemSelect.Items.Add(itemNew); //选中新节点 itemNew.IsSelected = true; } } } } catch (Exception ex) { MainApp._MessageDialog.ShowException(string.Format("节点{0}-{1}.}", strFormName, strTableName) + ex.Message); } } else { strFormName = (itemSelect.Parent as TreeViewItem).Header.ToString(); strTableName = itemSelect.Header.ToString(); try { //XML中添加节点 XmlNode nodeForm = nodeRoot.SelectSingleNode(string.Format("Form[@Name='{0}']", strFormName)); if (nodeForm != null) { //获得表名节点 XmlNode nodeTable = nodeForm.SelectSingleNode(string.Format("Table[@Name='{0}']", strTableName)); if (nodeTable != null) { //清除节点信息 nodeTable.RemoveAll(); //设置属性 nodeTable.Attributes.Append(xmlDoc.CreateAttribute("Name")).Value = strTableName; //保存节点 SaveStyles(nodeTable); } } } catch (Exception ex) { MainApp._MessageDialog.ShowException(string.Format("节点{0}-{1}.}", strFormName, strTableName) + ex.Message); } } //重新加载 this.LoadXml(); } /// /// 保存样式 /// private void SaveStyles(XmlNode nodeTable) { foreach (DataRow rowField in tableDescription.Rows) { XmlNode nodeField = xmlDoc.CreateNode(XmlNodeType.Element, "Field", xmlDoc.NamespaceURI); nodeTable.AppendChild(nodeField); nodeField.Attributes.Append(xmlDoc.CreateAttribute("Column")).Value = rowField["Column"].ToString(); nodeField.Attributes.Append(xmlDoc.CreateAttribute("DbType")).Value = rowField["DbType"].ToString(); nodeField.Attributes.Append(xmlDoc.CreateAttribute("Header")).Value = rowField["Header"].ToString(); nodeField.Attributes.Append(xmlDoc.CreateAttribute("ControlType")).Value = rowField["ControlType"].ToString(); nodeField.Attributes.Append(xmlDoc.CreateAttribute("DefaultValue")).Value = rowField["DefaultValue"].ToString(); nodeField.Attributes.Append(xmlDoc.CreateAttribute("ReadOnly")).Value = string.IsNullOrEmpty(rowField["ReadOnly"].ToString()) ? "0" : rowField["ReadOnly"].ToString(); nodeField.Attributes.Append(xmlDoc.CreateAttribute("Validation")).Value = rowField["Validation"].ToString(); nodeField.Attributes.Append(xmlDoc.CreateAttribute("DataBind")).Value = rowField["DataBind"].ToString(); nodeField.Attributes.Append(xmlDoc.CreateAttribute("Remark")).Value = rowField["Remark"].ToString(); nodeField.Attributes.Append(xmlDoc.CreateAttribute("Order")).Value = rowField["Order"].ToString(); nodeField.Attributes.Append(xmlDoc.CreateAttribute("AllowQuery")).Value = string.IsNullOrEmpty(rowField["AllowQuery"].ToString()) ? "0" : rowField["AllowQuery"].ToString(); nodeField.Attributes.Append(xmlDoc.CreateAttribute("QueryOperation")).Value = rowField["QueryOperation"].ToString(); } xmlDoc.Save(MainApp.File_FormStyles_Path); } } }