| using System; | 
| using System.Collections.Generic; | 
| using System.Text; | 
| using System.Windows.Forms; | 
| using Pub_Class; | 
|   | 
| namespace APSM | 
| { | 
|     public class ClsGridSum | 
|     { | 
|         public  AxVSFlex7.AxVSFlexGrid ogrdMain=new AxVSFlex7.AxVSFlexGrid(); | 
|         public  AxVSFlex7.AxVSFlexGrid oGridsum=new AxVSFlex7.AxVSFlexGrid(); | 
|         private string sTotalCols; | 
|         private string sAllowEdit; | 
|         public Cell OldCell = new Cell(); | 
|         public bool Changelock; | 
|         public bool Gdtlock; | 
|         public bool EditStatus; | 
|         public bool DisplayNoCol; | 
|         public Int32 NoCol; | 
|         public string KeyItem; | 
|         public bool NotAllowADDRow; | 
|         public bool NotAllowDELRow; | 
|         public char chr = Convert.ToChar(","); | 
|          | 
|         //获得 合计列 | 
|         public void  BuildTotalCols(string[] Cols) | 
|         { | 
|             Int64 i; | 
|             string tStr; | 
|             tStr = ""; | 
|             for (i = 0; i < Cols.Length; i++) | 
|             { | 
|                 if (i == 0) | 
|                 { | 
|                     tStr = Cols[i]; | 
|                 } | 
|                 else | 
|                 { | 
|                     tStr = tStr + "," + Cols[i]; | 
|                 } | 
|             } | 
|             sTotalCols= tStr; | 
|         } | 
|         //获得 可编辑列 | 
|         public void  BuildAllowEditCols(string[] Cols) | 
|         { | 
|             Int64 i; | 
|             string tStr; | 
|             tStr = ""; | 
|             for (i = 0; i < Cols.Length; i++) | 
|             { | 
|                 if (i == 0) | 
|                 { | 
|                     tStr = Cols[i]; | 
|                 } | 
|                 else | 
|                 { | 
|                     tStr = tStr + "," + Cols[i]; | 
|                 } | 
|             } | 
|             sAllowEdit= tStr; | 
|         } | 
|         //设置网格属性 | 
|         public void SetGridsum( ) | 
|         { | 
|             Int32 i; | 
|             oGridsum.Enabled = false; | 
|             oGridsum.Appearance = VSFlex7.AppearanceSettings.flexFlat; | 
|             oGridsum.BorderStyle = VSFlex7.BorderStyleSettings.flexBorderNone; | 
|             oGridsum.ScrollBars = VSFlex7.ScrollBarsSettings.flexScrollBarNone; | 
|             oGridsum.Width  = ogrdMain.Width; | 
|             oGridsum.FixedRows = 0; | 
|             oGridsum.Rows = 1; | 
|             oGridsum.Cols = ogrdMain.Cols; | 
|             oGridsum.LeftCol = ogrdMain.LeftCol; | 
|             oGridsum.set_RowHeight(0, 300); | 
|             oGridsum.Height = 30; | 
|             oGridsum.set_Cell(VSFlex7.CellPropertySettings.flexcpText, 0, 0, 0, oGridsum.Cols - 1, ""); | 
|             oGridsum.set_TextMatrix(0, 0, "合计"); | 
|             oGridsum.set_ColAlignment(-1, VSFlex7.AlignmentSettings.flexAlignCenterCenter); | 
|             for (i = 0; i < ogrdMain.Cols; i++) | 
|             { | 
|                 oGridsum.set_ColHidden(i,ogrdMain.get_ColHidden(i)); | 
|                 oGridsum.set_ColWidth(i, ogrdMain.get_ColWidth(i)); | 
|                 oGridsum.set_ColAlignment(i, ogrdMain.get_ColAlignment(i)); | 
|                 oGridsum.set_ColFormat(i, ogrdMain.get_ColFormat(i)); | 
|             } | 
|             oGridsum.set_ColAlignment(0,VSFlex7.AlignmentSettings.flexAlignCenterTop); | 
|             for (i = oGridsum.FixedRows; i < oGridsum.Rows - 1; i++) | 
|             { | 
|                 oGridsum.set_RowHeight(i, oGridsum.Height / oGridsum.Rows); | 
|             } | 
|             oGridsum.Width = ogrdMain.Width ; | 
|             RefreshNoCol(); | 
|         } | 
|         //合计函数 | 
|         public void Total() | 
|         { | 
|             string[] Cols; | 
|             Int32 i, j, ColsTotal; | 
|             if(ClsPub.isStrNull( sTotalCols).ToString().Trim()==""  ) | 
|                 return; | 
|             Cols = sTotalCols.Split(chr); | 
|             ColsTotal = Cols.Length; | 
|             for (j = 0; j < ColsTotal; j++) | 
|             { | 
|                 oGridsum.set_TextMatrix(0, ClsPub.isInt(Cols[j]), ""); | 
|             } | 
|             try | 
|             { | 
|                 double d = 0; | 
|                 for (j = 0; j < ColsTotal; j++) | 
|                 { | 
|                     d = 0; | 
|                     for (i = ogrdMain.FixedRows; i < ogrdMain.Rows; i++) | 
|                     { | 
|                         //if (ogrdMain.get_TextMatrix(i, 0) == "*") | 
|                         //{ | 
|                         if (ogrdMain.get_RowHidden(i) == false) | 
|                         { | 
|                             d = d + ClsPub.isDoule(ogrdMain.get_TextMatrix(i, ClsPub.isInt(Cols[j]))); | 
|                             //oGridsum.set_TextMatrix(0, ClsPub.isInt(Cols[j]), Convert.ToString(oGridsum.get_ValueMatrix(0, ClsPub.isInt(Cols[j])) + ogrdMain.get_ValueMatrix(i, ClsPub.isInt(Cols[j]))) ); | 
|                         } | 
|                     } | 
|                     //} | 
|                     oGridsum.set_TextMatrix(0, ClsPub.isInt(Cols[j]), d.ToString()); | 
|                 } | 
|             } | 
|             catch (Exception  e) | 
|             { | 
|                 string s = ""; | 
|                 s= e.Message; | 
|             } | 
|         } | 
|         // | 
|         public void LeaveCell() | 
|         { | 
|             if (Changelock) | 
|                 return; | 
|             OldCell.Col = ogrdMain.Col; | 
|             OldCell.Row = ogrdMain.Row; | 
|         } | 
|         //列是否允许编辑 | 
|         public bool FindAllowEditCol(Int64 Col) | 
|         { | 
|             Int64 i; | 
|             string[] s; | 
|             if (sAllowEdit.Trim() == "") | 
|                 return false; | 
|             s=sAllowEdit.Split(chr ); | 
|             for(i=0;i<=s.Length-1;i++) | 
|             { | 
|                 if(Col==ClsPub.isInt(s[i])) | 
|                     return true; | 
|             } | 
|             return false; | 
|         } | 
|         //增行 | 
|         public void Sub_AddRow() | 
|         { | 
|             //if (EditStatus == true) | 
|             //{ | 
|             //    return; | 
|             //} | 
|             if (ogrdMain.Row < ogrdMain.FixedRows || ogrdMain.Row > ogrdMain.Rows - 1) | 
|             { | 
|                 return; | 
|             } | 
|             if (GetNullRows() < 1) | 
|             { | 
|                 ogrdMain.AddItem("", ogrdMain.Row); | 
|                 if (ogrdMain.Row != ogrdMain.Rows - 1) | 
|                 { | 
|                     if (ogrdMain.get_TextMatrix(ogrdMain.Row + 1, 0) == "*") | 
|                     { | 
|                         ogrdMain.set_TextMatrix(ogrdMain.Row, 0, "*"); | 
|                     } | 
|                     else | 
|                     { | 
|                         ogrdMain.RemoveItem(ogrdMain.Rows - 1); | 
|                     } | 
|                     DisplayCurRow(); | 
|                     DisplayCurCol(); | 
|                     RefreshNoCol(); | 
|                 } | 
|             } | 
|         } | 
|         //删除行 | 
|         public void Sub_DelRow() | 
|         { | 
|             int Scqwghz; //原选中行 | 
|             int Scqwglz; //原选中列 | 
|        | 
|             Scqwghz = ogrdMain.Row; | 
|             Scqwglz = ogrdMain.Col; | 
|             //if (ClsPub.isStrNull(ogrdMain.get_TextMatrix(Scqwghz, 0))!= "") | 
|             //{ | 
|             //    if (ogrdMain.get_TextMatrix(ogrdMain.Row, 0) == "*") | 
|             //    { | 
|                      | 
|                     DisplayCurRow(); | 
|                     Changelock = true; | 
|                     ogrdMain.Select(ogrdMain.Row, 0); | 
|                     Changelock = false; | 
|                     ogrdMain.set_Cell(VSFlex7.CellPropertySettings.flexcpBackColor, ogrdMain.Row, 0, ogrdMain.Row, ogrdMain.Cols - 1, 123456); | 
|                     if (MessageBox.Show( "确定要删除当前记录?", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.Cancel) | 
|                     { | 
|                         ogrdMain.set_Cell(VSFlex7.CellPropertySettings.flexcpBackColor, ogrdMain.Row, 0, ogrdMain.Row, ogrdMain.Cols - 1, 000000); | 
|                         Changelock = true; | 
|                         ogrdMain.Select(Scqwghz, Scqwglz); | 
|                         Changelock = false; | 
|                         return; | 
|                     } | 
|                     ogrdMain.RemoveItem(ogrdMain.Row); | 
|                     if (ogrdMain.Rows < 50 + ogrdMain.FixedRows + 1) | 
|                     { | 
|                         ogrdMain.AddItem(""); | 
|                     } | 
|                     Changelock = true; | 
|                     if (ClsPub.isStrNull(ogrdMain.get_TextMatrix(ogrdMain.Row, 0)) != "*" && ClsPub.isStrNull(ogrdMain.get_TextMatrix(ogrdMain.Row - 1, 0)) == "*") | 
|                     { | 
|                         ogrdMain.Select(ogrdMain.Row-1, Scqwglz); | 
|                     } | 
|                     else | 
|                     { | 
|                         ogrdMain.Select(ogrdMain.Row, Scqwglz); | 
|                     } | 
|                     Changelock = false; | 
|                     RefreshNoCol(); | 
|             //    } | 
|             //} | 
|             EditStatus = false; | 
|         } | 
|         //获得 NULL 行 | 
|         public Int64 GetNullRows()   | 
|         { | 
|             Int32 r, c; | 
|             Int32 lngRows; | 
|             lngRows = 0; | 
|             for (r = ogrdMain.FixedRows; r < ogrdMain.Rows; r++) | 
|             { | 
|                 if (ogrdMain.get_TextMatrix(r, 0) == "*") | 
|                 { | 
|                     if (DisplayNoCol== true) | 
|                     { | 
|                         for (c = NoCol + 1; c < ogrdMain.Cols; c++) | 
|                         { | 
|                             if (ogrdMain.get_TextMatrix(r, c) != "" || ogrdMain.get_TextMatrix(r, c) != null) | 
|                             { | 
|                                 break; | 
|                             } | 
|                         } | 
|                     } | 
|                     else | 
|                     { | 
|                         for (c =1; c < ogrdMain.Cols; c++) | 
|                         { | 
|                             if (ogrdMain.get_TextMatrix(r, c) != "" || ogrdMain.get_TextMatrix(r, c) != null) | 
|                             { | 
|                                 break; | 
|                             } | 
|                         } | 
|                     } | 
|                     if (c == ogrdMain.Cols) | 
|                         lngRows = lngRows + 1; | 
|                 } | 
|             } | 
|             return  lngRows; | 
|         } | 
|         //显示当前行 | 
|         public void DisplayCurRow() | 
|         { | 
|             Int64 Toprowte; | 
|             if (CountNullRows() < 50) | 
|                 ogrdMain.AddItem(""); | 
|             Toprowte = 0; | 
|         } | 
|         //计算用户可用行 | 
|         public Int64 CountNullRows() | 
|         { | 
|             Int32 r; | 
|             Int32 lngRows; | 
|             lngRows = 0; | 
|             for (r = ogrdMain.FixedRows; r < ogrdMain.Rows; r++) | 
|             { | 
|                 if (ogrdMain.get_TextMatrix(r, 0) != "*") | 
|                     lngRows = lngRows + 1; | 
|             } | 
|             return lngRows; | 
|         } | 
|   | 
|         //显示当前列 | 
|         public void DisplayCurCol() | 
|         { | 
|             //Int64 Toprowte; | 
|             //Toprowte = 0; | 
|             //while (ogrdMain.CellTop+ogrdMain.get_RowHeight(ogrdMain.Row)+ogrdMain.RowHeightMin>ogrdMain.Size.Height   &&  ogrdMain.TopRow!=Toprowte) | 
|             //{ | 
|             //    Toprowte=ogrdMain.TopRow; | 
|             //    ogrdMain.TopRow=ogrdMain.TopRow+1; | 
|             //} | 
|             //Toprowte = 0; | 
|             //while (ogrdMain.CellTop < ogrdMain.FixedRows * ogrdMain.get_RowHeight(0) && ogrdMain.TopRow != Toprowte) | 
|             //{ | 
|                  | 
|             //    Toprowte = ogrdMain.TopRow; | 
|             //    if (ogrdMain.TopRow > 1) | 
|             //    { | 
|             //        ogrdMain.TopRow = ogrdMain.TopRow -1; | 
|             //    } | 
|             //} | 
|         } | 
|         public void CheckRowData() | 
|         { | 
|             int r; | 
|             if (ogrdMain.Row >= ogrdMain.FixedRows) | 
|             { | 
|                 if (ClsPub.isStrNull(ogrdMain.get_TextMatrix(ogrdMain.Row, 0).ToString()) != "*") | 
|                 { | 
|                     for ( r = ogrdMain.FixedRows; r < ogrdMain.Rows; r++) | 
|                     { | 
|                         if (ClsPub.isStrNull(ogrdMain.get_TextMatrix(r, 0).ToString()) != "*") | 
|                         { | 
|                             if (NotAllowADDRow) | 
|                             { | 
|                                 Changelock = true; | 
|                                 ogrdMain.Select(r - 1, ogrdMain.Col); | 
|                                 Changelock = false; | 
|                                 return; | 
|                             } | 
|                             else | 
|                             { | 
|                                 break; | 
|                             } | 
|                         } | 
|                     } | 
|                     // | 
|                     if (r <= ogrdMain.Rows - 1) | 
|                     { | 
|                         Changelock = true; | 
|                         ogrdMain.Select(r , ogrdMain.Col); | 
|                         Changelock = false; | 
|                     } | 
|                     else | 
|                     { | 
|                         Changelock = true; | 
|                         ogrdMain.Select(ogrdMain.Rows - 1, ogrdMain.Col); | 
|                         Changelock = false; | 
|                     } | 
|                 } | 
|                 DisplayCurRow(); | 
|             } | 
|         } | 
|         //刷新行号 | 
|         public void RefreshNoCol() | 
|         { | 
|             int  i, m; | 
|             //if (DisplayCurCol==false ) | 
|             //{ | 
|             //    return; | 
|             //} | 
|             i = 0; | 
|             m = 0; | 
|             for (i = ogrdMain.FixedRows; i < ogrdMain.Rows; i++) | 
|             { | 
|                 m = m + 1; | 
|                 ogrdMain.set_TextMatrix(i, NoCol, m.ToString().Trim()); | 
|             } | 
|             ogrdMain.set_ColAlignment(NoCol, VSFlex7.AlignmentSettings.flexAlignCenterCenter); | 
|         } | 
|         // | 
|     } | 
| } |