GridCtrl学习笔记(2)寻找自动更新表格的最新数据并把其显示到当前窗口的方法

工程搭建好后,可以开始找方法了。

1、首先,建立一个按钮,每按一次,就可更新非当前格子的内容,这个很容易实现:
void CGridControlTest02Dlg::OnBnClickedFillbox()
{
    // TODO: Add your control notification handler code here
            GV_ITEM Item; 
            Item.mask = GVIF_TEXT|GVIF_FORMAT;
            Item.row = 56;
            Item.col = 2;
            Item.nFormat = DT_CENTER|DT_VCENTER|DT_SINGLELINE|DT_END_ELLIPSIS;
            Item.strText.Format(_T("55"),2);
            m_pGrid.SetItem(&Item); 
            m_pGrid.Refresh();
            //CCellID cell(56,2);
 
            //m_pGrid.SetFocusCell(cell);//设置焦点的方法
}
2、接着,就一直找方法,直到我看到GridCtrl.h里的protect中这个函数(BOOL SetScrollPos32(int nBar, int nPos, BOOL bRedraw = TRUE);),然后看使用它的前后代码,发现可以调用它。
但很可惜的是,它是protect,我把它改为public也是一样不能通过编译。
后来,请教同事,发现,在改为public并且用实例化的方式使用它,则编译通过了。如下:
int scrollPos = m_pGrid.GetScrollPos32(SB_VERT);
 
3、然后,我就可以尝试使用我的方法试试了:先获取当前的pos位置,然后算出offset,让当前+offset,则可跳转到有内容更新的位置了:
            int scrollPos = m_pGrid.GetScrollPos32(SB_VERT);
            CCellID idTopLeft = m_pGrid.GetTopleftNonFixedCell();
            int yScroll = m_pGrid.GetRowHeight(idTopLeft.row)*(Item.row-1);
            m_pGrid.SetScrollPos32(SB_VERT, scrollPos + yScroll);
4、编译后通过,并且此法可行。接下来要把此方法修复一下,因为现在有bug。
 
原文地址:https://www.cnblogs.com/ciuciu/p/4462785.html