在VC5.0 中使用DBGrid
控件,首先要運行ODBC 數據源管理程序安裝數據源(我們以數據源是STUDENT
為例)。其方法為:在控制面板中雙擊ODBC 圖標,運行ODBC
數據源管理程序。單擊Add 按鈕, 在Add Data Source 對話框中選擇Microsoft
Aclearcase/" target="_blank" >ccess Driver,出現ODBC Microsoft Access 97 Setup 對話框,輸入數據源名Student
以及選擇好數據庫student.mdb,然后單擊OK,再確定完成設置。
與在VB 中使用DBGrid 控件相類似,在VC 中使用DBGrid
控件也需要一個類似于Data 的控件,不過它叫RemoteData 控件。
下面我們舉兩個示例程序來演示DBGrid
控件的使用方法,這兩個示例的項目名都為DBGrid。
一、示例程序
按如下步驟創建:
1、運行AppWizard 生成項目DBGrid。除選擇Single Document 和CDBGridView
的基類改為FormView 以外,其他均按默認設置處理。
2、在項目DBGrid 中添加DBGrid 控件和Microsoft RemoteData 控件。從Developer
Studio 的Project 菜單中選擇Add To Project,再從子菜單中選擇Componets And
Controls。選擇Registered ActiveX Controls,然后選擇DBGrid Control 和Microsoft
RemoteData Control。Developer Studio 將產生控件類CMSDgridCtrl 和CRdc,并把相應的文件添加到項目中。
3、在IDD_DBGRID_FORM 模板中加入控件。利用控件工具箱加入RemoteData
和DBGrid 控件。
對控件RemoteData 編輯。選中該控件,單擊鼠標右鍵,選擇Propertis,出現Microsoft
RemoteData Control 2.0 Properties 對話框。選擇General 標簽,修改資源ID 為IDC_RDCSTUDENT,Caption
為Student。單擊Control 標簽,Datasource 選擇Student(即前面ODBC
數據源管理程序安裝的數據源),SQL 中輸入語句Select *from student。
對控件DBGrid 編輯。選擇該控件,單擊鼠標右鍵,選擇Propertis,出現DBGrid
Control Properties 對話框。選擇General 標簽,修改資源ID 為IDC_DBGSTUDENT,Caption
為Student 或不設置。單擊All 標簽,DataMode 選擇0 -Bound,DataSource 選擇IDC_RDCSTUDENT。
4、編譯并測試程序。DBGrid 在程序中正確地工作了。
示例程序1 可能過于簡單了,不過它的目的只是演示DBGrid 控件在VC5.0
中使用的方法。下面我們對它略作改進。
1、修改設計時DBGrid 控件的列數。DBGrid
控件在設計時的列數默認為兩列。選擇DBGrid
控件,單擊鼠標右鍵,選擇DBGrid Control Object,再選擇Edit??瓷先]有什么變化,其實不然,再選擇DBGrid
控件,單擊鼠標右鍵,可以發現此時的菜單不同了,選擇Insert,此時DBGrid
控件的列由原來默認的兩列變成了三列。重復操作,直到DBGrid
控件的列數滿足你的要求為止。
2、修改DBGrid 控件的列標題。DBGrid
控件的列標題默認為數據集的字段名,可以改為我們想要的列標題。步驟如下:
A、修改DBGrid 控件的列標題。選擇該控件,單擊鼠標右鍵,選擇Propertis,出現DBGrid
Control Properties 對話框。選擇Columns 標簽,在Column 選擇Column0,Caption
中輸入“編號”,DataField 中選擇StudentID,在其他項中選擇或輸入你認為需要的信息。重復本步驟,直至完成修改所有的列標題為止。
B、關閉DBGrid Control Properties
對話框,可以看到修改的列標題已經在DBGrid 控件上出現了。
3、在程序運行時改變DBGrid
控件的尺寸。在視圖尺寸大小改變時,DBGrid
控件的尺寸卻沒有改變,需要添加消息處理函數OnSize ()。
A、使用ClassWizard 為類CDBGridView 加入成員變量。在ClassWizard
中單擊Member Variables 標簽,選擇IDC_DBGSTUDENT,添加變量m_dbgstudent,類型為Control。
B、使用ClassWizard 映射視圖類的WM_SIZE 函數。編輯函數如下:
void CDBGridView::OnSize(UINT nType, int cx, int cy)
{
CFormView::OnSize(nType, cx, cy);
CRect rect;
GetClientRect(rect);
::SetWindowPos(m_dbgstudent,HWND_TOP,0,0,rect.right
-rect.left,rect.bottom -rect.top,SWP_SHOWWINDOW);
}
示例程序1 演示了DBGrid 控件在類CFormView
的派生類中的使用方法,在對話框中使用DBGrid
控件的方法與此完全相同。
以上示例是DBGrid
控件最簡單地使用,因為它們都是把控件添加到控件容器內,然后再設定其屬性,所以RemoteData
和DBGrid 控件可以像Button、Edit
控制一樣,用鼠標點幾下就可以了。下面再介紹DBGrid 控件在類Cview
或其派生類等非控件容器中的使用方法。這時就不能用上面的方法向視圖類中添加控件了,也就不能在設計時設定它們的屬性,必須在運行時使用DBGrid
和RemoteData 控件的Create()
函數創建對象,然后再設置屬性。請看示例程序2。
二、示例程序
按如下步驟創建:
1、運行AppWizard 生成項目DBGrid。選擇Multiple Document,CDBGridView
的基類為CView 不變,其他仍然按默認設置處理。
2、在項目DBGrid 中添加DBGrid 控件和Microsoft RemoteData
控件。與示例程序1 相同。
3、在CDBGridView 類中加入兩個數據成員。一個是類CRdc 變量m_rdcstudent,另一個是類CMsDgridCtrl
變量m_dbgstudent。
4、加入這兩個控件的子窗口ID 常數。從Developer Studio 的View
菜單中選擇Resource Sysbols 命令,然后加入ID 符號ID_RDCSTUDENT 和ID_DBGSTUDENT。
5、用ClassWizard 映射視圖的WM_CREATE 和WM_SIZE 函數。編輯DBGidView.cpp
中的消息處理函數如下:
int CDbgridView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CView::OnCreate(lpCreateStruct) == -1)
return -1;
RECT r={0,0,100,30};
// create the RDC
m_rdcstudent.Create(_T("Student"),
WS_CHILD,r,this,IDC_RDCSTUDENT);
m_rdcstudent.SetDataSourceName(_T("Student"));
m_rdcstudent.SetSql
(_T("Select *from student,section"));
m_rdcstudent.SetUserName(_T("admin"));
m_rdcstudent.SetPassword(_T(""));
m_rdcstudent.SetCursorDriver(2);
// create the DBGrid control
&connect it to IDC_RDCSTUDENT
m_dbgstudent.Create(_T(""),WS_VISIBLE|WS_CHILD,r,
this,IDC_DBGSTUDENT);
LPUNKNOWN pCursor=m_rdcstudent.GetDSCCursor();
ASSERT(pCursor!=NULL);
m_dbgstudent.SetDataSource(pCursor); //bind the grid
m_dbgstudent.BindProperty(0x9, &m_rdcstudent);
return 0;
}
void CDbgridView::OnSize(UINT nType, int cx, int cy)
{
CView::OnSize(nType, cx, cy);
// TODO: Add your message handler code here
CRect rect;
GetClientRect(rect);
::SetWindowPos(m_dbgstudent,HWND_TOP,0,0,rect.right
-rect.left,rect.bottom -rect.top,SWP_SHOWWINDOW);
}
6、編譯并測試程序。屏幕的顯示結果與下圖類似。
以上所述只是談及DBGrid
控件在綁定方式下使用方法,那么如何在在非綁定方式下使用呢?還請朋友們多指教?!?/p>