Avatar billede ggt Nybegynder
20. marts 2003 - 13:49 Der er 5 kommentarer og
1 løsning

List Box

Hej

Har et udtræk fra en database, der bliver vist i en list boks i et MFC prog! jeg kunne tænke mig, at hvis man f.eks markere eller
klikker på en række, så skulle man kunne lave et nyt udtræk
fra databasen med oplysningerne fra den valgte række fra det første udtræk!
Avatar billede jakobdo Ekspert
20. marts 2003 - 15:42 #1
Nu ved jeg ikke lige hvordan du får dataen ind i din listbos, men antager at du gør noget ala følgende:

SELECT * FROM DATABASE;

Så fylder du al data ind i listbox!
Når du så markere en/eller flere så kører du en nye QUERY

SELECT * FROM DATABASE WHERE ID = LISTBOX.SELECTED.ID();

Nu ved jeg jo ikke om du har indekseret dine elementer i listboxen med ID eller navn...

Men håber det gav dig en ide til hvordan det måske kunne laves...
Avatar billede garlan Nybegynder
20. marts 2003 - 16:10 #2
Jeg fylder min list box på føglende måde

åbner en forbindelse til databasen!
og derefter MoveNext med en while løkke

sætter så dataene ind med under stående kode!

for(int nRow=0; nRow<1; ++nRow)
{
line = 0;
m_SHOWIT.InsertItem(nRow, "");
m_SHOWIT.SetItemText(nRow, line++, strColumn = itoa(line,strtmp,10));
m_SHOWIT.SetItemText(nRow, line++, strColumn = pBruger->m_Brugernavn);
m_SHOWIT.SetItemText(nRow, line++, strColumn = pBruger->m_Fornavn);
m_SHOWIT.SetItemText(nRow, line++, strColumn = pBruger->m_Efternavn);
}

Det var så meningen at man kan klikke på f.eks. en bruger få mere info om personen ved at lave et nyt udtræk fra databasen med oplysningerne fra det første udtræk!
Avatar billede jakobdo Ekspert
20. marts 2003 - 22:10 #3
Er denne linie: m_SHOWIT.SetItemText(nRow, line++, strColumn = itoa(line,strtmp,10)); den linie hvor der sættes et nummer ind eller noget??

Kan du ikke under ListBox_OnCLick_Event()
Skrive noget SQL, hvor den finder data om den person som er markeret?

F.eks:
SELECT * FROM DATABASE WHERE Brugeravn = m_Brugernavn; eller noget i den stil...
Avatar billede jpk Nybegynder
21. marts 2003 - 09:54 #4
Det er ikke en listbox du bruger, det er en list kontrol (CListCtrl)...

Når du indsætter dine records, kan du kalde SetItemData, for hver record, med databaserecordens id, sådan:

for(int nRow=0; nRow<1; ++nRow)
{
line = 0;
m_SHOWIT.InsertItem(nRow, "");
m_SHOWIT.SetItemData(nRow, pBruger->m_Id);
m_SHOWIT.SetItemText(nRow, line++, strColumn = itoa(line,strtmp,10));
m_SHOWIT.SetItemText(nRow, line++, strColumn = pBruger->m_Brugernavn);
m_SHOWIT.SetItemText(nRow, line++, strColumn = pBruger->m_Fornavn);
m_SHOWIT.SetItemText(nRow, line++, strColumn = pBruger->m_Efternavn);
}

Så skal du lave en OnClick handler, således:
void CYourClass::OnClickList(NMHDR* pNMHDR, LRESULT* pResult)
{
    // Get the current mouse location and convert it to client coordinates
    DWORD pos = GetMessagePos();
    CPoint pt(LOWORD(pos), HIWORD(pos));
    m_List.ScreenToClient(&pt);

    // Get indexes of the first and last visible items in listview control
    int index = m_List.GetTopIndex();
    int last_visible_index = index + m_List.GetCountPerPage();
    if(last_visible_index > m_List.GetItemCount())
        last_visible_index = m_List.GetItemCount();

    // Loop until number visible items has been reached.
    while(index <= last_visible_index)
    {
        // Get the bounding rectangle of an item. If the mouse
        // location is within the bounding rectangle of the item,
        // you know you have found the item that was being clicked.
        CRect r;
        m_List.GetItemRect(index, &r, LVIR_BOUNDS);
        if(r.PtInRect(pt))
        {
            int nId = m_List.GetItemData(index); // Her har du ID'et på din record
            // Lav en ny SELECT fra DB...
            break;
        }

        // Get the next item in listview control.
        index++;
    }

    *pResult = 0;
}
Avatar billede ggt Nybegynder
21. marts 2003 - 10:19 #5
m_SHOWIT.SetItemData(nRow, pBruger->m_Id); databaserecordens id!
er det et id felt man opretter i tabellen eller der det noget
man tilføjer i programmer?
Avatar billede jpk Nybegynder
21. marts 2003 - 10:20 #6
Din tabel har jo et id for hver record, det er det tal...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester