Datensatz aus einer ListCtrl auslesen

Plattformunabhängige GUIs mit wxWidgets.
Antworten
Spleen
User
Beiträge: 16
Registriert: Donnerstag 2. Juli 2009, 09:41

Hey,

habe mal wieder ein Problem bei dem ich Eure hilfe bräuchte.

Ich möchte ein Programm schreiben welches eine Datenbank in einer "ListCtrl" mit mehreren "Columns" (z.B. Titel, Regisseur) ausgibt. Und wenn ich eine von den Zeilen anklicke, sollen die einzelnen Werte im gleichen Fenster in dafür vorgesehen "TextCtrl"s angezeigt werden.

Bei der "ListCtrl" habe ich als Event "wx.EVT_LIST_ITEM_SELECTED".
Wie ich bei "TextCtrl" Werte einfügen kann habe ich auch schon heraus gefunden: "SetValue()"

Die Frage ist wie ich es schaffe die Werte eines einzelnen Datensatzs durchs anklicken zu erhalten. Also wahrscheinlich als String oder Liste mit allen werten des Datensatzes.

Noch kurz die Quellcode-Ausschnitte:

Erstellen vom Frame und "ListCtrl"

Code: Alles auswählen


def _init_ctrls(self, prnt):
        # generated method, don't edit
        wx.Frame.__init__(self, id=wxID_FRAME1, name='', parent=prnt,
              pos=wx.Point(189, 35), size=wx.Size(1288, 1058),
              style=wx.DEFAULT_FRAME_STYLE, title='Filmarchiv')
        
        self.listCtrl_Film_Tabelle = wx.ListCtrl(id=wxID_FRAME1LISTCTRL_FILM_TABELLE,
              name='listCtrl_Film_Tabelle', parent=self.panel1, pos=wx.Point(5,
              30), size=wx.Size(1270, 602), style=wx.LC_REPORT)
        self.listCtrl_Film_Tabelle.SetLabel('')
        self.listCtrl_Film_Tabelle.Center(wx.HORIZONTAL)
        self.listCtrl_Film_Tabelle.SetHelpText('')
        self._init_coll_listCtrl_Film_Tabelle_Columns(self.listCtrl_Film_Tabelle)
        self.listCtrl_Film_Tabelle.Bind(wx.EVT_LIST_ITEM_SELECTED,
              self.OnListCtrl_Film_TabelleListItemSelected,
              id=wxID_FRAME1LISTCTRL_FILM_TABELLE)

Erstellen der "Columns":

Code: Alles auswählen

def _init_coll_listCtrl_Film_Tabelle_Columns(self, parent):
        # generated method, don't edit

        parent.InsertColumn(col=0, format=wx.LIST_FORMAT_LEFT, heading='Titel',
              width=-1)
Erstellen von "TextCtrl":

Code: Alles auswählen

self.textCtrl_Titel = wx.TextCtrl(id=wxID_FRAME1TEXTCTRL_TITEL,
              name='textCtrl_Titel', parent=self.panel1, pos=wx.Point(90, 725),
              size=wx.Size(400, 21), style=0, value="")
Die Methode welche das Event ausführt:

Code: Alles auswählen

def OnListCtrl_Film_TabelleListItemSelected(self, event):
      
        j = self.listCtrl_Film_Tabelle.#Platzhalter#
        self.textCtrl_Titel.SetValue(j)
Ich vermute mal, dass es eine Methode (#Platzhalter#) gibt welche mir den angeklickten Datensatz zurückgibt. Aber ich bin bis jetzt noch nicht daruf gestoßen. Die Sachen die ich gefunden habe wie "GetItem()" brauchen zur übergabe eine ID des Datensatzes aber die habe ich ja nicht.

Danke schon mal im voraus.
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Spleen hat geschrieben:

Code: Alles auswählen

def OnListCtrl_Film_TabelleListItemSelected(self, event):
      
        j = self.listCtrl_Film_Tabelle.#Platzhalter#
        self.textCtrl_Titel.SetValue(j)
Ich vermute mal, dass es eine Methode (#Platzhalter#) gibt welche mir den angeklickten Datensatz zurückgibt. Aber ich bin bis jetzt noch nicht daruf gestoßen. Die Sachen die ich gefunden habe wie "GetItem()" brauchen zur übergabe eine ID des Datensatzes aber die habe ich ja nicht.
Hinten im Gedächtnis gekramt und ungetestet: GetFirstSelected().

Gruß,
Matthias
Spleen
User
Beiträge: 16
Registriert: Donnerstag 2. Juli 2009, 09:41

Danke, aber dadurch erhalte ich nur die Position des Datensatzes in der Tabelle. Könnte zwar dadurch auch auf die Position innerhalb der Liste kommen in der sich die Werte befinden. Aber wenn ich die Datensätze nach bestimmten Werten sortiere verändert sich die Position der Datensätze in der Tabelle ja.

Bräuchte eine Lösung in der ich den ganzen Datensatz oder nur ein Teil davon erhalte.
Spleen
User
Beiträge: 16
Registriert: Donnerstag 2. Juli 2009, 09:41

Hab es jetzt hinbekommen.

Mit GetFirstSelected() erhalte ich eine id und dieses benutze ich bei GetItemText(). Erhalte zwar nur den ersten Wert des Datensatzes zurück aber das reicht, da er ja sowieso eine Nr. ist. Wo dort ist es ein leichtes die anderen Werte zu bekommen.

Danke nochmals.
Antworten