酒店点餐系统开发详解(六)
——疑难解决
在本系统的详细设计过程中遇到了很多的麻烦,经过分析、思考和网上搜索等方式将所有问题均给一一化解了,现与大家分享以共勉。
1、CDataGrid的使用
之所以使用CDataGrid完全是为了偷懒,不过它却让我差点崩溃,因为它并没有想象中的那么方便,关键是网上或书上关于它的资料都少得可怜。幸运的是本系统对其要求不高,因而被我巧妙地化解了。
我看中CDataGrid在使用时可以根据所查询属性的不同而自动更换表中的列名,因为本系统涉及不同的查询条件返回的是不同的属性列(列名称不同)。
1)得到某单元格值
//获取所选项信息
VARIANT index;
CColumns columns;
CColumn column;
index.vt = VT_INT;
columns = grid.GetColumns(); //得到当前选中行的列集
long nCount = columns.GetCount(); //列数
index.lVal = 0; //dishid所在位置
column = columns.GetItem(index);//顺序得到单元格的值
CString dishid = column.GetText();
index.lVal = 2; //cookid所在位置
column = columns.GetItem(index);
CString cookid = column.GetText();
2)在使用中我发现当单击CDataGrid控件的某一行然后用CDataGrid table.GetRow()获取所选行时,并不能得到正确的行号,然而双击所选行时能够得到正确的行号,所以我采取单击变双击的方式解决了这个问题。
添加单击CDataGrid控件消息ON_EVENT(CClientTerminalDlg, IDC_MENU_DATAGRID, -600 /* Click */, OnClickMenuDatagrid, VTS_NONE)和双击CDataGrid控件消息ON_EVENT(CClientTerminalDlg, IDC_MENU_DATAGRID, -601 /* DblClick */, OnDblClickMenuDatagrid, VTS_NONE),函数实现如下:
//需双击才能获取到所选行号,显示图片
void CClientTerminalDlg::OnDblClickMenuDatagrid()
{
DisplayDishPicture(m_MenuDataGrid); //显示图片
}
//在单击事件中模拟双击事件,以实现图片的正确更新
void CClientTerminalDlg::OnClickMenuDatagrid()