ALXGrid Control Library

.

GridDlgApp sample

The ALXGrid Control is intended for display and change of the data which may be
submitted as the table. It is realized as library on basis of MFC classes which are
statically connected to the application. The library includes classes: CALXGridView for
support of technology document – view, and CALXGridCtrl for use in dialogue windows.
And also classes – control of cells. Since version 1.1 the library includes class
CALXSplitterWnd for support of dynamic splitters.

The sample shows an opportunity of use of controls of cells, and also
changes of the data in cells. Class CGridView is determined from parent class CALXGridView
<gridview.htm>. In his constructor are added column (function AddCo ()) and define
type control (function DefineColCtrl ()). Cells of one of column are defined as a cell
containing the image (function DefineImage()).

CGridCtrl::CGridCtrl()
{
 CString strTmp;

 strTmp.LoadString(ID_COL_DEBIT);
 DefineColCtrl(AddCol(115, strTmp,
                      ACFF_RIGHT, AHFF_CENTER,
                      0, 0, ID_COL_DEBIT),
               GA_EDITCTRL, WS_CHILD | ES_RIGHT);

 strTmp.LoadString(ID_COL_CREDIT);
 DefineColCtrl(AddCol(115, strTmp,
                      ACFF_RIGHT, AHFF_CENTER,
                      0, 0, ID_COL_CREDIT),
               GA_EDITCTRL, WS_CHILD | ES_RIGHT);

 strTmp.LoadString(ID_COL_SALDO);
 DefineColCtrl(AddCol(120, strTmp,
                      ACFF_RIGHT, AHFF_CENTER,
                      0, 0, ID_COL_SALDO),
               GA_CELLCTRL);

 //...

 SetGridRowCount(m_RowInfo.GetSize()+1);
}

Also virtual function GetCellData() which returns the data of cells
necessary for display is redefined.

CELL_DATA CGridCtrl::GetCellData(int nCol, int nRow)
{
 CELL_DATA CellData = CALXGrid::GetCellData(nCol,nRow);

 if(nRow == GetGridRowCount()-1)
 {
  switch(GetCellCtrlID(nCol,nRow))
  {
   case ID_COL_DEBIT:
   {
    COleCurrency SumDeb(0,0);
    for(int i = 0; m_RowInfo.GetSize() > i; i++)
    SumDeb += m_RowInfo[i].m_Dedet;
    CellData.m_strText = SumDeb.Format();
    break;
   }
   case ID_COL_CREDIT:
   {
    COleCurrency SumCrd(0,0);
    for(int i = 0; m_RowInfo.GetSize() > i; i++)
     SumCrd += m_RowInfo[i].m_Credit;
    CellData.m_strText = SumCrd.Format();
    break;
   }
   case ID_COL_SALDO:
   {
    COleCurrency SumSld(0,0);
    for(int i = 0; m_RowInfo.GetSize() > i; i++)
    SumSld += m_RowInfo[i].m_Dedet - m_RowInfo[i].m_Credit;
    CellData.m_strText = SumSld.Format();
    break;
   }
  }
  return CellData;
 }

 switch(GetCellCtrlID(nCol,nRow))
 {
  case ID_COL_DEBIT:
   CellData.m_strText = m_RowInfo[nRow].m_Dedet.Format();
  break;

  case ID_COL_CREDIT:
   CellData.m_strText = m_RowInfo[nRow].m_Credit.Format();
  break;

  case ID_COL_SALDO:
   CellData.m_strText = (m_RowInfo[nRow].m_Dedet
                      - m_RowInfo[nRow].m_Credit).Format();
  break;
 }

 return CellData;
}

The virtual function OnSaveCellData() – seved data.

BOOL CGridCtrl::OnSaveCellData(int nCol, int nRow)
{
 CALXCellCtrl* pCellCtrl = GetCellCtrl(nCol,nRow);
 if(pCellCtrl != NULL)
 {
  CELL_DATA Data = pCellCtrl->GetCellData();
  switch(GetCellCtrlID(nCol,nRow))
  {
   case ID_COL_DEBIT:
    m_RowInfo[nRow].m_Dedet.ParseCurrency(Data.m_strText);
    break;
   case ID_COL_CREDIT:
    m_RowInfo[nRow].m_Credit.ParseCurrency(Data.m_strText);
    break;
   }
   InvalidateCell(2,nRow);
   InvalidateRow(m_RowInfo.GetSize());
  }
 return TRUE;
}

Downloads

Download demo project (includes release build) – 104 Kb

More by Author

Must Read