using Core.StlMes.Client.Judge.Commons; using CoreFS.CA06; using Infragistics.Win.UltraWinGrid; using System; using System.Collections.Generic; using System.Data; using System.Drawing; using System.Linq; namespace Core.StlMes.Client.Judge.Forms { public partial class LotNoGroupInfoQueryFrm : FrmBase { private Dal _d; public LotNoGroupInfoQueryFrm(string lotNo, OpeBase ob) { InitializeComponent(); _d = new Dal(ob); Query(lotNo); } protected override void OnLoad(EventArgs e) { base.OnLoad(e); //ultraGrid1.DisplayLayout.UseFixedHeaders = true; //ultraGrid1.DisplayLayout.Bands[0].Columns["lotNoGroup"].Header.Fixed = true; //ultraGrid1.DisplayLayout.Bands[0].Columns["judgeStoveNo"].Header.Fixed = true; //ultraGrid1.DisplayLayout.Override.FixedHeaderAppearance.BackColor = Color.LightYellow; //ultraGrid1.DisplayLayout.Override.FixedHeaderAppearance.ForeColor = Color.Blue; } private void Query(string lotNo) { DataTable dt = _d.GetTableByXmlId("JdgPlnZyRclM.queryLotNoGroupInfo", lotNo); //处理试样组 var groupPhy = dt.AsEnumerable().GroupBy(a => new { phyNameMin = a["phyNameMax"].ToString(), craftSource = a["craftSource"].ToString() }) .Select(a => new { phyNameMin = a.Key.phyNameMin, craftSource = a.Key.craftSource }).OrderByDescending(a => a.craftSource).ToArray(); bool flag0 = false; bool flag1 = false; foreach (var groupRow in groupPhy) { //创建 DataColumn dc = new DataColumn(); dc.ColumnName = groupRow.phyNameMin + groupRow.craftSource; if (groupRow.craftSource == "1") { dc.Caption = groupRow.phyNameMin + "(首日检)"; } else { dc.Caption = groupRow.phyNameMin; } dataTable1.Columns.Add(dc); //if (groupRow.craftSource == "1") //{ // flag1 = true; // UltraGridColumn gridDc = new UltraGridColumn(dc.ColumnName); // gridDc.Header.Caption = dc.Caption; // gridDc.RowLayoutColumnInfo.ParentGroupIndex = flag1Index; // gridDc.RowLayoutColumnInfo.ParentGroupKey = "0"; // gridDc.RowLayoutColumnInfo.OriginX = flag1Index; // gridDc.RowLayoutColumnInfo.OriginY = 0; // gridDc.RowLayoutColumnInfo.SpanX = 1; // gridDc.RowLayoutColumnInfo.SpanY = 1; // ultraGrid1.DisplayLayout.Bands[0].Columns.Add(gridDc); // flag1Index++; //} //else if (groupRow.craftSource == "0") //{ // flag0 = true; // UltraGridColumn gridDc = new UltraGridColumn(dc.ColumnName); // gridDc.Header.Caption = dc.Caption; // gridDc.RowLayoutColumnInfo.ParentGroupIndex = flag0Index; // gridDc.RowLayoutColumnInfo.ParentGroupKey = "1"; // gridDc.RowLayoutColumnInfo.OriginX = flag1Index; // gridDc.RowLayoutColumnInfo.OriginY = 0; // gridDc.RowLayoutColumnInfo.SpanX = 1; // gridDc.RowLayoutColumnInfo.SpanY = 1; // ultraGrid1.DisplayLayout.Bands[0].Columns.Add(gridDc); // flag0Index++; //} } //UltraGridGroup group1 = ultraGrid1.DisplayLayout.Bands[0].Groups.Add("1", "首日检"); //group1.RowLayoutGroupInfo.OriginX = 2; //group1.RowLayoutGroupInfo.OriginY = 0; //group1.RowLayoutGroupInfo.PreferredLabelSize = new System.Drawing.Size(0, 54); //group1.RowLayoutGroupInfo.SpanX = flag1Index; //group1.RowLayoutGroupInfo.SpanY = 1; //UltraGridGroup group0 = ultraGrid1.DisplayLayout.Bands[0].Groups.Add("0", "生产样"); //group0.RowLayoutGroupInfo.OriginX = 3; //group0.RowLayoutGroupInfo.OriginY = 0; //group0.RowLayoutGroupInfo.PreferredLabelSize = new System.Drawing.Size(0, 54); //group0.RowLayoutGroupInfo.SpanX = flag0Index; //group0.RowLayoutGroupInfo.SpanY = 1; //bool flag0 = false; //bool flag1 = false; //int flag0Index = 0; //int flag1Index = 0; //foreach (UltraGridColumn dc in ultraGrid1.DisplayLayout.Bands[0].Columns) //{ // if (dc.Key.EndsWith("1")) // { // flag1 = true; // dc.RowLayoutColumnInfo.ParentGroupIndex = flag1Index; // dc.RowLayoutColumnInfo.ParentGroupKey = "NewGroup0"; // dc.RowLayoutColumnInfo.OriginX = flag1Index; // dc.RowLayoutColumnInfo.OriginY = 0; // flag1Index++; // } // else if (dc.Key.EndsWith("0")) // { // flag0 = true; // dc.RowLayoutColumnInfo.ParentGroupIndex = flag0Index; // dc.RowLayoutColumnInfo.ParentGroupKey = "NewGroup1"; // dc.RowLayoutColumnInfo.OriginX = flag0Index; // dc.RowLayoutColumnInfo.OriginY = 0; // flag0Index++; // } //} if (!flag1) { //ultraGrid1.DisplayLayout.Bands[0].Groups.Remove(ultraGrid1.DisplayLayout.Bands[0].Groups["NewGroup0"]); } if (!flag0) { //ultraGrid1.DisplayLayout.Bands[0].Groups.Remove(ultraGrid1.DisplayLayout.Bands[0].Groups["NewGroup1"]); } //ultraGrid1.DisplayLayout.UseFixedHeaders = true; //foreach (UltraGridColumn col in ultraGrid1.DisplayLayout.Bands[0].Columns) //{ // if (col.Key == "lotNoGroup" || col.Key == "judgeStoveNo" || col.Key == "夹杂物1") // { // col.Header.Fixed = true; // } //} var groupData = dt.AsEnumerable().GroupBy(a => new { lotNo = a["lotNo"].ToString(), lotNoGroup = a["lotNoGroup"].ToString(), judgeStoveNo = a["judgeStoveNo"].ToString() }) .Select(a => new { lotNo = a.Key.lotNo, judgeStoveNo = a.Key.judgeStoveNo, lotNoGroup = a.Key.lotNoGroup }).OrderBy(a => a.lotNoGroup, new MyCompare()).ThenBy(a => a.judgeStoveNo).ToArray(); foreach (var groupRow in groupData) { DataRow dr = dataTable1.NewRow(); dr["lotNo"] = groupRow.lotNo; dr["lotNoGroup"] = groupRow.lotNoGroup; dr["judgeStoveNo"] = groupRow.judgeStoveNo; DataRow[] drPhys = dt.Select("lotNoGroup = '" + groupRow.lotNoGroup + "' and judgeStoveNo = '" + groupRow.judgeStoveNo + "'"); foreach (DataRow drPhy in drPhys) { dr[drPhy["phyNameMax"].ToString() + drPhy["craftSource"]] = "√"; } dataTable1.Rows.Add(dr); } foreach (UltraGridColumn col in ultraGrid1.DisplayLayout.Bands[0].Columns) { if (col.Key == "lotNo") { col.Width = 50; } if (col.Key == "lotNoGroup") { col.Width = 60; } else if (col.Key == "judgeStoveNo") { col.Width = 50; } else { col.Width = 130; } col.CellActivation = Activation.ActivateOnly; } } private void ultraGrid1_InitializeLayout(object sender, InitializeLayoutEventArgs e) { e.Layout.UseFixedHeaders = true; e.Layout.Bands[0].Columns["lotNo"].Header.Fixed = true; e.Layout.Bands[0].Columns["lotNoGroup"].Header.Fixed = true; e.Layout.Bands[0].Columns["judgeStoveNo"].Header.Fixed = true; e.Layout.Override.FixedCellAppearance.BackColor = Color.LightYellow; e.Layout.Override.FixedHeaderIndicator = FixedHeaderIndicator.None; } private class SortEntity { public string CraftSource { get; set; } public string JudgeStoveNo { get; set; } } private class MyCompare : IComparer { public int Compare(string x, string y) { if (x == y) { return 0; } else if (x == "A") { return -1; } else if (y == "A") { return 1; } else if (x == "" || y == "") { return 1; } else { int ix = int.Parse(x); int iy = int.Parse(y); return ix - iy; } } } } }