• Webseitenerstellung und -hosting
  • .NET Anwendungsentwicklung
  • softwaregesteuerte Prozessoptimierung
  • .NET

    Programmierung

  • WebseitenErstellung

    undHosting

  • softwaregesteuerte

    Prozessoptimierung

  • Konzeption

    und Beratung

solutionS Daily Grind - Blog
solutionS

solutionS

Wenn man Benutzern die Möglichkeit geben will im Report Manager direkt zu sortieren ohne erst umständlich einen Excel-Export machen zu müssen stößt man an die Grenzen der Flexibilität von Reporting Services. Lösung wäre zum Beispiel folgendes: Man erstellt eine Tabellenwertfunktion und übergibt das Orderby als Parameter. Der Aufruf sieht dann ungefähr so aus: SELECT Kundennummer, Name, land, Umsatz FROM dbo.tf_kundenumsatz(@datum_von, @datum_bis, @Land,@top, @orderby) AS tf_umsatz Will man die Tabellenwertfunktion auch ausserhalb des  SSRS aufrufen kann man dem Paramater in der Funktion auch einen Default wert zuweisen: @Orderby as varchar(20) = 'Wertstellung' der Aufruf lautut dann: dbo.tf_kundenumsatz(@datum_von, @datum_bis, @Land,@top, DEFAULT) Der Orderby Befehl sieht dann in etwas so aus: case when lower(@orderby) = 'wertstellung' Then wertstellung ELSE NULL END desc, case when lower(@orderby) = 'Kundennummer' Then Kundennummer  ELSE NULL END asc, case when lower(@orderby) = 'Land Then Land ELSE NULL END asc Die Parameter Zuweisung  und das Endergebnis sieht in meinen Fall so aus:    
Zustand: Datenimport-Paket unter SSIS und VS2005. Problem: Geht man in die Eigenschaften eines FTP-Connection-Managers verschwindet das eingegebene Passwort. Das führt u.U. dazu dass man das Paket erstellt und erst zur Laufzeit einen Fehler erhält. Dieses Phänomen scheint unter VS 2008 ebenfalls noch nicht behoben zu sein. Workaround: Erstellen eines Script-Tasks zu Beginn des Pakets und manuelles setzen der Daten zur Laufzeit. Im Script selbst:
 Try 'Connectionstring/Zugangsdsaten setzen Dim txFTPConnection As String = "FTPConnectionName" Dim ftpConnectionManager As ConnectionManager
 
  ftpConnectionManager = Dts.Connections(txFTPConnection) Dts.Connections(txFTPConnection).Properties("ServerName").SetValue(ftpConnectionManager, "11.11.11.11") Dts.Connections(txFTPConnection).Properties("ServerPort").SetValue(ftpConnectionManager, "21") Dts.Connections(txFTPConnection).Properties("ServerUserName").SetValue(ftpConnectionManager, "xxxxx") Dts.Connections(txFTPConnection).Properties("ServerPassword").SetValue(ftpConnectionManager, "´yyyy") Dts.TaskResult = Dts.Results.Success Catch ex As Exception Dts.TaskResult = Dts.Results.Failure  End Try
so kann nichts mehr verloren gehen ;-)  
%PM, %16. %732 %2012 %16:%Feb

Delete from LinkedServer inner Join local

Situation: Löschung von Datensätzen einer Tabelle eines Verbindungsservers in SQL Server 2008 Problem: die Syntax :-) aber im Grunde nicht anders als "normal", sieht nur etwas komisch aus:

DELETE OPENQUERY([LinkedServer],

'SELECT * FROM adm.LinkedServertable')

FROM OPENQUERY([LinkedServer],

'SELECT id FROM adm. LinkedServertable' ) as linked

LEFT OUTER JOIN dbo.Kunden on Kunden.id = linked.id

where linked.id is null

 
%AM, %04. %468 %2012 %10:%Jun

X509Certificate2 Passwort

