Textboxen an Datagridview binden übersteht Wechsel der Datasource nicht

03/11/2009 - 10:50 von Thomas Hübner | Report spam
Hi NG,

Bei meinem kleinen Projekt bin ich wieder auf eine Klippe gestoßen.
Nachdem ich nun mit Eurer Hilfe die Relation im Dataset so halbwegs
begriffen habe, habe ich ein Bindungsproblem.

Ich habe einen Datagridview "MainGrid" an den 4 Textboxen gebunden
werden sollen. Das funktioniert auch mit _einer_ Datasource sehr gut.
Diesen Datagridview möchte ich aber nun zwischen 2 Datasources hin und
herschalten können. Wechsle ich auf die zweite Datasource
("FavoritesDataView") funktioniert allerdings die Bindung nicht.
Wechsle ich wieder zurück auf die erste Datasource ("MainDataView")
klappt die Bindung wieder. Die Felder sind in beiden Dataviews
identisch mit Ausnahme zweier zusàtzlicher Felder in
FavoritesDataView. In FavoritesDataView sind die Felder über eine
Relation "erzeugt" liegt es daran?

Oder habe ich etwas ganz fundamentales wieder mal nicht verstanden :-)

Folgender Code wird benutzt:

1. Init des MainDataView
2. Init des FavoritesDataView
3. Der Switch zwischen den Sources

Private Sub Init_MainData()

'Datenbank laden
Dim strSQL As String = String.Format("SELECT TYP, ID, NAME,
HOTKEY, DESCRIPTION, CONTENT, PARENT_ID, CREATOR, EDITOR, MODIFIED
FROM NEW")
DataAdapter = New OleDbDataAdapter(strSQL, conn)

'Dataset füllen
DataAdapter.MissingSchemaAction MissingSchemaAction.AddWithKey
DataAdapter.Fill(MainDataSet, "data")

'Dataview Init
MainDataView = New DataView
With MainDataView
.Table = MainDataSet.Tables("data")
.RowStateFilter = DataViewRowState.None
End With

SwitchMainGridViews(MainGridViews.Data)

End Sub

Private Sub Init_FavoritesData()
'Datenbank laden
Dim strSQL As String = String.Format("SELECT UID, FAVID FROM
favorites WHERE UID = {0}", oUser.UserId)
FavoritesAdapter = New OleDbDataAdapter(strSQL, conn)

'Dataset füllen
FavoritesAdapter.Fill(MainDataSet, "favorites")
Dim FavoritesCommandBuilder As New OleDbCommandBuilder
(FavoritesAdapter)

'Create Relation
MainDataSet.Relations.Add("rel", MainDataSet.Tables
("data").Columns("ID"), MainDataSet.Tables("favorites").Columns
("FAVID"))

'add fields
With MainDataSet.Tables("favorites").Columns

.Add("TYP", GetType(String), "Parent(rel).TYP")
.Add("ID", GetType(String), "Parent(rel).ID")
.Add("NAME", GetType(String), "Parent(rel).NAME")
.Add("HOTKEY", GetType(String), "Parent(rel).HOTKEY")
.Add("DESCRIPTION", GetType(String), "Parent
(rel).DESCRIPTION")
.Add("CONTENT", GetType(String), "Parent(rel).CONTENT")
.Add("PARENT_ID", GetType(String), "Parent
(rel).PARENT_ID")
.Add("CREATOR", GetType(String), "Parent(rel).CREATOR")
.Add("EDITOR", GetType(String), "Parent(rel).EDITOR")
.Add("MODIFIED", GetType(String), "Parent(rel).MODIFIED")

End With

'Dataview Init
FavoritesDataView = New DataView
With FavoritesDataView
.Table = MainDataSet.Tables("favorites")
End With

End Sub

''' <summary>
''' Switches the Dataview behind th MainDatagridView
''' </summary>
''' <param name="view">Enumerator "Data" or "Favorites"</param>
''' <remarks></remarks>
Private Sub SwitchMainGridViews(ByVal view As MainGridViews)

TextBoxContent.DataBindings.Clear()
TextBoxTitle.DataBindings.Clear()
TextBoxHotkey.DataBindings.Clear()
TextBoxDescription.DataBindings.Clear()

With MainGrid
Select Case view

Case MainGridViews.Data

'Grid an MainDataview binden
.DataSource = MainDataView

Case MainGridViews.Favorites

'Grid an FavoritesDataView binden
.DataSource = FavoritesDataView
.Columns("UID").Visible = False
.Columns("FAVID").Visible = False

End Select

.AllowUserToResizeColumns = False
.AllowUserToResizeRows = False

.Columns("ID").Visible = False
.Columns("HOTKEY").Visible = False
.Columns("DESCRIPTION").Visible = False
.Columns("CONTENT").Visible = False
.Columns("PARENT_ID").Visible = False
.Columns("CREATOR").Visible = False
.Columns("EDITOR").Visible = False
.Columns("MODIFIED").Visible = False

.Columns("TYP").Width = 25
.Columns("TYP").AutoSizeMode DataGridViewAutoSizeColumnMode.None
.Columns("TYP").HeaderCell.Value = String.Empty

.Columns("NAME").AutoSizeMode DataGridViewAutoSizeColumnMode.Fill

End With

'Textboxen an Content Spalte binden
TextBoxContent.DataBindings.Add("Text", MainDataView,
"CONTENT")
TextBoxTitle.DataBindings.Add("Text", MainDataView, "NAME")
TextBoxHotkey.DataBindings.Add("Text", MainDataView, "HOTKEY")
TextBoxDescription.DataBindings.Add("Text", MainDataView,
"DESCRIPTION")

End Sub
 

Lesen sie die antworten

#1 Thomas Hübner
03/11/2009 - 14:49 | Warnen spam
On 3 Nov., 10:50, Thomas Hübner wrote:
Hi NG,



Hat sich mal quasi erledigt. Ich binde die Textboxen ja nicht an den
DatagridView sondern an den Dataview. Dementsprechend muß ich die
Textboxen auch an den anderen DataView binden und aus:

TextBoxTitle.DataBindings.Add("Text", MainDataView, "NAME")

dann

TextBoxTitle.DataBindings.Add("Text", FavoritesDataView, "NAME")

machen. Dann klappts auch

Gruß,
Thomas

Ähnliche fragen