vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Zippen wie die Profis!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

Fragen & Antworten rund um sev-Komponenten
un nochmal DataGrid2 und ComboList  
Autor: Reinski
Datum: 24.09.05 18:47

Hallo nochmal,
meine Probleme mit der ComboList sind doch etwas umfassender, weshalb ich ein flexibles Demo-Projekt zum Nachvollziehen erstellt habe.
Das Grid zeigt Menschen mit Ihrem Lieblingshaustier an, wobei jeder Mensch ein Lieblingshaustier haben kann, muss aber nicht!! Der Eintrag 'Ich hasse Tiere!' zeigt letzteres dann an.
Die Datenbank besteht aus zwei Tabellen:
MENSCH mit MenschID (Autowert & PrimaryKey), Name (Text), LieblingsHaustierID (Zahl) und TIER mit TierID (Autowert & PrimaryKey), TierName (Text).
Es besteht eine 1:n Beziehung mit referentieller Integrität zwischen Tier.TierID und Mensch.LieblingsHaustierID.

Das Demo-Projekt umfasst den Verweis auf DAO3.6, und ein Form mit den Controls Grid1 (SevDataGrid2), Check1 (CheckBox), Command1 und Command2(CommandButtons).
Dazu der Code:
Option Explicit
 
Const db_file As String = "db1.mdb"
Const txtNoKey As String = "Ich hasse Tiere!!!"
 
Dim DB As DAO.Database
Dim TierRS As DAO.Recordset
 
Private Sub Form_Load()
    On Error GoTo ErrorHandler
    'Controls vorbereiten
    Check1.Caption = "Mit ComboBox..."
    Command1.Caption = "AddNew()"
    Command2.Caption = "Show Record..."
    'Datenbank öffnen
    Set DB = DBEngine.OpenDatabase(db_file)
    'Form-globalen Recordset auf die MasterTabelle öffnen
    Set TierRS = DB.OpenRecordset("Tier", dbOpenSnapshot)
    'Grid einrichten und Recordset auf DetailTabelle zuweisen
    With sevGrid1
        .DataMode = Mode_Recordset
'        .SaveNullValues = False
        .AllowEdit = True
        Set .Recordset = DB.OpenRecordset("SELECT * FROM Mensch;")
        .Columns("LieblingsHaustierID").SaveEmptyValueAsNullValue = True
        .Columns("LieblingsHaustierID").Width = 1500
        .Refresh
    End With
    'ComboBox aktivieren
    Check1.Value = 1
    Exit Sub
ErrorHandler:
    MsgBox Err.Number & ": " & Err.Description, vbCritical, "Fehler", _
      Err.HelpFile, Err.HelpContext
End Sub
 
Private Sub Form_Unload(Cancel As Integer)
    On Error Resume Next
    TierRS.Close
    DB.Close
End Sub
 
Private Sub Check1_Click()
    'Umschalten zwischen ComboBox und keiner ComboBox
    If Check1.Value = 1 Then
        'Aktiviere ComboBox
        sevGrid1.Columns("LieblingsHaustierID").ColType = TYPE_COMBOLIST
        sevGrid1.Refresh    'nötig um die RowLoaded-Ereignisse auszulösen
    Else
        'Deaktiviere ComboBox
        sevGrid1.Columns("LieblingsHaustierID").ColType = TYPE_TEXT
        sevGrid1.Refresh
    End If
End Sub
 
Private Sub Command1_Click()
    'Neuen Datensatz einfügen
    sevGrid1.AddNew
End Sub
 
Private Sub Command2_Click()
    Dim fld As DAO.Field
    Dim msgtxt As String
 
    'Inhalt des Datensatzes zur Kontrolle ausgeben
    For Each fld In sevGrid1.Recordset.Fields
        msgtxt = msgtxt & fld.Name & ": "
        If Not IsNull(fld.Value) Then
            If fld.Type = dbText Then
                msgtxt = msgtxt & "'" & fld.Value & "'"
            Else
                msgtxt = msgtxt & fld.Value
            End If
        Else
            msgtxt = msgtxt & "NULL"
        End If
        msgtxt = msgtxt & vbLf
    Next fld
    MsgBox msgtxt
End Sub
 
Private Sub sevGrid1_ErrorAddNew(ByVal nError As Long, ByVal sDescription As _
  String)
    MsgBox nError & ": " & sDescription
 
End Sub
 
Private Sub sevGrid1_ErrorUpdate(ByVal nRow As Long, ByVal nCol As Long, ByVal _
  sText As String, ByVal nError As Long, ByVal sDescription As String)
    MsgBox nError & ": " & sDescription
End Sub
 
Private Sub sevGrid1_FillComboBox(ByVal nRow As Long, ByVal nCol As Long, _
  oComboBox As sevDataGrid2.EditComboBox)
    'Werte aus der Tier-Tabelle füllen
    With oComboBox
        Set .Recordset = DB.OpenRecordset("SELECT '' AS TierID, '" & txtNoKey & _
          "' AS TierName FROM Tier UNION SELECT TierID, TierName FROM Tier;")
        .ColVisible("TierID") = False
        .ColVisible("TierName") = True
        .BoundColumn = 1
        .DisplayColumn = 2
    End With
End Sub
 
Private Sub sevGrid1_RowLoaded(ByVal nRow As Long, Item As _
  sevDataGrid2.ListItem)
    If Check1.Value = 1 Then
        'Numerischen Schlüssel durch den Text ersetzen
        If Item.CellText("LieblingsHaustierID") = "" Then
            'Kein Fremdschlüssel zugewiesen -> Leer anzeigen
            Item.CellText("LieblingsHaustierID") = txtNoKey
        Else
            TierRS.FindFirst "TierID = " & Item.CellText("LieblingsHaustierID")
            If TierRS.EOF Then
                Item.CellText("LieblingsHaustierID") = ""
            Else
                Item.CellText("LieblingsHaustierID") = TierRS.Fields( _
                  "TierName").Value
            End If
        End If
    End If
End Sub
Rest folgt...
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
un nochmal DataGrid2 und ComboList 776Reinski24.09.05 18:47
Re: un nochmal DataGrid2 und ComboList 493Reinski24.09.05 18:55
Re: un nochmal DataGrid2 und ComboList 458ModeratorDieter25.09.05 09:30
Re: un nochmal DataGrid2 und ComboList 582Reinski25.09.05 19:27

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2025 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel