void CXSCJView::OnInitialUpdate()
{
m_pSet = &GetDocument()->m_xSCJSet;
COleDBRecordView::OnInitialUpdate();
m_StuZYCB.InsertString(0,"计算机");
m_StuZYCB.InsertString(1,"通信工程");
m_StuZYCB.InsertString(2,"所有专业");
m_StuZYCB.SetCurSel(0);

// m_SearchBtn.ModifyStyle(0,BS_ICON);
// m_SearchBtn.SetIcon(theApp.LoadIcon(IDI_ICON8)); CColumns cols;
CColumn col;
VARIANT vIndex;
// TODO: Add extra initialization here //增加表格列,必须在DataGrid属性中设定column0为XH,否则不显示?
cols = m_ViewDBGrid.GetColumns();
cols.Add(2);
cols.Add(3);
cols.Add(4);
cols.Add(5);
cols.Add(6);

vIndex.vt = VT_UINT;
//分别设定每列的属性,包括表头、绑定的数据库字段
vIndex.uintVal = long(0);
col=cols.GetItem(vIndex);
col.SetDataField("XH");
col.SetCaption("学号"); vIndex.uintVal = long(1);
col=cols.GetItem(vIndex);
col.SetDataField("XM");
col.SetCaption("姓名"); vIndex.uintVal = long(2);
col=cols.GetItem(vIndex);
col.SetDataField("XBM");
col.SetCaption("性别"); vIndex.uintVal = long(3);
col=cols.GetItem(vIndex);
col.SetDataField("CSSJ");
col.SetCaption("出生日期"); vIndex.uintVal = long(4);
col=cols.GetItem(vIndex);
col.SetDataField("ZY");
col.SetCaption("专业"); vIndex.uintVal = long(5);
col=cols.GetItem(vIndex);
col.SetDataField("ZXF");
col.SetCaption("总学分"); vIndex.uintVal = long(6);
col=cols.GetItem(vIndex);
col.SetDataField("BZ");
col.SetCaption("备注");
col.SetWidth(120); //初始化标记设置
m_AdoInitFlag = 1;
m_ViewDBGrid.ReBind();
m_ViewDBGrid.Refresh();
//m_pCon->CursorLocation = adUseClient;
//m_StuViewAdodc.GetRecordset().MoveLast();
m_StuViewAdodc.GetRecordset().MoveFirst();

}void CXSCJView::OnMoveCompleteStuviewadodc(long adReason, LPDISPATCH pError, long FAR* adStatus, LPDISPATCH pRecordset) 
{

// TODO: Add your control notification handler code here
//m_StuKCDB.

if(m_AdoInitFlag == 0)
return;
try{
_RecordsetPtr pRs;
_variant_t  varFld;
CString SqlStr;
//m_pCon->CursorLocation = adUseClient;
pRs.CreateInstance(__uuidof(Recordset)); // 创建RecordSet实例
pRecordset->QueryInterface(IID_IDispatch, (void **)&pRs);
if(!pRs->adoEOF&&!pRs->BOF)
{
varFld = pRs->Fields->GetItem("XH")->Value;
CString strXH(_T(varFld.bstrVal));
strXH.TrimRight();
//更换SQL语句后DataGrid不显示的情况没,删除Datagrid重新定义变量和绑定后可以显示
SqlStr.Format("select KC.KCH as 课程号,KCM as 课程名,CJ as 成绩,KC.XF as 学分 from XS,KC,XS_KC Where XS.XH = XS_KC.XH And KC.KCH = XS_KC.KCH and XS.XH='%s'",strXH);
//以当前学生信息的学号作为查询条件,从XS_KC表中查找当前学生的选课记录
m_StuKCADO.SetRecordSource(SqlStr); //显示到学生课程显示的IDC_DGKC
m_StuKCADO.Refresh();
}
}catch(_com_error e)
{
MessageBox("错误!","提示", MB_ICONWARNING);
}

}
上面两处都是疑问,一是用cols.add增加表格列,必须在DataGrid属性中手工绑定column0,否则不显示?
二是:在movecomplete事件中,用SetRecordSource设置另一个Datagrid的显示,为什么我换一条SQL语句再运行就不显示数据,现象是DataGrid小箭头可以动,疑似有记录存在,但是表格中没有文字,像隐形一样。而开始做的时候一气呵成就能显示。最后只有重来。一样的控件设置,换一个新的一切没问题。

解决方案 »

  1.   

    把你屏蔽的这条语句打开:
    //m_pCon->CursorLocation = adUseClient;
      

  2.   

    不大清楚了..参考一下:
    http://www.codeproject.com/KB/database/msdatagrid.aspx
    http://www.codeproject.com/KB/miscctrl/DataGridControl.aspx
    http://www.codeproject.com/KB/miscctrl/datagrid.aspx
      

  3.   

    用了N个Refresh,刚才又有这种现象,
    但是:在属性中设置绑定Column0 和Column1到前两列数据时前两列可以显示,但后面几列依然不显示,
    绑定的代码则么写?属性只绑定2列