1. 程式人生 > >MFC介面程式設計基礎(27):排序和篩選

MFC介面程式設計基礎(27):排序和篩選

上一篇:MFC介面程式設計基礎(26):更新記錄 下一篇:MFC介面程式設計基礎(28):直接訪問MySql API 連線 mysql

CRecordView類有兩個重要的資料成員m_strFilter和m_strSort,m_strFilter是用於表示篩選記錄的條件字串,m_strSort是用於表示排序的關鍵字的字串。只要對這兩個資料成員賦值,只能實現排序和篩選。

〖例〗首先在應用程式Exam2_1中建立兩類排序,每一類是按ID號排序,另一類是按HomeCountry排序。
在“檢視”選單下新增三個選單項:一條分隔線、“按ID排序”和“按國家排序”,選單項ID設定為ID_VIEW_SORT_ID和ID_VIEW_SORT_COUNTRY。使用ClassWizard為兩個選單項在檢視類中對映COMMAND訊息處理函式得到,新增程式碼如程式清單2-5所示,實現排序。

程式清單2-5:實現排序的函式

void CExam2_1View::OnViewSortId() 
{
	// TODO: Add your command handler code here
	m_pSet->m_strSort="CustomerID";// 定義排序關鍵字按ID排序
	m_pSet->Requery() ;// 重新查詢
	UpdateData(false);  //更新控制元件顯示
}

void CExam2_1View::OnViewSortCountry() 
{
	// TODO: Add your command handler code here
    m_pSet->m_strSort="HomeCountry";
	m_pSet->Requery() ;
	UpdateData(false);
}

接著新增篩選條件,在一個對話方塊中輸入一個國別,則只顯示屬於該國別的顧客記錄。步驟如下:

  • 建立一個對話方塊,並新增控制元件,如下圖所示。設定編輯框的ID為IDC_FILTER.。為該對話對話方塊新增一個新的對話方塊類CFilterDlg並使用ClassWizard為編輯框IDC_FILTER在對話方塊類CFilterDlg中新增一個Ctring型別的成員變數m_Filter。

篩選對話方塊
在這裡插入圖片描述

  • 在“檢視”選單下新增一個新的選單項“篩選”,選單項ID設為ID_VIEW_FLITER,使用ClassWizard在CExam2_1View類中為選單項ID_VIEW_FILTER對映選單處理函式,得到函式OnViewFilter()。
  • 在CExam2_1View類的實現檔案中使用include命令包含“FilterDlg.h”檔案,並在函式OnViewFilter()中新增程式碼,呼叫篩選對話方塊,並按對話方塊返回的字串設定資料成員m_strFilter的值,實現篩選。若對話方塊返回空串,顯示整個記錄集。

程式清單2-6:實現篩選的函式

void CExam2_1View::OnViewFilter() 
{
	// TODO: Add your command handler code here
	CFilterDlg dlg;
	CString str;
	if (dlg.DoModal() == IDOK)//呼叫篩選對話方塊,按OK按鈕返回
	{
		if (dlg.m_Filter.IsEmpty())//編輯框為空,顯示整個記錄集
		{
			str = "";
		}
		else
		{
			//定義篩選字串
			str = "HomeCountry='" + dlg.m_Filter + "'";
		}
		m_pSet->m_strFilter = str;
		m_pSet->Requery();  //重新查詢記錄集
		UpdateData(false);  //更新控制元件顯示
	}
	} 
上一篇:MFC介面程式設計基礎(26):更新記錄 下一篇:MFC介面程式設計基礎(28):直接訪問MySql API 連線 mysql