MFC GridControl 控件使用(1)

来源:互联网 发布:mac换输入法快捷键 编辑:程序博客网 时间:2024/04/28 10:48

1.将该控件涉及的.cpp(6个)和.h(8个)文件加入工程
2.从工具箱中拖入Custom Control,右击该控件属性,将Class项设置为MFCGridCtrl
3.在工程头文件中,#include "GridCtrl.h",且定义变量CGridCtrl m_ctrlGrid;
4.在工程定义文件中,在DoDataExchange函数,添加DDX_GridControl(pDX, IDC_CUSTOM1, m_ctrlGrid);(假设控件ID为IDC_CUSTOM1)
5.在需要用到表格控件的地方使用即可。譬如:m_ctrlGrid.SetRowCount(10);
 m_ctrlGrid.SetColumnCount(3);

具体步骤:

1、首先要使用MFCgridctrl 必须要在用到的系统中导入gridctrl文件夹的全部cpp和h文件(方法 project-->add to project -->files),这时候可以在类的试图中看到CGridCtrl CCellID等等一些类
2、加入一个Custom Control,将Class设为: MFCGridCtrl 记住要 MFCGridCtrl 这个名字,原因是 该类用registerClass注册了该类,Style等可以随便设置

3、在使用类中,定义一个对象: CGridCtrl m_AttrGrid;注意一定要定义一个对象,否则该类如果是窗口类的话将用DoModal无法显示

4、编译时如果报错,说找不到CGridCtrl,那么在相应的定义对象的 .h内将GridCtrl.h包含进入 #include "路径/GridCtrl.h"

5、在DoDataExchange(CDataExchange* pDX)函数中加入:
             DDX_GridControl(pDX, IDC_GRID/*第一步中可以看到的ID值*/, m_AttrGrid/*第三步中定义的对象名*/);

6、如果需要初始化该控件 可在使用的类中的 OnInitDialog 加相关函数
比如  
 m_AttrGrid.SetColumnCount(3);    // 设定总共的列数
 m_AttrGrid.SetRowCount(1)        // 设定总共的行数
 m_AttrGrid.SetFixedRowCount(1);  // 设定固定行数
 m_AttrGrid.SetItemText(0,0,"属性"); // SetItemText 用来设定某行某列的具体文本数值
 m_AttrGrid.SetItemText(0,1,"标准值");
 m_AttrGrid.SetItemText(0,2,"当前值");
 // 可以通过
//  m_AttrGrid.SetItemState(i,0,GVIS_READONLY);
//  m_AttrGrid.SetItemState(i,1,GVIS_READONLY);
/// 来设置单元格是否只读
 CRect GRect;
 m_AttrGrid.GetWindowRect(&GRect);               // 得到控件的宽度
 m_AttrGrid.SetColumnWidth(0,GRect.Width()/3-2); // 设定没列的宽度
 m_AttrGrid.SetColumnWidth(1,GRect.Width()/3-2);
 m_AttrGrid.SetColumnWidth(2,GRect.Width()/3-2);

7、 对于最常见的一个功能,就是修改完毕后马上验证和保存的方法可以参考如下
修改
CGridCtrl::OnEndEditCell 函数,在该函数中添加验证函数比如
void CGridCtrl::OnEndEditCell(int nRow, int nCol, CString str)
{
    CString strCurrent = GetItemText(nRow, nCol);
 // self check
 str=CheckInputValid(nRow, nCol, str); // 你的验证函数
 // 其中strCurrent为修改前的值,str为修改后的值
 .....
对于修改后数据的保存,可以这么做
先建立映射
 ON_NOTIFY(GVN_ENDLABELEDIT, IDC_ATTR_GRID, OnEndEditGrid)
然后在 //{{AFX_MSG(CXmlViewerDlg) 中建立
 afx_msg void OnEndEditGrid(NMHDR* pNMHDR, LRESULT* pResult);
OnEndEditGrid(NMHDR* pNMHDR, LRESULT* pResult) 中实现数据保存操作
{
 NM_GRIDVIEW* pNmgv = (NM_GRIDVIEW*) pNMHDR;
 CCellID cii(pNmgv->iRow, pNmgv->iColumn);
 CString newValue=m_AttrGrid.GetItemText(cii.row,cii.col);
 // 这里就得到了修改后的新值,可以在此进行操作了

}


0
0 0
原创粉丝点击