日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

VC DataGrid控件使用总结

發布時間:2025/4/14 c/c++ 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 VC DataGrid控件使用总结 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?MS CDataGrid控件用法詳解



本文示例源代碼或素材下載
。DataGrid控件是VC方便地用來顯示數據的一個極好的網格控件,我不否認網上還有期它不少優秀的網格控件,但我總喜歡使用微軟自已的東西 。除非它滿足不了我的需要。不是我太依賴Microsoft,你想想,如果你最常用的開發工具是VC,VC是微軟的主打開發工具,它與Windows系統的兼容性極好,連它的控件也不例外,你為何不先選用成熟的代碼,如果它升級了,你的系統幾乎不作改動就可以繼續為你效勞,有什么不好,這不完全是那種無謂的依靠,而是利用 。更重要的是你可以更注重你的系統功能,而不是代碼的細節。


  一、我先交待主要內容


在網格控件中顯示查詢的數據結果。
對網格控件的顯示進行控制(如列寬)。
對網格內容格式進行控制(如將小于1的小數顯示成百分數)
  二、準備工作


  先建立一個工程,我的主框架選用對話框,然后插入你DataGrid控件,見如圖1


  圖1


  找到Microsoft DataGrid OLEDB 6.0 控件,確定,出現圖所示對話框,這個對話框中你要根據需要選擇的類,這些類封裝了這個控件的幾乎所有功能有方法。這里我只選擇了三個類:CDataGrid,CColumns,CColumn,如圖2(我們知道,ActiveX是基于COM的,這三個類是對這個控件的COM查詢接口的封裝,使你在使用時幾乎不知道自己在使用COM控件。正因為如此,你要想直接查看這個控件的源代碼,也就不可能了。)


  圖2


  三、功能實現及代碼


  1.在網格控件中顯示查詢的數據結果。


  數據庫接庫,并取得查詢的數據結果。這里我使用了一個ADO封裝類(當然你可以使用其它的方法方法數據庫,而不會影響控件的使用)。
 
CADODatabase m_DBCn;//數據庫對象
CADORecordset m_Rs;//記錄集對象
CDataGRid m_ctrlDG;//DataGrid控件對象
...
CString strConnection; strConnection.Format(_T("Provider=Microsoft.Jet.OLEDB.4.0;")
   _T("Data Source=note.mdb"));
m_DBCn.Open((LPCTSTR)strConnection); //打開程序數據庫
m_Rs.SetDatabase(&m_DBCn); m_Rs.Open(_T("select * from test;")); //執行查詢
m_ctrlDG.SetRefDataSource((LPUNKNOW)m_Rs.GetRecordset());//顯示在DataGrid控件中      


  如圖3:


  圖3


  2.對網格控件的顯示進行控制(如列寬)。 要實現對列的控制,就要先取得列對象。


  CColumns cols = m_ctrlDG.GetColumns();//先取得列集


  CColumn col = cols.GetItem(vt); //再取得列集中的列,由VARIANT vt變量指出列的索引號


  然后,你就可以對當前列為所欲為,這里我對它設置列寬 col.SetWidth(fWidth);//fWidth指定列寬 如圖4


  圖4


  3.對網格內容格式進行控制(如將小于1的小數顯示成百分數)


  要設置列的顯示格式,還是要先取得列,再對它設置格式,取得列的方法同上。


  col.SetNumberFormat(_T("0.0%"));//百分數格式 如圖5


  圖5


  4.除此之外,我們還可以對它多行顯示,如圖6


  圖6


  5.另外,還可以利用消息機制,對控件的HeadClick消息處理,使控件能進行排序。 (具體情況參見源代碼)


  四、結束語


  細心的朋友會發現,查看相關類的方法名(函數名),能故名思意,看出控件的功能,另外在插入控件時,一般有也幫助文件,不過是針VB的,而且VB的調用方法與VC差別較大,但只有對比VC和VB方法名的相似之處,你還是可以很快對這款控件上手,并運用到你的項目中去。 


  本文源程序在VC6.0英語版,Windows XP調試通過,并附源程序(工程名 TestGrid)。
========

VC++ Datagrid應用實例詳解系列(1) - 基本功能



本文源碼下載:


http://download.csdn.net/source/3133370


1) ? ? ? ?簡單的演示了DataGrid組件和Data Control組件的使用方法;


2) ? ? ? ?介紹了數據源相對路徑的設置方法;


3) ? ? ? ?對DataGrid控件的顯示進行控制?


正文:


