00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 using System;
00013 using System.Collections.Generic;
00014 using System.Windows.Forms;
00015 using Mcs.Epm.MicrosoftProject.mpFx.LookupTablesWebService;
00016 using Microsoft.Office.Project.Server.Library;
00017
00018 namespace Mcs.Epm.MicrosoftProject.mpFx.WinForms
00019 {
00020
00021
00022
00023 public partial class SelectLookupTableValueForm : Form
00024 {
00025 #region Instance Data
00026
00027 private readonly ProjectServer _ProjectServer;
00028 private readonly string _LookupTableGUID = string.Empty;
00029 private LookupTableMultiLangDataSet.LookupTableValuesDataTable _LookupValues;
00030
00031 #endregion
00032
00033 #region Private Properties
00034
00035 private List<string> SelectedItems { get; set; }
00036
00037 #endregion
00038
00039 #region Public Properties
00040
00041 public Dictionary<string, string> SelectedValues { get; private set; }
00042
00043 public bool AllowMultiSelect { get; private set; }
00044
00045 #endregion
00046
00047 #region Constructors
00048
00049 public SelectLookupTableValueForm(string lookupTableGUID,
00050 ProjectServer projectServer,
00051 bool allowMultiSelect,
00052 List<string> selectedItems)
00053 {
00054 InitializeComponent();
00055
00056 _LookupTableGUID = lookupTableGUID;
00057
00058 _ProjectServer = projectServer;
00059
00060 AllowMultiSelect = allowMultiSelect;
00061
00062 SelectedItems = selectedItems;
00063
00064 SelectedValues = new Dictionary<string, string>();
00065
00066 AllowMultiSelect = false;
00067 }
00068
00069 #endregion
00070
00071 #region Private Methods
00072
00073 private void BuildLookupTableTree()
00074 {
00075 Filter filter = new Filter();
00076
00077 using (LookupTableMultiLangDataSet lookupTable = new LookupTableMultiLangDataSet())
00078 {
00079 filter.FilterTableName = lookupTable.LookupTableStructures.TableName;
00080
00081 filter.Fields.Add(new Filter.Field(lookupTable.LookupTableStructures.LT_UIDColumn.ColumnName));
00082 filter.Fields.Add(new Filter.Field(lookupTable.LookupTableStructures.LT_PARENT_STRUCT_UIDColumn.ColumnName));
00083 filter.Fields.Add(new Filter.Field(lookupTable.LookupTableStructures.LT_STRUCT_UIDColumn.ColumnName));
00084
00085 Filter.FieldOperator equalUID = new Filter.FieldOperator(Filter.FieldOperationType.Equal, lookupTable.LookupTableStructures.LT_UIDColumn.ColumnName, _LookupTableGUID);
00086
00087 filter.Criteria = equalUID;
00088
00089 LookupTableMultiLangDataSet lookupTables = _ProjectServer.LookupTables.MultiLangGetLookupTables(filter.GetXml(), false);
00090
00091 valuesTree.Nodes.Clear();
00092 TreeNode root = valuesTree.Nodes.Add("Values");
00093
00094 foreach (LookupTableMultiLangDataSet.LookupTableStructuresRow structure in lookupTables.LookupTableStructures)
00095 {
00096 if (structure.IsLT_PARENT_STRUCT_UIDNull())
00097 {
00098 string value = GetLookupValueString(structure.LT_STRUCT_UID);
00099
00100 TreeNode newNode = root.Nodes.Add(value);
00101
00102 newNode.Tag = structure.LT_STRUCT_UID;
00103
00104 Traverse(newNode, lookupTables.LookupTableStructures, structure.LT_STRUCT_UID.ToString());
00105 }
00106 }
00107
00108 root.ExpandAll();
00109 }
00110 }
00111
00112 private void LoadLookupTableValues()
00113 {
00114 Filter filter = new Filter();
00115
00116 using (LookupTableMultiLangDataSet lookupTable = new LookupTableMultiLangDataSet())
00117 {
00118 filter.FilterTableName = lookupTable.LookupTableValues.TableName;
00119 filter.Fields.Add(new Filter.Field(lookupTable.LookupTableValues.LT_UIDColumn.ColumnName));
00120 filter.Fields.Add(new Filter.Field(lookupTable.LookupTableValues.LT_STRUCT_UIDColumn.ColumnName));
00121 filter.Fields.Add(new Filter.Field(lookupTable.LookupTableValues.LT_VALUE_TEXTColumn.ColumnName));
00122
00123 Filter.FieldOperator equalUID = new Filter.FieldOperator(Filter.FieldOperationType.Equal,
00124 lookupTable.LookupTableValues.LT_UIDColumn.ColumnName, _LookupTableGUID);
00125
00126 filter.Criteria = equalUID;
00127 _LookupValues = _ProjectServer.LookupTables.MultiLangGetLookupTableValues(filter.GetXml(), false);
00128 }
00129 }
00130
00131 private string GetLookupValueString(Guid GUID)
00132 {
00133 return _LookupValues.FindByLT_STRUCT_UIDLCID(GUID, 1033).LT_VALUE_TEXT;
00134 }
00135
00136 private void Traverse(TreeNode node, LookupTableMultiLangDataSet.LookupTableStructuresDataTable structures, string GUID)
00137 {
00138 foreach (LookupTableMultiLangDataSet.LookupTableStructuresRow structure in structures)
00139 {
00140 if (!structure.IsLT_PARENT_STRUCT_UIDNull() && structure.LT_PARENT_STRUCT_UID.ToString() == GUID)
00141 {
00142 string value = GetLookupValueString(structure.LT_STRUCT_UID);
00143
00144 TreeNode newNode = node.Nodes.Add(value);
00145
00146 newNode.Tag = structure.LT_STRUCT_UID;
00147
00148 Traverse(newNode, structures, structure.LT_STRUCT_UID.ToString());
00149 }
00150 }
00151 }
00152
00153 private void SelectLookupTableValueForm_Load(object sender, EventArgs e)
00154 {
00155 Cursor = Cursors.WaitCursor;
00156
00157 LoadLookupTableValues();
00158
00159 BuildLookupTableTree();
00160
00161 Cursor = Cursors.Default;
00162
00163 CenterToScreen();
00164 }
00165
00166 private void RecursiveAddSelectedItems(TreeNode parent)
00167 {
00168 foreach (TreeNode node in parent.Nodes)
00169 {
00170 if (node.Checked)
00171 {
00172 SelectedValues.Add(node.Tag.ToString(), node.Text);
00173 }
00174
00175 if (node.Nodes.Count > 0)
00176 {
00177 RecursiveAddSelectedItems(node);
00178 }
00179 }
00180 }
00181
00182 private static void RecursiveUncheck(TreeNode currentNode, TreeNode leaveNode)
00183 {
00184 foreach (TreeNode node in currentNode.Nodes)
00185 {
00186 if (node != leaveNode)
00187 {
00188 node.Checked = false;
00189 }
00190
00191 if (node.Nodes.Count > 0)
00192 {
00193 RecursiveUncheck(node, leaveNode);
00194 }
00195 }
00196 }
00197
00198 #endregion
00199
00200 #region Event Handlers
00201
00202 private void cancelButton_Click(object sender, EventArgs e)
00203 {
00204 Close();
00205 }
00206
00207 private void valuesTree_AfterCheck(object sender, TreeViewEventArgs e)
00208 {
00209 if (AllowMultiSelect == false)
00210 {
00211 valuesTree.AfterCheck -= valuesTree_AfterCheck;
00212 RecursiveUncheck(valuesTree.Nodes[0], e.Node);
00213 valuesTree.AfterCheck += valuesTree_AfterCheck;
00214 }
00215 }
00216
00217 private void okButton_Click(object sender, EventArgs e)
00218 {
00219 RecursiveAddSelectedItems(valuesTree.Nodes[0]);
00220 }
00221
00222 #endregion
00223
00224 }
00225 }