private void btnCompare_Click_Thin(object sender, EventArgs e) { DataTable tmpDt = new DataTable(); if (isInitialBomList == true) { // 第一次取得BomList tmpDt = MvDbDao.collectData_BomList(); cboBomType.DataSource = tmpDt; cboBomType.ValueMember = "MC001"; cboBomType.DisplayMember = "MB0012"; cboBomType.Text = ""; cboBomType.SelectedValue = ""; isInitialBomList = false; return; } if (BomView.Items.Count < 2) { MessageBox.Show("請選擇2個bom表"); return; } // 取得已選取的list List <string> selectedList = new List <string>(); foreach (var item in BomView.Items) { string row = (item as ListViewItem).Text; selectedList.Add(row); } // 判斷是否選取相同的Bom表 if (selectedList[0].Equals(selectedList[1]) == true) { MessageBox.Show("請不要選取相同的bom表比對"); return; } // show wait process SplashScreenManager.ShowDefaultWaitForm(); DataSet sourceDs = new DataSet(); MvBomCompareBo bo = new MvBomCompareBo(); sourceDs = bo.CollectSourceDsProcess_BomP09_Thin(selectedList.ToArray <string>()).Copy(); // filter data DataTable sourceDt1 = sourceDs.Tables[0].Copy(); DataTable sourceDt2 = sourceDs.Tables[1].Copy(); DataSet summaryDs = new DataSet(); DataSet tmpDs = new DataSet(); // show tree list node // 設定column DataTable filterDt1 = bo.filterDataByRdRule(sourceDt1, true); DataTable filterDt2 = bo.filterDataByRdRule(sourceDt2, true); DataTable dtIncludeNameSpace1; DataTable dtIncludeNameSpace2; DataTable summaryDt; dtIncludeNameSpace1 = bo.extendBomNameSpace(filterDt1, true); dtIncludeNameSpace2 = bo.extendBomNameSpace(filterDt2, true); summaryDs = bo.compareBomByRuleRd_v2(dtIncludeNameSpace1, dtIncludeNameSpace2, false); tmpDs = bo.compareBomByRuleRd_v2(dtIncludeNameSpace2, dtIncludeNameSpace1, true); // 顯示Detail Summary相關資訊 // 相同的資料不用再呈現差異的比對資訊 tmpDt = summaryDs.Tables["Same"]; tmpDt.Columns.Remove("CompareLV"); tmpDt.Columns.Remove("CompareA8"); tmpDt.Columns.Remove("CompareMD006"); tmpDt.Columns.Remove("ModuleLv1"); treeList3.DataSource = tmpDt.Copy(); summaryDt = summaryDs.Tables["Different"]; summaryDt.Merge(tmpDs.Tables["Different"]); treeList4.DataSource = summaryDt.Copy(); setCompareDetailColumnsCaption(ref treeList3, ref treeList4); // 顯示SummaryBom相關資訊 for RD tmpDt = new DataTable(); tmpDt = bo.generateSummaryTableByRd(summaryDt, true); treeList5.DataSource = tmpDt.Copy(); setSummaryDetailColumnsCaption(ref treeList5); // 整理SummaryBom For Pur tmpDt = bo.generateSummaryTableByPur(summaryDt); treeList6.DataSource = tmpDt.Copy(); setSummaryColumnsCaption(ref treeList6); // initial hash tables for (int i = 0; i < hashTreeListBackColor.Length; i++) { hashTreeListBackColor[i] = new Hashtable(); } // 注意 ParentFieldName必需在 showTreeListByLevel之前 // 只要設定過, Level的功能會失效 treeList1.DataSource = dtIncludeNameSpace1.Clone(); treeList1.ParentFieldName = dtIncludeNameSpace1.TableName; hashTreeListBackColor[0].Clear(); showTreeListByLevel(treeList1, dtIncludeNameSpace1, ref hashTreeListBackColor[0], false); setColumnsCaption(ref treeList1); // 注意 ParentFieldName必需在 showTreeListByLevel之前 // 只要設定過, Level的功能會失效 treeList2.DataSource = dtIncludeNameSpace2.Clone(); treeList2.ParentFieldName = dtIncludeNameSpace2.TableName; hashTreeListBackColor[1].Clear(); showTreeListByLevel(treeList2, dtIncludeNameSpace2, ref hashTreeListBackColor[1], false); setColumnsCaption(ref treeList2); xtraTabControl1.TabPages[0].Text = string.Format("{0} vs {1}", filterDt1.TableName, filterDt2.TableName); xtraTabControl1.TabPages[1].Text = "CompareDetail"; xtraTabControl1.TabPages[2].Text = "SummaryDetail"; xtraTabControl1.TabPages[3].Text = "Summary"; // Sheet1,2 不開放編輯功能, treeList 1,2,3,4 // Sheet3,4 開放編輯功能, 這些資料都只能是read only treeList1.OptionsBehavior.ReadOnly = true; treeList2.OptionsBehavior.ReadOnly = true; treeList3.OptionsBehavior.ReadOnly = true; treeList4.OptionsBehavior.ReadOnly = true; treeList5.OptionsBehavior.ReadOnly = true; treeList6.OptionsBehavior.ReadOnly = true; treeList1.OptionsBehavior.Editable = false; treeList2.OptionsBehavior.Editable = false; treeList3.OptionsBehavior.Editable = false; treeList4.OptionsBehavior.Editable = false; treeList5.OptionsBehavior.Editable = false; treeList6.OptionsBehavior.Editable = false; treeList1.Columns["NameSpace"].Visible = false; treeList1.Columns["NameSpaceNoVer"].Visible = false; treeList1.Columns["MD013"].Visible = false; treeList1.Columns["AmountSpace"].Visible = false; treeList1.Columns["RowId"].Visible = false; treeList2.Columns["NameSpace"].Visible = false; treeList2.Columns["NameSpaceNoVer"].Visible = false; treeList2.Columns["MD013"].Visible = false; treeList2.Columns["AmountSpace"].Visible = false; treeList2.Columns["RowId"].Visible = false; //Close Wait Form SplashScreenManager.CloseForm(false); }