DataGrid控件是主要用于顯示數據的一個網格控件,本文所用的DataGrid控件全名為:Microsoft DataGrid Control 6.0(SP6)(OLEDB),下面簡稱DataGrid,輔助控件Microsoft Data Control 6.0(SP6)(OLEDB),下面簡稱ADODC,其中ADODC主要用于綁定數據源并篩選需要的字段,DataGrid組件用于按要求顯示已篩選的字段。


VC++ 6.0本身沒有這些控件,控件的添加詳見:


http://www.vckbase.com/document/viewdoc/?id=1164


其中,Datagrid的類較多,添加需要的幾個就可以,這里添加的有下面三個:CDataGrid、CColumns、CColumn。ADODC的類較少,按默認添加。


按MFC Wizard建dialog based工程文件,命名為DBGridDemo,添加DataGrid組件和ADODC組件。


其中ADODC組件設置如下:


“Control”標簽頁中,使用”Use Connection String”選項,點Build,按向導選Access數據源,通過測試后修改連接字符串如下:


Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Database//Demo.mdb;Mode=ReadWrite|Share Deny None;Persist Security Info=False ?
?
其中:Data Source使用的路徑為相對路徑,表示:數據源為源代碼文件夾下的Database文件夾下的Demo.mdb文件。


然后在DataGrid組件右鍵,屬性中選擇ClassWizard,Class選擇:CDBGridDemoDlg,在Member Variables標簽頁中分別設置成員變量如下:


IDC_ADODC1增加成員變量:m_data;


IDC_DATAGRIDDemo增加成員變量:m_grid。


確定后,在DBGridDemoDlg.cpp中對初始化成員函數::OnInitDialog()添加代碼如下:


BOOL CDBGridDemoDlg::OnInitDialog() ?
{ ?
? ? CDialog::OnInitDialog(); ?
? ? // Set the icon for this dialog. ?The framework does this automatically ?
? ? // ?when the application's main window is not a dialog ?
? ? SetIcon(m_hIcon, TRUE); ? ? ? ? // Set big icon ?
? ? SetIcon(m_hIcon, FALSE); ? ? ? ?// Set small icon ?
? ? ??
? ? // TODO: Add extra initialization here ?
? ? // Added code ?
? ? CColumns Columns=m_grid.GetColumns(); ? //求列集合對象 ?
? ? CColumn Column; ?
? ? Columns.Add(2); ? ? ? ? ? ? ? ? ? ? ? ? //在最后增加1列,注:列序號從0開始 ?
? ? Columns.Add(3); ? ? ? ? ? ? ? ? ? ? ? ? //再增加1列 ?
? ? Column=Columns.GetItem(COleVariant(long(0))); ? //取第一列對象 ?
? ? Column.SetWidth(80); ? ? ? ? ? ? ? ? ? ?//設置列寬度為80(像素pi?) ?
? ? Column.SetCaption("姓名"); ? ? ? ? ? ? ? ?//設置該列標題 ?
? ? ??
? ? //Column.SetAlignment(2); ? ? ? ? ? ? ? //列內容對齊設置:0居左,1居中,2居右 ?
? ? Column.SetDataField("name"); ? ? ? ? ? ?//設置該列綁定字段 ?
? ? Column=Columns.GetItem(COleVariant(long(1))); ? //設置第二列 ?
? ? Column.SetWidth(80); ? ? ? ? ? ? ? ? ? ?//設置列寬度為80 ?
? ? Column.SetCaption("年齡"); ? ? ? ? ? ? ? ?//設置該列標題 ?
? ? Column.SetDataField("age"); ? ? ? ? ? ? //設置該列綁定字段 ?
? ? Column=Columns.GetItem(COleVariant(long(2))); ? //設置第三列 ?
? ? Column.SetWidth(40); ? ? ? ? ? ? ? ? ? ?//設置列寬度為40 ?
? ? Column.SetCaption("性別"); ? ? ? ? ? ? ? ?//設置該列標題 ?
? ? Column.SetDataField("gender"); ? ? ? ? ?//設置該列綁定字段 ?
? ? Column=Columns.GetItem(COleVariant(long(3))); ? //設置第四列 ?
? ? Column.SetWidth(120); ? ? ? ? ? ? ? ? ? //設置列寬度為120 ?
? ? Column.SetCaption("居住地"); ? ? ? ? ? //設置該列標題 ?
? ? Column.SetDataField("city"); ? ? ? ? ? ?//設置該列綁定字段 ?
? ? m_grid.ReBind(); ? ? ? ? ? ? ? ? ? ? ? ?//實現與datagrid中的表格綁定 ?
? ? m_grid.Refresh(); ? ? ? ? ? ? ? ? ? ? ? //刷新列表顯示 ?
? ? ? ? ??
? ? return TRUE; ?// return TRUE ?unless you set the focus to a control ?
} ?
?


