ADATBÁZISKEZELÉS KÖZVETLEN ELÉRÉSSEL II...2

Hasonló dokumentumok
SDI ALKALMAZÁS I. Workspace / ResourceView / Toolbar / IDR_MAINFRAME. Workspace / ResourceView / Menu / IDR_MAINFRAME

1. Feladat: Lista mysql BANK UGYFEL

Elemi alkalmazások fejlesztése Bank I.

1. feladat. Szabóné Nacsa Rozália

Adatbázis-kezelés ODBC driverrel

Eseményvezérelt alkalmazások

Adatbázis-kezelés ODBC-vel

Adatbázis-kezelés API hívásokkal. Adatbázis-kezelés ODBC-vel. Adatbázis-kezelés SQL parancsokkal. Adatbázis-kezelés ODBC-vel.

Adatbázis-kezelés ActiveX vezérl kkel 2.rész

Java Programozás 9. Gy: Java alapok. Adatkezelő 5.rész

Adabáziselérés ODBC-n keresztül utasításokkal C#-ban

Elemi alkalmazások fejlesztése IV. Adatbázis-kezelés ActiveX vezérlıkkel - 1

Adatbázis Rendszerek II. 5. PLSQL Csomagok 16/1B IT MAN

Elemi alkalmazások fejlesztése IV. Adatbázis-kezelés ActiveX vezérl ı kkel - 2

A gyakorlat során az alábbi ábrán látható négy entitáshoz kapcsolódó adatbevitelt fogjuk megoldani.

A könyv tartalomjegyzéke

C#, OOP. Osztályok tervezése C#-ban

C# nyelv alapjai. Krizsán Zoltán 1. Objektumorientált programozás C# alapokon tananyag. Általános Informatikai Tanszék Miskolci Egyetem

Széchenyi István Egyetem

Adatbázis-kezelés ActiveX vezérl kkel

3. Osztályok II. Programozás II

Kilencedik témakör: Lazarus-Firebird. Készítette: Dr. Kotsis Domokos

WEBFEJLESZTÉS 2. ADATBÁZIS-KEZELÉS, OSZTÁLYOK

WCF, Entity Framework, ASP.NET, WPF 1. WCF service-t (adatbázissal Entity Framework) 2. ASP.NET kliens 3. WPF kliens

Szabóné Nacsa Rozália. Feladat. Készítsünk el egy üres FormView alapú alkalmazást és építsünk köré egy súgó környezetet.

Mechatronika és mikroszámítógépek 2017/2018 I. félév. Bevezetés a C nyelvbe

Elemi alkalmazások fejlesztése III

Adatbázisok. 8. gyakorlat. SQL: CREATE TABLE, aktualizálás (INSERT, UPDATE, DELETE), SELECT október október 26. Adatbázisok 1 / 17

SQL*Plus. Felhasználók: SYS: rendszergazda SCOTT: demonstrációs adatbázis, táblái: EMP (dolgozó), DEPT (osztály) "közönséges" felhasználók

Adatbázisok webalkalmazásokban

Adatbázis kezelés Delphiben. SQL lekérdezések

Objektumorientált programozás C# nyelven

Programozás(A szakirány) II. beadandó feladat Farkas András HP6S15 1. csoport Veszprémi Anna / Hudoba Péter

A C# programozási nyelv alapjai

C#---Access adatbáziskezelési gyakorlat

Adattípusok. Max. 2GByte

Számítógépes grafika

Adattípusok. Max. 2GByte

Informatika terméktervezőknek

Adatbázisok* tulajdonságai

Gelle Kitti Algoritmusok és adatszerkezetek gyakorlat - 07 Hasítótáblák

Egészítsük ki a Drupal-t. Drupal modul fejlesztés

Access adatbázis elérése OLE DB-n keresztül

SZERVER OLDALI JAVASCRIPT. 3. hét Javascript nyelvi elemek

3. Határozza meg és írja ki a minta szerint, hogy a forrásállományban hány kémiai elem felfedezési adatai

Gyakorlás: Hozzunk létre egy Alkalmazottak táblát AZO szám, Részleg szöveg, Munkakör szöveg és BelépésDátuma dátum típussal.

Szoftvertechnolo gia gyakorlat

Programozás alapjai. 5. előadás

OOP: Java 11.Gy: Enumok, beágyazott osztályok. 13/1 B ITv: MAN

Programozási nyelvek Java

Osztály és objektum fogalma

Johanyák Zsolt Csaba: Grafikus felület programozása. Copyright 2008 Johanyák Zsolt Csaba

