Re: DataView und DataSet
From: Peter Fleischer (peter.fleischer_nospam__at_gmx.de)
Date: 06/05/04
- Next message: Frank Jeseit: "Re: CrystalReport aus einer Ressource laden"
- Previous message: Peter Fleischer: "Re: SQL-Frage"
- In reply to: Uwe Kühne: "DataView und DataSet"
- Next in thread: Uwe Kühne: "Re: DataView und DataSet"
- Reply: Uwe Kühne: "Re: DataView und DataSet"
- Messages sorted by: [ date ] [ thread ]
Date: Sat, 5 Jun 2004 18:29:01 +0200
Uwe Kühne wrote:
...
> Ich binde meine Controls (Textfelder) an eine Tabelle innerhalb eines
> DataSet.
> Nun suche ich in einer DataView, die auf der entsprechenden Tabelle
> aufbaut, nach einem Datensatz:
>
> Dim oDView As New DataView(oDSet.Tables("tblKontakte"))
> oDView.Sort = "KNachname"
> Dim intErg As Integer = oDView.Find(Me.txtFind.Text.Trim)
>
> Wie synchronisiere ich nun aber mein BindingContext mit der Position
> im DataView?
Uwe,
und warum machst du dir den Stress und nutzt unterschiedliche DataViews für
die Anzeige und für die Suche. Nimm einfach die gleiche Sicht und du hast
keine Probleme beim Synchronisieren.
> Es kann ja sein, dass mein BindingContext des Formulars
> anhand der ID des DAtensatzes sortiert ist, meine View (wie hier)
> nach dem Nachname... Weise ich nun intErg (das ja die Position des
> Datensatzes enthält) der Position-Eigenschaft des BindingContext zu,
> so bewegt der sich ja auch eine ganz andere Stelle, als ich möchte,
> weil er nach einem anderen Schlüssel sortiert ist.
Nimm doch den gleichen BindingManager, der auch bei der Sicht genutzt wird
und es gibt keine Dofferenzen.
> Kann mir jemand sagen, wie ich das handhaben muss?
Da sgibt es viele Möglichkeiten und die Auswahl des optimalen Weges hängt
von deiner Aufgabenstellung ab. Der einfachste Weg ist, mit allen Controls
auf die DataSource mit dem gleichen BindingContext zuzugreifen und bei
Suchoperationen auch die Sichten zu nutzen, mit denen die gebundenen
Controls arbeiten. D.H. entweder selbst DataView erstellen und binden oder
über den BindingManger sich den Zeiger auf die implizit erzeugte Sicht zu
besorgen.
...
> PS: Ich habe leider nirgendwo ein Beispiel gefunden, das ein Formular
> erstellt,
Eine Beispielanwednung soll eine Formulerklasse ableiten? Das ist schon
etwas komplexer.
Nimm besser den Designer aus den VS und erzeuge die Ableiting im
Entwurfsmodus - einfach
deiner WindowsApplication ein neues Element vom Typ "Formular" hinzufügen.
> mit dem man auf eine DB zugreift,
Dazu schreibst du am besten eine eigen DataSource-Klasse, die ein
Connection-Objekt und Command-Objekt erstellt und weiter entsprechend
Konzept eine eigene Objektklasse mit dem DataReader füllt oder eine
DataTable mit dem DataAdapter füllt. Beispiele dazu gibt es zu Hauf in der
MSDN.
> die Felder darauf bindet
Entweder du nutzt die DataSource-Eigenschaft und entsprechend dem Typ der
DataSource und dem Typ des Controls weitere Eigenschaften wie DataMember und
z.B. DisplayMember. Dazu solltest du bei den betreffendne Controls
nachschauen.
> und dann mal die Operationen suchen, einfügen, ändern, löschen,
> bewegen durchführt.
Da es viele Wege gibt, solltest du mal etwas genauer beschreiben, wie die
Lösung aussehen soll. Wenn du beispielsweise nur ein DataGríd an eine
DataView gebunden hast, kannst du alle smit dem Grid machen und brauchst aus
dem Update keinen weiteren Codeausschnitt.
> Hat jemand so ein Beispiel?
Schau dir mal die 101-Beispiele von MS an. Da gibt es viele Anregungen.
> In der OH gibt es
> nichts in der Art,
Da gibt es aber Beipiele in Hülle und Fülle, nur keine vollständigen
Lösungen, da jedes Aufgabe anders geartet sein kann.
> in den Büchern die ich habe, werden diese Themen
> nur ansatzweise dargestellt.....
Da hast du bestimmt die falschn Bücher:-)
Hier mal ein Beispiel mit einem DataGrid:
Public Class frmDataTable
Inherits System.Windows.Forms.Form
#Region " Vom Windows Form Designer generierter Code "
Public Sub New()
MyBase.New()
' Dieser Aufruf ist für den Windows Form-Designer erforderlich.
InitializeComponent()
' Initialisierungen nach dem Aufruf InitializeComponent() hinzufügen
End Sub
' Die Form überschreibt den Löschvorgang der Basisklasse, um Komponenten
zu bereinigen.
Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
If disposing Then
If Not (components Is Nothing) Then
components.Dispose()
End If
End If
MyBase.Dispose(disposing)
End Sub
' Für Windows Form-Designer erforderlich
Private components As System.ComponentModel.IContainer
'HINWEIS: Die folgende Prozedur ist für den Windows Form-Designer
erforderlich
'Sie kann mit dem Windows Form-Designer modifiziert werden.
'Verwenden Sie nicht den Code-Editor zur Bearbeitung.
Friend WithEvents DataGrid1 As System.Windows.Forms.DataGrid
Friend WithEvents Button1 As System.Windows.Forms.Button
Friend WithEvents Button2 As System.Windows.Forms.Button
Friend WithEvents Button3 As System.Windows.Forms.Button
Friend WithEvents Button4 As System.Windows.Forms.Button
Friend WithEvents Button5 As System.Windows.Forms.Button
Friend WithEvents Button6 As System.Windows.Forms.Button
Friend WithEvents Button7 As System.Windows.Forms.Button
Friend WithEvents Button8 As System.Windows.Forms.Button
Friend WithEvents Label1 As System.Windows.Forms.Label
Friend WithEvents TextBox1 As System.Windows.Forms.TextBox
Friend WithEvents ComboBox1 As System.Windows.Forms.ComboBox
Friend WithEvents Button9 As System.Windows.Forms.Button
<System.Diagnostics.DebuggerStepThrough()> Private Sub
InitializeComponent()
Me.DataGrid1 = New System.Windows.Forms.DataGrid
Me.Button1 = New System.Windows.Forms.Button
Me.Button2 = New System.Windows.Forms.Button
Me.Button3 = New System.Windows.Forms.Button
Me.Button4 = New System.Windows.Forms.Button
Me.Button5 = New System.Windows.Forms.Button
Me.Button6 = New System.Windows.Forms.Button
Me.Button7 = New System.Windows.Forms.Button
Me.Button8 = New System.Windows.Forms.Button
Me.Label1 = New System.Windows.Forms.Label
Me.TextBox1 = New System.Windows.Forms.TextBox
Me.ComboBox1 = New System.Windows.Forms.ComboBox
Me.Button9 = New System.Windows.Forms.Button
CType(Me.DataGrid1,
System.ComponentModel.ISupportInitialize).BeginInit()
Me.SuspendLayout()
'
'DataGrid1
'
Me.DataGrid1.Anchor = CType((((System.Windows.Forms.AnchorStyles.Top Or
System.Windows.Forms.AnchorStyles.Bottom) _
Or System.Windows.Forms.AnchorStyles.Left) _
Or System.Windows.Forms.AnchorStyles.Right),
System.Windows.Forms.AnchorStyles)
Me.DataGrid1.DataMember = ""
Me.DataGrid1.HeaderForeColor = System.Drawing.SystemColors.ControlText
Me.DataGrid1.Location = New System.Drawing.Point(8, 8)
Me.DataGrid1.Name = "DataGrid1"
Me.DataGrid1.Size = New System.Drawing.Size(512, 488)
Me.DataGrid1.TabIndex = 0
'
'Button1
'
Me.Button1.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or
System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.Button1.Location = New System.Drawing.Point(528, 16)
Me.Button1.Name = "Button1"
Me.Button1.Size = New System.Drawing.Size(128, 23)
Me.Button1.TabIndex = 1
Me.Button1.Text = "Bindung an Daten"
'
'Button2
'
Me.Button2.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or
System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.Button2.Location = New System.Drawing.Point(528, 48)
Me.Button2.Name = "Button2"
Me.Button2.Size = New System.Drawing.Size(128, 23)
Me.Button2.TabIndex = 2
Me.Button2.Text = "Neu erlauben/sperren"
'
'Button3
'
Me.Button3.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or
System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.Button3.Location = New System.Drawing.Point(528, 80)
Me.Button3.Name = "Button3"
Me.Button3.Size = New System.Drawing.Size(128, 23)
Me.Button3.TabIndex = 3
Me.Button3.Text = "Edit erlauben/sperren"
'
'Button4
'
Me.Button4.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or
System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.Button4.Location = New System.Drawing.Point(528, 112)
Me.Button4.Name = "Button4"
Me.Button4.Size = New System.Drawing.Size(128, 23)
Me.Button4.TabIndex = 4
Me.Button4.Text = "Löschen erlauben/sperren"
'
'Button5
'
Me.Button5.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or
System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.Button5.Location = New System.Drawing.Point(528, 144)
Me.Button5.Name = "Button5"
Me.Button5.Size = New System.Drawing.Size(128, 23)
Me.Button5.TabIndex = 5
Me.Button5.Text = "erster Datensatz"
'
'Button6
'
Me.Button6.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or
System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.Button6.Location = New System.Drawing.Point(528, 176)
Me.Button6.Name = "Button6"
Me.Button6.Size = New System.Drawing.Size(128, 23)
Me.Button6.TabIndex = 6
Me.Button6.Text = "nächster Datensatz"
'
'Button7
'
Me.Button7.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or
System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.Button7.Location = New System.Drawing.Point(528, 208)
Me.Button7.Name = "Button7"
Me.Button7.Size = New System.Drawing.Size(128, 23)
Me.Button7.TabIndex = 7
Me.Button7.Text = "verheriger Datensatz"
'
'Button8
'
Me.Button8.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or
System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.Button8.Location = New System.Drawing.Point(528, 240)
Me.Button8.Name = "Button8"
Me.Button8.Size = New System.Drawing.Size(128, 23)
Me.Button8.TabIndex = 8
Me.Button8.Text = "letzter Datensatz"
'
'Label1
'
Me.Label1.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or
System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.Label1.Location = New System.Drawing.Point(528, 272)
Me.Label1.Name = "Label1"
Me.Label1.Size = New System.Drawing.Size(128, 16)
Me.Label1.TabIndex = 9
Me.Label1.Text = "Label1"
'
'TextBox1
'
Me.TextBox1.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or
System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.TextBox1.Location = New System.Drawing.Point(528, 328)
Me.TextBox1.Name = "TextBox1"
Me.TextBox1.Size = New System.Drawing.Size(128, 20)
Me.TextBox1.TabIndex = 10
Me.TextBox1.Text = "TextBox1"
'
'ComboBox1
'
Me.ComboBox1.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or
System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.ComboBox1.Location = New System.Drawing.Point(528, 360)
Me.ComboBox1.Name = "ComboBox1"
Me.ComboBox1.Size = New System.Drawing.Size(128, 21)
Me.ComboBox1.TabIndex = 11
Me.ComboBox1.Text = "ComboBox1"
'
'Button9
'
Me.Button9.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or
System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.Button9.Location = New System.Drawing.Point(528, 296)
Me.Button9.Name = "Button9"
Me.Button9.Size = New System.Drawing.Size(128, 23)
Me.Button9.TabIndex = 12
Me.Button9.Text = "Daten ünbernehmen"
'
'frmDataTable
'
Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
Me.ClientSize = New System.Drawing.Size(664, 510)
Me.Controls.Add(Me.Button9)
Me.Controls.Add(Me.ComboBox1)
Me.Controls.Add(Me.TextBox1)
Me.Controls.Add(Me.Label1)
Me.Controls.Add(Me.Button8)
Me.Controls.Add(Me.Button7)
Me.Controls.Add(Me.Button6)
Me.Controls.Add(Me.Button5)
Me.Controls.Add(Me.Button4)
Me.Controls.Add(Me.Button3)
Me.Controls.Add(Me.Button2)
Me.Controls.Add(Me.Button1)
Me.Controls.Add(Me.DataGrid1)
Me.Name = "frmDataTable"
Me.Text = "DataGrid-Bindung an DAtaTable"
CType(Me.DataGrid1, System.ComponentModel.ISupportInitialize).EndInit()
Me.ResumeLayout(False)
End Sub
#End Region
Dim myDS As DataTable
Dim myCM As CurrencyManager
' Bindung an DataTable
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
Dim DS As New clsDS1
myDS = DS.DT01
DataGrid1.DataSource = myDS
myCM = CType(Me.BindingContext(myDS), CurrencyManager)
AddHandler myCM.PositionChanged, AddressOf Datensatzwechsel
TextBox1.DataBindings.Add("Text", myDS, "Field1")
ComboBox1.DataSource = myDS
ComboBox1.DisplayMember = "Field1"
End Sub
' Neu erlauben / verbieten
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button2.Click
myDS.DefaultView.AllowNew = Not myDS.DefaultView.AllowNew
End Sub
' Edit erlauben / verbieten
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button3.Click
myDS.DefaultView.AllowEdit = Not myDS.DefaultView.AllowEdit
End Sub
' Löschen erlauben / verbieten
Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button4.Click
myDS.DefaultView.AllowDelete = Not myDS.DefaultView.AllowDelete
End Sub
' erster Datensatz
Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button5.Click
myCM.Position = 0
End Sub
' nächster Datensatz
Private Sub Button6_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button6.Click
myCM.Position += 1
End Sub
' vorheriger Datensatz
Private Sub Button7_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button7.Click
myCM.Position -= 1
End Sub
' letzter Datensatz
Private Sub Button8_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button8.Click
myCM.Position = myDS.Rows.Count - 1
End Sub
' Daten übernehmen
Private Sub Button9_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button9.Click
myCM.EndCurrentEdit()
End Sub
' Beim Datensatzwechsel Anzeige aktualisieren
Private Sub Datensatzwechsel(ByVal sender As Object, ByVal e As
System.EventArgs)
Label1.Text = myCM.Position.ToString
Label1.Text &= " von "
Label1.Text &= myDS.Rows.Count - 1
End Sub
End Class
- Next message: Frank Jeseit: "Re: CrystalReport aus einer Ressource laden"
- Previous message: Peter Fleischer: "Re: SQL-Frage"
- In reply to: Uwe Kühne: "DataView und DataSet"
- Next in thread: Uwe Kühne: "Re: DataView und DataSet"
- Reply: Uwe Kühne: "Re: DataView und DataSet"
- Messages sorted by: [ date ] [ thread ]
Relevant Pages
|