以上是DataGrid組件基本功能的實現,其他功能如增加列下拉組合框、查找、分頁、打印、導出到Excel等功能會在本系列陸續介紹。
========

VC DataGrid的簡單使用范例



? ? 本文為DataGrid控件在VC6.0中使用的基本范例,主要功能為插入一行數據并在控件中顯示,及刪除一行數據并在控件中顯示。
?
? ? 1 在VC6.0中建立MFCApp(exe)工程;
?
? ? 2 導入DataGrid控件:
? ? ? ? ? 路徑:Project-->Add To Project-->Conponents and Controls
?
? ? ? ?選擇集合:
?
? ? ? ? 選擇組件,選好后別忘記“Insert”:
?
? ? ? ?演示目前的功能僅需要選擇圖片中的三個類就可以了:
?
? ? ? ?這時組件就被導入到工具箱中了,在Form中畫好后再為其添加一個控件變量 m_ctrlDataGrid1;
?
? ? 3 實現數據綁定:
? ? 對于數據庫的操作,我在這里使用了ADO來執行;
? ? 要使用ADO的話不要忘記在你的stdafx.h中將其導入:
#import "c:/program files/common files/system/ado/msado15.dll"
?
? ? 我使用的是SQLSERVER2005 EXPRESS,也就是附帶在VS2005中的開發版本,數據庫連接字符串的設置如下:
CString strSqlLink = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=SalManSystem;Data Source=.//SQLEXPRESS";
?
? ? 注意:Data Source的設置對比2005之前版本的設置略有不同;
?
? ? 對話框初始化時的數據綁定代碼:
?
BOOL CTestDATAGRIDDlg::OnInitDialog()
...{
? ? //................以上省略若干行
? ? // TODO: Add extra initialization here
? ? CString strConnection;
? ? strConnection.Format(_T(sqllink));
? ? m_ADODb.Open((LPCTSTR)strConnection); ? ?//打開程序數據庫
? ? m_Rs.SetDatabase(&m_DBCn);
? ? m_Rs.Open(_T("select * from em_baseinfo;"));
?
? ? m_ctrlDataGrid1.SetCaption(_T("Add Employeer")); //設置標題
? ? m_ctrlDataGrid1.SetRefDataSource((LPUNKNOWN)m_Rs.GetRecordset()); //綁定數據源
?
? ? return TRUE; ?// return TRUE ?unless you set the focus to a control
}
?
?
?
? ? 4 插入操作:
? ? 這個非常簡單,代碼如下:
?
BOOL CTestDATAGRIDDlg::InsertEMInfo()
...{
? ? CString strSQL;
? ? strSQL.Format( _T("INSERT INTO em_baseinfo(em_name, em_id, em_sex, em_edu)VALUES('%s', '%s', '%s', '%s');")
? ? ? ? , m_strName, m_strID, m_strSex, m_strEDU );
?
? ? m_Rs.Open((LPCTSTR)strSQL);
? ? m_Rs.Open(_T("select * from em_baseinfo;"));
?
? ? m_ctrlDataGrid1.SetRefDataSource((LPUNKNOWN)m_Rs.GetRecordset());
?
? ? return TRUE;
}
? ? ? ?5 刪除操作:
? ? ? ?這個需要稍微花點心思。
? ? ? ?在這里我的數據庫中將em_id設置為主鍵,所以可以只獲取指定行的id值來作為刪除條件,若是你的需求有變,那就需要多組合幾個鍵值了:
?
BOOL CTestDATAGRIDDlg::DelEMInfo()
...{ ??
? ? VARIANT index;
? ? CColumns columns;
? ? CColumn column;
? ? index.vt=VT_INT;
? ?
? ? columns=m_ctrlDG.GetColumns(); ?//得到當前選中行的列集
? ? long nCount = columns.GetCount(); //列數
? ?
? ?
? ? index.lVal = 1;
? ? column = columns.GetItem(index);//順序得到單元格的值
? ? CString strid;
? ? strid = column.GetText();
? ? strid.Remove(' ');
? ?
? ?
? ? CString strSQL;
? ? strSQL.Format( _T("delete from em_baseinfo where em_id='%s'")
? ? ? ? , strid);
? ?
? ? m_Rs.Open((LPCTSTR)strSQL);
? ? m_Rs.Open(_T("select * from em_baseinfo;"));
?
? ? m_ctrlDataGrid1.SetRefDataSource((LPUNKNOWN)m_Rs.GetRecordset());
? ?
? ? return TRUE;
}
========

