Ich benutze zum Editieren von alten un neuen Datensätzen aus den HelpersSmallEd die Funktionen
Form ist ein relativ komplexer Joining-View mit 7 LookUp-Tabellen in Combo-Boxen und 3 Child-Views als Datagridview.
BindingSource.EditCurrent(Of Form) funktioniert einwandfrei.
BindingSource.EditNew(Of Form) löst im Original-Quelltext von EDR jedoch in Zeile 12 eine Exception aus:
Die Exception besagt:
"Die Sortierzeichenfolge enthält eine Eigenschaft, die nicht in der IBindingList steht."
Die betroffene Bindingsource ist nicht sortiert.
Frage an @ErfinderDesRades : Was ist falsch oder könnte falsch sein?
//EDIT:
Bin einen Schritt weiter.
Die Bindingsources der Child-Views im Edit-Form enthalten SORT-Anweisungen. Wenn ich diese entferne, funktioniert der Code.
Nun wollte ich schlau sein, und in der Form_Shown-Routine wieder Bindingsource.Sort="Feldname ASC" komplettieren. Aber dann kommt genau an dieser Stelle der Zuweisung die Exception:
"Die Sortierzeichenfolge enthält eine Eigenschaft, die nicht in der IBindingList steht.".
Wahrscheinlich, weil die Child-Tables den Parent-Datensatz noch nicht kennen? Stochern im Nebel ...
Form ist ein relativ komplexer Joining-View mit 7 LookUp-Tabellen in Combo-Boxen und 3 Child-Views als Datagridview.
BindingSource.EditCurrent(Of Form) funktioniert einwandfrei.
BindingSource.EditNew(Of Form) löst im Original-Quelltext von EDR jedoch in Zeile 12 eine Exception aus:
VB.NET-Quellcode
- Private Sub EditItem(Of T As {Form, New})(bs As BindingSource, item As Object)
- Dim tb = DirectCast(item, DataRowView).Row.Table
- Using frm = New T
- tb.DataSet.Register(frm, False)
- Dim allCtls = New GetChilds(Of Control)(Function(ctl) ctl.Controls).AllAsList(frm)
- Dim bindFlags As BindingFlags = BindingFlags.Instance Or BindingFlags.Public Or BindingFlags.NonPublic Or BindingFlags.GetField
- For Each ctl In allCtls.Where(Function(c) TypeOf c Is ContainerControl AndAlso TypeOf c Is Form OrElse TypeOf c Is UserControl)
- For Each fld In ctl.GetType.GetFields(bindFlags).Where(Function(f) f.FieldType = GetType(BindingSource))
- Dim bs2 = DirectCast(fld.GetValue(ctl), BindingSource)
- If bs2 Is Nothing Then Continue For
- If tb Is bs2.DataTable Then
- bs2.DataSource = item
- If frm.ShowDialog() = Windows.Forms.DialogResult.OK Then
- bs2.EndEdit()
- bs.ResetCurrentItem() 'den von der anneren BS geänderten Datensatz neu einlesen.
- Else
- bs.CancelEdit()
- End If
- Return
- End If
- Next
- Next
- Throw New Exception("es konnte keine geeignete BindingSource gefunden werden.".And2( _
- "\nHinweis:", _
- "\nDie Extension-Method '<BindingSource>.", (New StackTrace).GetFrame(1).GetMethod.Name, "()' funktioniert nur, wenn zuvor", _
- "\n<", tb.DataSet.GetType.Name, ">.Register(<", GetType(T).Name, ">)", _
- "\naufgerufen wurde."))
- End Using
- End Sub
Die Exception besagt:
"Die Sortierzeichenfolge enthält eine Eigenschaft, die nicht in der IBindingList steht."
Die betroffene Bindingsource ist nicht sortiert.
Frage an @ErfinderDesRades : Was ist falsch oder könnte falsch sein?
//EDIT:
Bin einen Schritt weiter.
Die Bindingsources der Child-Views im Edit-Form enthalten SORT-Anweisungen. Wenn ich diese entferne, funktioniert der Code.
Nun wollte ich schlau sein, und in der Form_Shown-Routine wieder Bindingsource.Sort="Feldname ASC" komplettieren. Aber dann kommt genau an dieser Stelle der Zuweisung die Exception:
"Die Sortierzeichenfolge enthält eine Eigenschaft, die nicht in der IBindingList steht.".
Wahrscheinlich, weil die Child-Tables den Parent-Datensatz noch nicht kennen? Stochern im Nebel ...
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „us4711“ ()