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, m_Grid);
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);
摘自http://blog.youkuaiyun.com/xgbing/archive/2007/10/08/1815509.aspx