RSA Verschlüsselung mit .net Das sich dieser Blog hauptsächlich mit mystischen, kryptischen, durch Voodoo Priester verhexten programmtechnischen Microsoft Bugs, Ungereimtheiten und nicht nachvollziehbaren unlogischen Sinn befasst, hier ein Auszug auf dem täglichen Wahnsinn. Ein nicht passwortgeschütztes privates PFX Zertifikat laden:
Dim cert = New X509Certificate2(File.ReadAllBytes(strPFXFile)

Fehler: Netzwerkkennwort nicht erkannt ("The specified network password is not correct")

Lösung: Der optionale(!) Parameter "Password" muss bei Windows 2003 und darunter  fix gesetzt werden.

Also in meinem Fall:

Dim cert = New X509Certificate2(File.ReadAllBytes(strPFXFile),"")

wie immer: Da muss man erstmal draufkommen :-(			  
%PM, %19. %621 %2014 %13:%Feb

WPF Window BringToFront

Alternative gibts im Netz genug, bei mir allerdings hat wie immer nichts geholfen. Spielchen wie Bringintoview, Topmost True/false etc. greifen nicht, vermutlich auch weil ich dafür eine extra Extension geschrieben habe?!


Public Sub ShowFront(winDow As Window)
Try

winDow.Show()
winDow.BringIntoView()
winDow.Activate()
winDow.Focus()
'winDow.Topmost = True
'winDow.Topmost = False

Catch ex As Exception
orange.Fehler.Show(ex)
End Try
End Sub


 

die Lösung: Beim Aufruf des Ereignises welches das Childwindow aufrufen möchte, meist ein click oder mousedown:

e.handled = true

somit wird das Click-Ereignis der Parent-Form beendet und hat keine Auswirkungen auf die folgenden Prozesse.  
Stand der Dinge: Ein Grid hat 2 flexible Spalten, die darin enthaltene Textbox soll 1 flexible Spalte ausfüllen und dabei ein Textwrapping verwenden. Problem: Textwrapping wird ignoriert, stattdessen wird die Spalte soweit vergrößert, dass der Text der Textbox "korrekt" dargestellt wird. Auswirkung: Ds Grid wird größer als die zugrundeliege Maske und übrige Spalten werden verschoben, evtl wird der Scrollviewer aktiviert. Lösung: Hinterlegung eines Root-Grids (Standard) und Festlegung der maximalen Größe des Sub-Grids auf die größe deas Root-Grids. via Xaml:
 MaxWidth="{Binding ElementName=grdRoot, Path=ActualWidth}"
			  
%AM, %15. %511 %2013 %11:%Mär

WPF ReportViewer Install on IIS Server

das ReportViewer (SSRS) Steuerelement von MS kann man über eine Referenzierung auf Winforms in WPF nutzen. Allerdings gibt es ein Problem beim Veröffentlichen am IIS. Fehler:Die Anwendung kann weder installiert noch gestartet werden. Die Anwendung erfordert, dass die Assembly Microsoft.ReportViewer.ProcessingObjectModel Version 10.0.0.0 zuerst im globalen Assemblycache (GAC) installiert wird. Unable to install or run the application.  the application requires that assembly microsoft.reportviewer.processingobjectmodel version 9.0.0.0 be installed in the global assembly cache (GAC) first Allerdings bringt das etwas umständliche installieren der dll's im GAC des Servers keine Abhilfe. Trick ist, die dlls als erforderliche Komponenten in der WPF Anwendung direkt als "Einschliessen/erforderlich" zu kennzeichnen. Beim Veröffentlichen werden die DLL's dann ins Ausführungsverzeichnis der Anwendung kopiert.
%AM, %06. %521 %2012 %11:%Dez

WPF Datenbindung debuggen

Leider gibt es im XAML keine Möglichkeit die Datenbindung zur Designzeit zu kontrollieren, auch zur Laufzeit gibt es keine luxuriöse Möglichkeit. Eine Exception wird ebenfalls nicht ausgelöst, meist bleibt der Wert einfach leer. Natürlich gibt es die Möglichkeit sich die Informationen im Ausgabefenster anzuzeigen. Extras-Optionen-Debugging-Ausgabefenster-Datenbinding Eleganter wäre aber doch Werte debuggen zu können. Das ist möglich, allerdings auf den ersten Blick umständlich, aber wenn man dies generell einbaut durchaus praktikabel. Wer schonmal Bilder im Datagrid angezeigt hat ist die Benutzung eines Convertes nichts neues: Als erstes legt mal eine öffentliche Klasse an, die nichts weiter macht als den Übergebenen Wert zurückzuliefern:
 _
Public Class MyValueConverter
Implements IValueConverter

Public Function Convert(value As Object, targetType As Type, parameter As Object, culture As System.Globalization.CultureInfo) As Object Implements IValueConverter.Convert
Return value
End Function

Public Function ConvertBack(value As Object, targetType As Type, parameter As Object, culture As System.Globalization.CultureInfo) As Object Implements IValueConverter.ConvertBack
Return value
End Function
End Class

danach referenziert man diese Klasse als Resource im XAML







und fügt den Converter in der Datenbindung hinzu:


{Binding Path=Rechnungsbetrag,Converter={StaticResource ValueConverterLocal}}


Jetzt kann man in der Convert function der ConverterKlasse seinen Breakpoint setzen und die Werte überprüfen ;-)			  
%PM, %15. %669 %2013 %15:%Apr

WPF Datagrid Spalten ein- und ausblenden

Leider besteht im WPF Datagrid keine Möglichkeit direkt auf Spalten zuzugreifen. Man kann natürlich durch die Eigenschaft "AutoGenerateColumns=True" und dem Ereignis "AutoGeneratingColumn" des Grid im Code Spalten anzeigen oder auch nicht. Was aber wenn man das ganze dynamisch gestalten will, am besten noch mit direkter Datenbindung und/oder seine Columns im Xaml definieren will? -> Fehlanzeige, da der Datacontext des Grids z.B. nicht an die DataGridTemplateColumn durchgereicht wird. Warum weiss der Geier. Abhilfe schafft folgendes Szenario von Thomas Levesque Leicht abgeändert und nach VB konvertiert. Zuerst braucht man einen Converter der boolsche Werte nach Visibility convertiert:

Public Class VisibilityConverter
Implements IValueConverter

Public Function Convert(value As Object, targetType As Type, parameter As Object, culture As System.Globalization.CultureInfo) As Object Implements IValueConverter.Convert
Try
If value Is Nothing OrElse CBool(value) = False Then Return Visibility.Collapsed

Return Visibility.Visible

Catch ex As Exception
Return Visibility.Collapsed
End Try

end class

End Function
dann eine Klasse die Freezable erbt und eine DependencyProperty "Data" bereitstellt.

Public Class BindingProxy
Inherits Freezable
'Freezable überschreiben
Protected Overrides Function CreateInstanceCore() As Freezable
Return New BindingProxy()
End Function

'Diesen Namen (Data) in der dataProperty und im XAML verwenden
Public Property Data() As Object
Get
Return DirectCast(GetValue(DataProperty), Object)
End Get
Set(value As Object)
SetValue(DataProperty, value)
End Set
End Property

'DependencyProperty für die "Data"
Public Shared ReadOnly DataProperty As DependencyProperty = DependencyProperty.Register("Data", GetType(Object), GetType(BindingProxy), New UIPropertyMetadata(Nothing))
End Class


In den PageResources bzw. Datagridresources diese beiden Klassen referenzieren:











dann die proxy klasse des Grids bestücken. Ich mach das via code


Dim p As BindingProxy = CType(grdElementeBearbeitung.Resources("proxy"), BindingProxy)
p.Data = CType(grdBereiche.SelectedItem, text_bereich)


und die Visiblity der Spalte an die Data Property bzw. das Feld binden


Visibility="{Binding Data.spalte_anzeigen,Converter={StaticResource VisibilityConverter},Source={StaticResource proxy}}"

			  
%AM, %13. %445 %2012 %09:%Dez

WPF Databinding Combobox inside Datagrid

Will man innerhalb eines Datagrid eine Combobox bestücken, die einer anderen Datenquelle besitzt als das Datagrid an sich muss man etwas tüfteln. Ich hab zumindest ein wenig (ne stunde ;-) um gebraucht eine optimale Lösung (und einfache!) zu finden. Im Internet (Google Suche) findet  man zwar Lösungsansätze, jedoch meiner Meinung total überladen, teilweise sogar falsch! tripodS proudly presenting the worldwide first simple unique solution: der Trick liegt darin eine DataGridComboBoxColumn zu benutzen, die Datenquelle (ObservableCollection) in eine Liste umzuwandeln und im XAML die Datenbindung des Parent Control unter Textdatabinding festzulegen. im XAML:




und im Code:

Dim ben = (From b In db.blalblabla where b.blabla = blablabla).ToList
cboBenutzer.ItemsSource = ben

			  
Seite 2 von 6