SolutionDev Blog

Gedanken rund um die Lösungsentwicklung

Sortieren einer gebundenen Tabelle über BindingContext

clock Juni 3, 2009 16:15 by author soldev

 

Ich liebe die Programmierung... wo sonst kann man Zeit damit vertun etwas zu suchen, was trivial klingt - aber nicht über die einfache Logik läuft... Ja ich weiss, ein besserer Programmierer als ich hätte es wohl auf der Hand, im Kopf, in den Fingern und wüsste gleich, was zu tun ist.

Das Problem ist ein einfaches: In einem Usercontrol sollten die Datensätze einer Tabelle nach Datum sortiert sein, auch wenn neue, nicht gespeicherte Datensätze dazukommen.

Das Binding ist wie überall:

bm = Me.BindingContext(ds, "MeineTabelle")

Also flugs die logische Art hinzugefügt:

ds.tables("MeineTabelle").DefaultView.Sort = "Datum DESC"

Denkste. Geht nicht, reagiert nicht, tut nicht.

Nach 2 1/2 Stunden und fleissiger Internetrecherchen kommt dann die Lösung. Man muss über den Currencymanager des Bindingcontext gehen, was am Ende so aussieht:

CType(CType(Me.BindingContext(ds, "MeineTabelle"), CurrencyManager).List, DataView).Sort = "DATUM Desc"

Voilà, es läuft. Also, notiert und nie wieder vergessen ...

Aktuelle Bewertung 5,0 von 1 Besuchern

  • Currently 5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5


Applikationsweite Events mit mehreren Empfängern - vb.net

clock August 22, 2008 12:39 by author soldev

Wie oft ... stellt man sich ein komplexes Problem und findet am Ende eine ganz einfache Lösung. So auch hier. Die Frage war: Wie kann ich über meine gesamte Applikation events generieren, welche von irgendwoher aufgerufen und von beliebig vielen Empfängern erhalten werden... Da kommen einem Message Broker, Queues, Hooks und mehr in den Sinn. Doch Sascha Kiefer konnte mich auf Xing auf eine ganz einfache Lösung bringen. Er gab mir zwar einen Hinweis auf Delegates (von C# her) doch mit ein wenig Recherche fand ich heraus, dass ich dies in vb.net gar nicht benötige - es geht wesentlich einfacher.

Auf Codeproject habe ich einen Artikel über Global Events publiziert, hier ein kleiner Extrakt auf deutsch...

Man erstellt eine Klasse für das Globale Eventhandling:

Public Class GlobalEventing
 Public Shared Event DataStored(ByVal sender As Object, ByVal type As String, ByVal msg As String)
 Public Shared Sub TestDataStored()
 RaiseEvent DataStored("x", "x", "x")
 End Sub
End Class

Das steht alles auf 'Public' und 'Shared', damit die Klasse über sämtliche Grenzen hinweg verwendet werden kann.

Das Feuern des Events ist dann sehr einfach:
GlobalEventing.TestDataStored()

Das Empfangen des Events ebenfalls:
'Als Deklaration
Private t As GlobalEventing

'Im Form_Load oder an geeigneter Stelle
 AddHandler t.DataStored, AddressOf test

'Und natürlich die Sub
 Private Sub test(ByVal sender As Object, ByVal typ As String, ByVal msg As String)
 MsgBox("received in reminder")
 End Sub

Selbstverständlich muss das noch mit entsprechenden Parametern etc. ausgebaut werden, das Grundgerüst jedoch läuft :)

Ich habe diese Idee noch einen Schritt weiterverfolgt mit Vererbung. Meine Forms leiten sich von einer Basisklasse ab. Wird dieser Event nun in der Basisklasse empfangen, so erhalten die Childs automatisch diese Voraussetzungen mit. Das ist absolut cool!

Hoffe, jemand kann damit ebenfalls etwas anfangen ... Ein kleines Testprojekt befindet sich ebenfalls auf codeproject.com.

 

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5


Search

Calendar

<<  Dezember 2017  >>
SoMoDiMiDoFrSa
262728293012
3456789
10111213141516
17181920212223
24252627282930
31123456

Archive

Tags

Categories


Blogroll

Disclaimer

The opinions expressed herein are my own personal opinions and do not represent my employer's view in anyway.

© Copyright 2017

Sign in