Tipp-Upload: VB.NET 0354: Datenmodell unterschiedlich präsentiert
von Spatzenkanonier
Über den Tipp
Dieser Tippvorschlag ist noch unbewertet.
Der Vorschlag ist in den folgenden Kategorien zu finden:
- Datenbanken und XML
- Listensteuerelemente
Dem Tippvorschlag wurden folgende Schlüsselwörter zugeordnet:
databinding
Der Vorschlag wurde erstellt am: 27.02.2009 20:30.
Die letzte Aktualisierung erfolgte am 27.02.2009 20:52.
Beschreibung
Hier werden dieselben Daten einmal als Parent-Child-View, einmal als Einzelblatt-View präsentiert.
Da beide Views gleichrangig sind, kann nicht einer von ihnen das Dataset enthalten, sondern dieses muß außerhalb der beiden gehalten werden, auf einem dritten Form.
Es lassen sich also Ansätze einer 3-Schichten-Architektur erkennen:
Datenmodell ist das Dataset, Präsentationsschicht sind die beiden View-Forms, und frmMain ist für Laden und Speichern zuständig - DataAccess-Layer.
Schwierigkeitsgrad |
Verwendete API-Aufrufe: |
Download: |
' Dieser Source stammt von http://www.activevb.de ' und kann frei verwendet werden. Für eventuelle Schäden ' wird nicht gehaftet. ' Um Fehler oder Fragen zu klären, nutzen Sie bitte unser Forum. ' Ansonsten viel Spaß und Erfolg mit diesem Source! ' ' Beachten Sie, das vom Designer generierter Code hier ausgeblendet wird. ' In den Zip-Dateien ist er jedoch zu finden. ' ------------ Anfang Projektgruppe TwoViews.sln ------------ ' ----------- Anfang Projektdatei TwoViews.vbproj ----------- ' -------------- Anfang Datei frmEinzelblatt.vb -------------- Imports TwoViews.DBSampleDataSet, System.io, Microsoft.VisualBasic.ControlChars ' In einer Combobox kann man eine Kategorie auswählen, ein DatagridView zeigt die Artikel-Namen an. ' Auf einem zweiten Panel können die Einzelheiten des im Grid angewählten Artikels editiert werden. Public Class frmEinzelblatt Private Sub Button_Click(ByVal sender As Object, ByVal e As EventArgs) Handles _ btAddNew.Click, btEndEdit.Click, btCancelEdit.Click Select Case True Case sender Is btAddNew Me.ArticleBindingSource.AddNew() Case sender Is btEndEdit Me.ArticleBindingSource.EndEdit() ' Leider muß ArticleGrid explizit aufgefordert werden, den geänderten ' Datensatz auch neu zu zeichnen Me.ArticleGrid.InvalidateRow(ArticleGrid.CurrentCellAddress.Y) Case sender Is btCancelEdit Me.ArticleBindingSource.CancelEdit() End Select End Sub End Class ' --------------- Ende Datei frmEinzelblatt.vb --------------- ' ----------------- Anfang Datei frmMain.vb ----------------- Imports TwoViews.DBSampleDataSet, System.io, Microsoft.VisualBasic.ControlChars Public Class frmMain Private _DataFile As String = "DBSample.DataSet.xml" Private WithEvents _frmParentChild As frmParentChild, _frmEinzelblatt As frmEinzelblatt Private Sub frmMain_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load Reload() End Sub Private Sub MenuItem_Click(ByVal sender As Object, ByVal e As EventArgs) Handles _ ReloadToolStripMenuItem.Click, SaveToolStripMenuItem.Click Select Case True Case sender Is ReloadToolStripMenuItem Reload() Case sender Is SaveToolStripMenuItem Me.DBSampleDataSet.WriteXml(_DataFile) End Select End Sub Private Sub Reload() Me.DBSampleDataSet.Clear() If File.Exists(_DataFile) Then Me.DBSampleDataSet.ReadXml(_DataFile) Else MsgBox(String.Concat("Leider (noch) kein DatenFile vorhanden", Lf, "Sie " & _ "können aber trotzdem fortfahren, und eines anlegen.")) End If End Sub Private Sub ViewForm_Disposed(ByVal sender As Object, ByVal e As EventArgs) Handles _ _frmParentChild.Disposed, _frmEinzelblatt.Disposed Select Case True Case sender Is _frmParentChild _frmParentChild = Nothing ckParentChild.Checked = False Case sender Is _frmEinzelblatt _frmEinzelblatt = Nothing ckEinzelblatt.Checked = False End Select End Sub Private Sub Checkbox_Click(ByVal sender As Object, ByVal e As EventArgs) Handles _ ckParentChild.Click, ckEinzelblatt.Click Dim checked As Boolean = DirectCast(sender, CheckBox).Checked Select Case True Case sender Is ckParentChild If checked Then _frmParentChild = New frmParentChild() _frmParentChild.CategoryBindingSource.DataSource = Me.DBSampleDataSet _frmParentChild.Show() Else _frmParentChild.Close() End If Case sender Is ckEinzelblatt If checked Then _frmEinzelblatt = New frmEinzelblatt() _frmEinzelblatt.CategoryBindingSource.DataSource = Me.DBSampleDataSet _frmEinzelblatt.Show() Else _frmEinzelblatt.Close() End If End Select End Sub End Class ' ------------------ Ende Datei frmMain.vb ------------------ ' -------------- Anfang Datei frmParentChild.vb -------------- ' Parent-Child-View der Relation Category-Article: ' Im linken Grid kann man eine Kategorie anwählen, das rechte Grid zeigt daraufhin die ' dieser Kategorie zugehörigen Artikel an. Beide Tabellen sind vollständig editierbar. Public Class frmParentChild ' (ist komplett im Designer erstellt) End Class ' --------------- Ende Datei frmParentChild.vb --------------- ' ------------ Ende Projektdatei TwoViews.vbproj ------------ ' ------------- Ende Projektgruppe TwoViews.sln -------------
Diskussion
Diese Funktion ermöglicht es, Fragen, die die Veröffentlichung des Tipps betreffen, zu klären, oder Anregungen und Verbesserungsvorschläge einzubringen. Nach der Veröffentlichung des Tipps werden diese Beiträge nicht weiter verlinkt. Allgemeine Fragen zum Inhalt sollten daher hier nicht geklärt werden.
Folgende Diskussionen existieren bereits
Um eine Diskussion eröffnen zu können, müssen sie angemeldet sein.