VC++ Datagrid應用實例詳解系列(2) – 篩選查詢



本文源碼下載:


http://d.download.csdn.net/down/3143819/zxhx


1) ? ? ? ?在系列(1)的基礎上添加了Date Time Picker組件,并利用該組件+按鈕實現DataGrid數據查詢;


2) ? ? ? ?簡單介紹了Date Time Picker的用法;


3) ? ? ? ?簡單介紹了在按鈕組件的OnClick事件中接收其他組件變量及更新變量的基本流程。


前文(1)補遺:


1) ? ? ? ?數據源綁定的設置方法:在Data Control組件中設置好數據源后,右鍵DataGrid組件,選擇”Properties”,點擊屬性頁右上角的三角箭頭,拉到“All”標簽頁,找到Data Source屬性,在下拉列表框中選擇“IDC ADODC1”,如下圖:


datagrid數據源綁定
?
2) ? ? ? ?有關vc6.0的補丁:使用上述控件最好是打上vc6.0 sp6補丁后再執行。
?
正文:


在對話框窗體上添加Date Time Picker組件,并添加兩個按鈕,對按鈕的Caption進行設置,分別為”查詢”和”全部顯示”。


對Date Time Picker控件點擊右鍵,設置控件的成員變量,類型選擇CDateTimeCtrl,變量名為m_DtCtrl,基本用法與DataGrid差不多,也是設置成員變量。


在DBGridDemoDlg.cpp文件中添加代碼:


1) ? 對話框初始化函數中新增一列,并添加日期列的代碼,按前文(1)介紹的方法進行即可,在此不再贅述。


2) ? 對查詢按鈕添加OnClick事件如下:


void CDBGridDemoDlg::OnBtQuery() ?
{ ?
? ? ? ? ?// TODO: Add your control notification handler code here ? ? ??
? ? ? ? ?try ?
? ? ? ? ?{ ? ? ? ??
? ? ? ? ? ? ? ? ? ?//獲取控件當前的數據,UpdateData(false):更新控件中的數據(依據現有的變量值) ?
? ? ? ? ? ? ? ? ? ?UpdateData(TRUE); ?
? ?
? ? ? ? ? ? ? ? ? ?//定義CTime類型變量vTime并初始化 ?
? ? ? ? ? ? ? ? ? ?CTime vTime(2011,3,1,3,3,3); ?
? ? ? ? ? ? ? ? ? ??
? ? ? ? ? ? ? ? ? ?//從Date Time Picker控件(m_DtCtrl)中獲取時間值并賦給vTime ?
? ? ? ? ? ? ? ? ? ?m_DtCtrl.GetTime(vTime); ?
? ? ? ? ? ? ? ? ? ??
? ? ? ? ? ? ? ? ? ?//將vTime轉換成y-m-d格式的字符串并賦給字符串變量strDate ?
? ? ? ? ? ? ? ? ? ?CString strDate=vTime.Format("%Y-%m-%d"); ?
? ? ? ? ? ? ? ? ? ??
? ? ? ? ? ? ? ? ? ?/* 可以在此另行設置連接字符串 */ ?
? ? ? ? ? ? ? ? ? ?//m_data.SetConnectionString("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Database//Demo.mdb;Mode=Read;Persist Security Info=False"); ?
? ? ? ? ? ? ? ? ? ??
? ? ? ? ? ? ? ? ? ?/* datagrid輸出記錄篩選語句 */ ?
? ? ? ? ? ? ? ? ? ?m_data.SetRecordSource("select * from demotable where [datetime]=#"+strDate+"#"); ?
? ? ? ? ? ? ? ? ? ??
? ? ? ? ? ? ? ? ? ?//更新datagrid組件(m_data)中的數據 ?
? ? ? ? ? ? ? ? ? ?m_data.Refresh(); ?
? ? ? ? ?} ?
? ? ? ? ?catch(_com_error& e) ?
? ? ? ? ?{ ?
? ? ? ? ? ? ? ? ? ?AfxMessageBox(e.Description()); ?
? ? ? ? ?} ?
} ?
??


針對以上代碼,在此特別介紹一下UpdateData()函數的用法:


UpdateData(TRUE):獲得控件當前的數據


UpdateData(FALSE):更新控件中的數據


如:一個edit控件設置變量為m_text,strText為控件中的一個變量,定義為:


CString strText;


UpdateData(TRUE);


strText = m_text;


表示:只有在調用了UpdateData(TRUE)后,才能獲得控件的當前輸入值(若沒輸入則為默認值),否則strText還是上次賦予的值(若沒有則顯示其默認值)。


若在m_text中輸入一個值,再UpdateData(FALSE),則表示:


控件m_text接收輸入的值,如果沒有UpdateData(FALSE),則該控件依然顯示原先的值。


另外再簡單說明一下上面Format()函數的參數的含義:


?vTime.Format("%Y-%m-%d");


其中:第一個參數”Y”表示4位的年(如:2011),如果為”y”則只取后兩位(如:11),第二個參數”m”表示2位的月(如:03),此處大小寫顯示的結果相同,第三個參數”d”必須為小寫,表示2為的日,改為大寫則不顯示。


另外,需要注意一下CTime與CString之間的轉換,參考上面的代碼即可。


按上面的設計,查詢完畢后,無法顯示所有數據,所以在此增加了顯示全部數據的按鈕,代碼如下:


void CDBGridDemoDlg::OnBTShowAll() ??
{ ?
? ? // TODO: Add your control notification handler code here ?
? ? try ?
? ? { ?
? ? ? ? UpdateData(TRUE); ?
? ? ? ? m_data.SetRecordSource("select * from demotable"); ?
? ? ? ? m_data.Refresh(); ?
? ? } ?
? ? catch(_com_error& e) ?
? ? { ?
? ? ? ? AfxMessageBox(e.Description()); ?
? ? } ?
} ?


如果希望看到所有數據,可以點擊該按鈕。
========

總結

以上是生活随笔為你收集整理的VC DataGrid控件使用总结的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: www.欧美成人| av片网| 大肉大捧一进一出好爽视频 | 激情婷婷六月天 | 奇米精品一区二区三区在线观看一 | 人人干超碰 | a√天堂在线 | 日韩免费看 | 国产在线123 | 妺妺窝人体色WWW精品 | 国产福利一区二区三区 | 伊人春色在线观看 | 国产精品精东影业 | 欧美与黑人午夜性猛交久久久 | 在线视频中文字幕 | 日韩一区二区三区在线看 | 国产又黄又猛又粗又爽 | 国产精品午夜在线观看 | 日本午夜影院 | 精品国产一区二 | 91精品国产日韩91久久久久久 | 国产精品久久久久久久久久免费 | 久操精品视频 | 天天操狠狠操 | 深爱五月激情五月 | 辟里啪啦国语版免费观看 | 草草地址线路①屁屁影院成人 | 欧美无人区码suv | 2020国产精品视频 | 亚洲天堂精品视频 | 好大好舒服视频 | 亚洲精品乱码久久久久久麻豆不卡 | 国产日产亚洲系列最新 | 国产精品一线二线 | 韩国一级片在线观看 | 制服师生在线 | 精品一二三区 | 亚洲精品国产av | 人人澡人人透人人爽 | 欧美18av| 久久精品123 | 91九色国产ts另类人妖 | 懂色av蜜臀av粉嫩av分 | 亚洲精品乱码久久久久久9色 | 91午夜剧场| 日韩精品一区在线观看 | 色国产精品 | 一区二区三区四区免费观看 | 波多野在线播放 | 狠狠操操| av观看国产 | 不卡一区二区在线视频 | 日日夜夜狠狠爱 | 久久91| av在线片 | 在线播放无码后入内射少妇 | 久久夜靖品2区 | 九九午夜视频 | 欧美a级大片 | 一本色道久久综合亚洲精品图片 | 被各种性器调教到哭vk | 男人操女人下面视频 | 亚洲高清中文字幕 | 国产在线视频一区二区三区 | 国产精品无码白浆高潮 | 打屁股疼的撕心裂肺的视频 | 欧美国产日韩在线观看成人 | 日本一区二区在线看 | 在线视频免费播放 | 日韩成人综合网 | 扶她futa粗大做到怀孕 | 天天操天天操天天操天天操天天操 | 99精品视频免费 | 毛片免费在线观看视频 | 色图色小说 | 亚洲影院一区二区三区 | 国产精在线 | 淫五月 | xvideos永久免费入口 | 一区二区三区国产视频 | 国产色呦呦 | 激情精品 | 国产拍拍拍 | 久久国内精品 | 欧美日韩一区三区 | 青青青在线视频观看 | 火影黄动漫免费网站 | 美女100%视频免费观看 | _级黄色片| 欧美交换国产一区内射 | 手机在线一区二区三区 | 精品一区二区久久久 | 日韩精品在线播放 | 波多野结衣一区二区在线 | 波多野结衣在线看 | 中文有码在线观看 | av在线网址大全 | 日本公妇乱淫免费视频一区三区 | 欧美成人aaaaⅴ片在线看 |