1. Alapok. Programozás II

CREATE TABLE student ( id int NOT NULL GENERATED ALWAYS AS IDENTITY PRIMARY KEY, name varchar(100) NOT NULL, address varchar(100) NOT NULL )

és az instanceof operátor

Táblakezelés: Open SQL Internal table. Tarcsi Ádám: Az SAP programozása 1.

Számítástechnika II. BMEKOKAA Előadás. Dr. Bécsi Tamás

8. Gyakorlat SQL. DDL (Data Definition Language) adatdefiníciós nyelv utasításai:

Java VIII. Az interfacei. és az instanceof operátor. Az interfészről általában. Interfészek JAVA-ban. Krizsán Zoltán

Java II. I A Java programozási nyelv alapelemei

PHP II. WEB technológiák. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) PHP II / 19

Adatbázisban tárolt kollekciók

Hogyan használja az OROS online pótalkatrész jegyzéket?

SQL PÉLDATÁR. készült a PTE TTK Iskolai informatika III. kurzus teljesítésére

Adatbázis Rendszerek II. 2. Ea: Gyakorló környezet

Sorosítás (szerializáció) és helyreállítás. 1. Bináris sorosítás és helyreállítás Szükséges névterek Attribútumok. 1.3.

INFORMATIKAI ALAPISMERETEK

Delegátumok C#-ban Krizsán Zoltán iit

Elemi alkalmazások fejlesztése

Java Programozás 4. Gy: Java GUI. Tipper, MVC kalkulátor

C# osztályok. Krizsán Zoltán

Objektumorientált programozás C# nyelven III.

Java és web programozás

Programozás II. 2. Dr. Iványi Péter

Adatbázis Rendszerek II. 2. Gyakorló környezet

Java II. I A Java programozási nyelv alapelemei

Adatbázis rendszerek II. Adatbázis elérése C# kliens programból ADO.NET API-n keresztül

Programozás I. Első ZH segédlet

Egységes és objektumközpontú adatbázis-kezelés (2. rész)

Adatbázis rendszerek SQL nyomkövetés

Tipp A Word makrók kimerítõ tárgyalását megtalálhatjuk az O Reilly gondozásában megjelent Writing Word Macros címû könyvben.

MDAC - Microsoft Data Access Components

Osztályok. construct () destruct() $b=new Book(); $b=null; unset ($b); book.php: <?php class Book { private $isbn; public $title;

3D-s technológiák a játékfejlesztésben UDK bevezetés

A feladat lényege egy felhasználói típusnak a zsák típusnak a megvalósítása.

Segédanyag: Java alkalmazások gyakorlat

Adatbázis-kezelés. Harmadik előadás

VB C++ C# JScript J# Common Language Specification. ADO.NET and XML. Base Class Library. Common Language Runtime. Operating System

BEVEZETÉS Az objektum fogalma

Első lépések. File/New. A mentés helyét érdemes módosítani! Pl. Dokumentumok. Fájlnév: pl. Proba

Vizuális programozás gyakorlat

Java Programozás 8. Gy: Java alapok. Adatkezelő 4.rész

Johanyák Zsolt Csaba: Ugráló gomb oktatási segédlet Copyright 2008 Johanyák Zsolt Csaba

Java Programozás 7. Gy: Java alapok. Adatkezelő 3.rész

HORVÁTH ZSÓFIA 1. Beadandó feladat (HOZSAAI.ELTE) ápr 7. 8-as csoport

B IT MAN 65/1. Adatbázis Rendszerek II. Ellenőrző kérdések APLSQL B IT MAN. v:

abkezel.java import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.sql.*; public class abkezel extends JFrame {

munkafüzet open eseményéhez

Java Programozás 6. Gy: Java alapok. Adatkezelő 2.rész

Java és web programozás

Átírás:

ADATBÁZISKEZELÉS KÖZVETLEN ELÉRÉSSEL II...2 2. FELADAT: RENDEZETT LISTA...2 KÉSZITSÜK EL A FILLSORTEDDATA(INT SCOLUMN) SAJÁT METÓDUST!...2 void CBankView::FillSortedData(int scolumn)... 3 KÉSZITSÜK EL AZ OSZLOPRA KATTINTÁS CALLBACK FÜGGVÉNYÉT!...3 void CBankView::OnColumnclick(NMHDR* pnmhdr, LRESULT* presult)... 3 3. FELADAT: MÓDOSÍTÁS/TÖRLÉS/BESZÚRÁS...4 A CUGYFELDLG OSZTÁLY...4 Párbeszédablak létrehozása...4 Dialogusablak cím beállítása...4 Változók hozzárendelése a vezérl khöz...4 Saját adattagok...5 Saját metódusok...5 void UgyfelDlg::GetUgyfel(Ugyfel &uf)... 5 void UgyfelDlg::SetUgyfel(Ugyfel &uf)... 5 Kulcsmez módosítás engedélyezése / tiltása...6 void UgyfelDlg::EnableRefszam()... 6 void UgyfelDlg::DisableRefszam()... 6 TARTSUK NYILVÁN, MELY OSZLOP SZERINT RENDEZETT A LISTA...6 void CBankView::OnColumnclick(NMHDR* pnmhdr, LRESULT* presult)... 6 void CBankView::OnInitialUpdate()... 6 SZÚRJUNK BE/ MÓDOSÍTSUNK DUPLA KATTINTÁSRA...7 void CBankView::OnDblclk(NMHDR* pnmhdr, LRESULT* presult)... 7 A DIALÓGUSBAN MÓDOSÍTÁSNÁL LEGYEN A REFSZÁM CSAK OLVASHATÓ...8 BOOL UgyfelDlg::OnInitDialog()... 8 A CTRL+DEL BILLENTY LEÜTÉSEKOR TÖRÖLJÜK A KIJELÖLT ADATSORT...8 Az icolumn, irow adattagok felvétele...8 Az OnClick() metódus megadása...8 void CBankView::OnClick(NMHDR* pnmhdr, LRESULT* presult)... 9 A Ctrl+Del billenty kezelése...9 Azonositot rendelünk a tevékenységhez... 9 Az azonosítóhoz hozzárendeljük a Ctrl+DEL billenty t... 9 Az azonosítóhoz hozzárendeljük a callback függvényt... 9 void CBankView::OnDel()... 9 4. FELADAT: STÁTUSZSOR MÓDOSÍTÁSA...10 Új indikátorok elhelyezése az állapotsorban...11 Az indikátorok azonosítójának létrehozása... 11 static UINT indicators[] =... 11 Státuszsor indikátorait kezel callback függvények...11 void CBankView::OnUpdateMessage(CCmdUI *pcmdui)... 12 void CBankView::OnUpdateCount(CCmdUI *pcmdui)... 12 1. oldal

Adatbáziskezelés közvetlen eléréssel II. 2. Feladat: Rendezett lista Módosítsuk az Adatbáziskezelés közvetlen eléréssel I. fejezetben elkészült alkalmazásunkat úgy, hogy egy adott oszlopra kattintva az adott oszlop szerinti rendezettségben jelenjenek meg adataink. Refszám szerint rendezett Cím szerint rendezett Saját jegyzeteim Készitsük el a FillSortedData(int scolumn) saját metódust! Workspace/ClassView/CBankView/(jobb egérfül)/add member function Function type: void Function declaration: FillSortedList(int colnumber) Access: Public BankView.h class CBankView : public CListView // Implementation public: void FillList(); void FillSortedList(int scolumn); virtual ~CBankView(); ; 2. oldal

Másoljuk át a FillList() metódusának belsejét a FillSortedData(int scolumn) metódusába, majd módosítsuk az alábbiak szerint. void CBankView::FillSortedData(int scolumn) Ugyfel uf; CListCtrl* plist= &GetListCtrl(); CBankDoc* pdoc = GetDocument(); switch(scolumn) case 0: pdoc->executequery( select * from ugyfel order by refszam; ); case 1: pdoc->executequery( select * from ugyfel order by nev; ); case 2: pdoc->executequery( select * from ugyfel order by cim; ); case 3: pdoc->executequery( select * from ugyfel order by status; ); pdoc->movefirst(); for (int i=0; i<pdoc->count(); i++) pdoc->getcurrentitem(uf); CString str; str.format( %d,uf.refszam()); plist->insertitem(i,str); plist->setitemtext(i,1,uf.nev()); plist->setitemtext(i,2,uf.cim()); plist->setitemtext(i,3,uf.status()); pdoc->movenext(); Készitsük el az oszlopra kattintás callback függvényét! View/ClassWizard/Message Maps Project: Bank Class name: CBankView Object IDs: CBankView Messages: LVN_COLUMNCLICK Add Functions /Edit code void CBankView::OnColumnclick(NMHDR* pnmhdr, LRESULT* presult) NM_LISTVIEW* pnmlistview = (NM_LISTVIEW*)pNMHDR; // TODO: Add your control notification handler code here GetListCtrl().DeleteAllItems(); FillSortedData(pNMListView->iSubItem); *presult = 0; Forditás/Futtatás 3. oldal

3. Feladat: módosítás/törlés/beszúrás A lista egy sorára duplát kattintva jelenjen meg egy párbeszédablak, amelyben módosíthatjuk az adatsort. Üres sorra duplát kattintva új adatot vihetünk fel. Módosításnál ne engedjük meg a kulcsmez (refszam) módosítását. A CUgyfelDlg osztály Insert/Resource/Dialog/Dialog/New Kattintás jobb egérfüllel a dialógusablakon/properties/general: ID: Caption: IDD_UGYFEL Ügyfél A View/ClassWizard parancs kiadásakor az alábbi üzenet figyelmeztet az új dialógus osztály létrehozására. Az OK választása után: Class information/name: UgyfelDlg // az osztály neve Az osztályvarázsló segítségével adjuk meg az alábbi változókat. Control ID Style Variable name Type Tab order IDC_REFSZAM 1 Right, number refszam int 1 IDC_REFSZAM 1 refszam_ctrl CEdit 1 IDC_NEV left nev CString 2 IDC_CIM left cim CString 3 IDC_STATUS left status CString 4 ÜgyfelDlg.h // Dialog Data //AFX_DATA(UgyfelDlg) enum IDD = IDD_UGYFEL ; CEdit refszam_ctrl; int refszam; CString cim; CString nev; CString status; //AFX_DATA 1 Vegyük észre, hogy az IDC_REFSZAM-hoz érték és control kategóriájú változót is rendeltünk. A refszam_ctrl változót fogjuk felhasználni a mez szerkesztésének engedélyezésére/letiltására. 4. oldal

Az enable_refszam logikai változóban azt jelezzük, hogy engedélyezett-e a refszam mez vagy sem. Workspace/ClassView/UgyfelDlg/Jobb egérfül/add member variable / Variable type: bool Variable name:enable_refszam Access: protected UgyfelDlg.h // Implementation protected: bool enable_refszam; módosítása A párbeszédablakban szerepl SetUgyfel saját metódusokat: adatmez k feltöltésére/lekérdezésére definiáljuk a GetUgyfel és Workspace/ClassView/UgyfelDlg/Jobb egérfül/add member function / Function type: void Function declaration: GetUgyfel(Ugyfel &uf) UgyfelDlg.cpp void UgyfelDlg::GetUgyfel(Ugyfel &uf) uf.setrefszam(refszam); uf.setnev(nev); uf.setcim(cim); uf.setstatus(status); Workspace/ClassView/UgyfelDlg/Jobb egérfül/add member function / Function tylpe: void Function declaration: SetUgyfel(Ugyfel &uf) UgyfelDlg.cpp void UgyfelDlg::SetUgyfel(Ugyfel &uf) refszam = uf.refszam(); nev = uf.nev(); cim = uf.cim();; status = uf.status(); Az Ugyfel.h header fájlt illesszük be a UgyfelDlg.h header fájlba. UgyfelDlg.h // UgyfelDlg.h : header file #include Ugyfel.h 5. oldal

!" A CUgyfelDlg osztályban bevezetünk két további saját metódust. Az EnableRefszam() metódussal engedélyezni tudjuk a párbeszédablakban a refszam módosítását, a DisableRefszam metódussal pedig letiltjuk azt. Az éppen aktuális beállítást az enable_refszam adattagban tároljuk. Workspace/ClassView/UgyfelDlg/Jobb egérfül/add member function / Function type: void Function declaration: EnableRefszam() UgyfelDlg.cpp void UgyfelDlg::EnableRefszam() enable_refszam=true; Workspace/ClassView/UgyfelDlg/Jobb egérfül/add member function / Function type: void Function declaration: DisableRefszam() UgyfelDlg.cpp void UgyfelDlg::DisableRefszam() enable_refszam=false; Tartsuk nyilván, mely oszlop szerint rendezett a lista Vezessük be az scolumn adattagot, melyben tároljuk, melyik oszlop szerint rendezett a listánk. Workspace/ClassView/CBankView/(jobb egérfül)/add member variable Variable type: int Variable name: scolumn Access: Protected Egészítsük ki az OnColumnclick metódust az alábbiak szerint: void CBankView::OnColumnclick(NMHDR* pnmhdr, LRESULT* presult) GetListCtrl().DeleteAllItems(); FillSortedData(pNMListView->iSubItem); scolumn=pnmlistview->isubitem; *presult = 0; Módosítsuk az OnInitialUpdate metódust az alábbiak szerint void CBankView::OnInitialUpdate() CListView::OnInitialUpdate(); // TODO: You may populate your ListView with items by directly accessing // its list control through a call to GetListCtrl(). CBankDoc* pdoc = GetDocument(); pdoc->connectdatabase( Bank ); FillHeader(); scolumn=0; FillSortedData(0); 6. oldal

Szúrjunk be/ módosítsunk dupla kattintásra View/ClassWizard/Message Maps Project:Bank Class name:cbankview Object IDs: CBankView Messages:NM_DBLCLK Add Functions /Edit code void CBankView::OnDblclk(NMHDR* pnmhdr, LRESULT* presult) // TODO: Add your control notification handler code here NM_LISTVIEW* pnmlistview = (NM_LISTVIEW*)pNMHDR; int iitem = pnmlistview->iitem; Ugyfel uf; UgyfelDlg dlg; CString str; if (iitem == -1) uf.setrefszam(0); uf.setnev( ); uf.setcim( ); uf.setstatus( ); dlg.enablerefszam(); bool single_key; single_key=false; while(!single_key) single_key=true; dlg.setugyfel(uf); if (dlg.domodal() == IDOK) dlg.getugyfel(uf); str.format( select * from ugyfel where refszam=%d;, uf.refszam()); GetDocument()->ExecuteQuery(str); if (GetDocument()->Count()>0) single_key=false; MessageBox( Van már ilyen refszám! ); else str.format( insert into ugyfel values ( %d, %s, %s, %s );, uf.refszam(), uf.nev(), uf.cim(), uf.status()); GetDocument()->ExecuteQuery(str); else uf.setrefszam(atoi(getlistctrl().getitemtext(iitem,0))); uf.setnev(getlistctrl().getitemtext(iitem,1)); uf.setcim(getlistctrl().getitemtext(iitem,2)); uf.setstatus(getlistctrl().getitemtext(iitem,3)); dlg.disablerefszam(); dlg.setugyfel(uf); if (dlg.domodal() == IDOK) dlg.getugyfel(uf); str.format( update ugyfel set nev = %s, cim = %s, status = %s where refszam = %d;, uf.nev(), uf.cim(), uf.status(), uf.refszam()); GetDocument()->ExecuteQuery(str); GetListCtrl().DeleteAllItems(); FillSortedData(sColumn); *presult = 0; 7. oldal

Az UgyfelDlg.h header fájlt illesszük be a BankView.h header fájlba. BankView.h #endif // _MSC_VER > 1000 #include UgyfelDlg.h class CBankView : public CListView Forditás/Futtatás A dialógusban módosításnál legyen a refszám csak olvasható View/ClassWizard/Message Maps Project:Bank Class name:ugyfeldlg Object IDs: UgyfelDlg Messages:WM_INITDIALOG Add Functions /Edit code UgyfelDlg.cpp BOOL UgyfelDlg::OnInitDialog() CDialog::OnInitDialog(); // TODO: Add extra initialization here if (enable_refszam) GetDlgItem(IDC_REFSZAM)->EnableWindow(TRUE); else GetDlgItem(IDC_REFSZAM)->EnableWindow(FALSE); return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE A Ctrl+DEL billenty leütésekor töröljük a kijelölt adatsort Felveszünk két adattagot a CListView osztályban és minden kattintásnál beállítjuk a kattintás aktuális pozicióját. # $ %& ' ( BankView.h protected: int icolumn; int irow; int scolumn; #) $*+ ClassWizard / Message Maps Project: Bank Class name: CBankView Object IDs: CBankView Messages: NM_CLICK 8. oldal

Add Function / Edit code void CBankView::OnClick(NMHDR* pnmhdr, LRESULT* presult) // TODO: Add your control notification handler code here NM_LISTVIEW* pnmlistview = (NM_LISTVIEW*)pNMHDR; irow = pnmlistview->iitem; icolumn = pnmlistview->isubitem; *presult = 0; # $,!- Azonositot rendelünk a tevékenységhez View/Resource Symbols/New Name: ID_DEL Value: Fogadjuk el a felajánlott értéket Az azonosítóhoz hozzárendeljük a Ctrl+DEL billenty t Workspace/Resource View/Accelerator/IDR_MAINFRAME/Jobb egérfül 1x/New Accelerator menüpont Az azonosítóhoz hozzárendeljük a callback függvényt ClassWizard / Message Maps Project: Bank Class name: CBankView Object IDs: ID_DEL Messages: COMMAND Add Function / Edit code void CBankView::OnDel() // TODO: Add your command handler code here int refszam = atoi(getlistctrl().getitemtext(irow,0)); CString str; str.format( delete from ugyfel where refszam = %d ;,refszam); GetDocument()->ExecuteQuery(str); GetListCtrl().DeleteAllItems(); FillSortedData(sColumn); 9. oldal

4. Feladat: Státuszsor módosítása Két információt kívánunk elhelyezni az állapotsorban: Hány elem a lista? - ID_INDICATOR_COUNT Hogyan van rendezve? - ID_INDICATOR_MESSAGE. 10. oldal

.!!/ / Az osztályvarázsló az állapotsor kezelését nem ajánlja fel, ezért azt teljes egészében nekünk kell felépíteni. Lista elemszámát jelz indikátor: ID_INDICATOR_COUNT Rendezettséget jelz indikátor: - ID_INDICATOR_MESSAGE. Az indikátorok azonosítójának létrehozása View/Resource Symbols/New Name: ID_INDICATOR_COUNT Value: Fogadjuk el a felajánlott értéket View/Resource Symbols/New Name: ID_INDICATOR_MESSAGE Value: Fogadjuk el a felajánlott értéket Vegyük hozzá a két indikátort a MainFrm programfájlban (MainFrm.cpp) található indicators[] tömbhöz. MainFrm.cpp static UINT indicators[] = ID_SEPARATOR, // status line indicator ID_INDICATOR_COUNT, ID_INDICATOR_MESSAGE, ID_INDICATOR_CAPS, ID_INDICATOR_NUM, ID_INDICATOR_SCRL, ; Adjuk meg a két indikátort leiró default szöveget. Work space//resource View/String Table/Jobb egérfül/string Table/Dupla kattintás Jobb egérfül kattintása a String listára/new String menüpont ID: ID_INDICATOR_MESSAGE Caption: Refszám szerint rendezve Jobb egérfül kattintása a String listára/new String menüpont ID: Caption: ID_INDICATOR_COUNT xxx elem Megjegyzés: A caption-ban megadott szöveg hosszával megegyez (0! (0! Deklaráljuk az eseménykezel prototipusát a BankView.h header fájlban lesz az indikátor terület hossza. BankView.h // Generated message map functions //AFX_MSG(CBankView) afx_msg void OnColumnclick(NMHDR* pnmhdr, LRESULT* presult); afx_msg void OnDblclk(NMHDR* pnmhdr, LRESULT* presult); afx_msg void OnDel(); afx_msg void OnClick(NMHDR* pnmhdr, LRESULT* presult); //AFX_MSG afx_msg void OnUpdateMessage(CCmdUI *pcmdui); afx_msg void OnUpdateCount(CCmdUI *pcmdui); DECLARE_MESSAGE_MAP() ; 11. oldal

Az üzenettáblába vegyük fel az ON_UPDATE_COMMAND_UI makrót. BEGIN_MESSAGE_MAP(CBankView, CListView) //AFX_MSG_MAP(CBankView) ON_NOTIFY_REFLECT(LVN_COLUMNCLICK, OnColumnclick) ON_NOTIFY_REFLECT(NM_DBLCLK, OnDblclk) ON_COMMAND(ID_DEL, OnDel) ON_NOTIFY_REFLECT(NM_CLICK, OnClick) //AFX_MSG_MAP ON_UPDATE_COMMAND_UI(ID_INDICATOR_MESSAGE, OnUpdateMessage) ON_UPDATE_COMMAND_UI(ID_INDICATOR_COUNT, OnUpdateCount) END_MESSAGE_MAP() Adjuk meg az eseménykezel k definícióit a nekik megfelel.cpp fájlban void CBankView::OnUpdateMessage(CCmdUI *pcmdui) pcmdui->enable(); switch(scolumn) case 0: pcmdui->settext( Refszám szerint rendezve ); case 1: pcmdui->settext( Név szerint rendezve ); case 2: pcmdui->settext( Cím szerint rendezve ); case 3: pcmdui->settext( Státusz szerint rendezve ); void CBankView::OnUpdateCount(CCmdUI *pcmdui) pcmdui->enable(); int i = GetListCtrl().GetItemCount(); CString str; str.format( %d elem,i); pcmdui->settext(str); 12. oldal