Nachdem ich ja nur schreibe wenn das Internet keine oder keine eindeutige Lösung anbietet hier der nächste kuriose Fall aus dem MS Gruselkabinett.
SQL Server Integration Servicves: Normale Zuweisung einer SQL Abfrage zu lokalen Variablen mittelts Resultset... Fehler:
Der Werttyp __ComObject kann nur in Variablen des Typs Object konvertiert werden
Jetzt kommt man in die Versuchung die Variable auf den Typ "Object" zu ändern. Dann läuft der Task zwar sauber durch, allerdings kann man auf den gewollten Stringwert in der Objectvariable dann nicht mehr zugreifen. Dieser ist nämlich (lt. MS) eigentlich für die Zuweisung eines kompletten Resultsets (Array) gedacht. Selbst wenn man versucht die Variable via Script-Task zu zerlegen oder zu konvertieren kommt man auf keinen grünen Zweig. Glaubt mir, ich habs ein paar Stunden versucht...
Der Grund:
Datenbankspalten die als varchar(MAX) deklariert werden können einer String Variable nicht zugewiesen werden!
...und da muss man erstmal draufkommen!!!! Bei Varchar geht man ja von String aus... Danke danke, Applaus brauche ich keine :-D
Viel Spaß weiterhin mit SSIS
Optisch nochmal:
Nachdem die banale Sortierung eines Datagrids normal keine große Sache sein sollte hier dennoch meine Lösung da es leider defakto nicht so ist. Füllt man nämlich die Daten im Code behind via Itemssource und hat zusätzlich noch eine DataGridTemplateColumn funktioniert die Sortierung nicht! Außer man geht genau so vor wie ich es hier beschreibe:
1. Festlegen der Grideigenschaft CanUserSortColumns auf true 2. Festlegen des SortMemberPathin den Eigenschaften des DataGridTemplateColumn im XAML 3. Setzen der ItemsSource="{Binding}" (Dummy) in den Grideigenschaften (!!!) 4. Füllen des Grids via Datacontext und konvertierung dieser als Liste!!!!
Klingt komisch ist aber so. Hier also als Beispiel:
DataGrid Name="grdLast" AutoGenerateColumns="False" AlternationCount="2" CanUserSortColumns="True" SelectedValuePath="aktivitaets_id" ItemsSource="{Binding}" IsReadOnly="True" SelectionMode="Single" DataGridTemplateColumn Header="Datum" MinWidth="120" SortMemberPath="datum" grdLast.DataContext = (From o In db.xxx).ToList
Öffnet man ein Image über image.fromfile und versucht das Objekt z.B. nach Manipulation anschliessend über die SAVE Methode zu speichern bekommt man den Fehler
"Allgemeiner Fehler in GDI+." - was nichts anderes heisst als dass diese Methode das File sperrt. Auch ein Clonen des Objekts und ein Dispose des Originalimages helfen hier nicht. Die simple Lösung: Das Image einfach über FromStream öffnen.
Hier der Smarte Einzeiler:
Dim imgOriginal As Image = Image.FromStream(New IO.MemoryStream(IO.File.ReadAllBytes(strFilename)))
Um eine Mail im Outlook zu signieren war es bisher üblich über die Funktion
CommandBars.FindControl(,719).Execute
den "signieren" Button des MailItem-Ribbons zu betätigen. Auch in der Vergangenheit war es schwierig da man u.U. die Execute Methode 3x aufzurufen (sic!). Nachdem dies ab Office 2013 nicht mehr funktioniert, generell wird die Commandbars Methode nicht mehr unterstützt, musste ich eine Alternative finden. Wie immer in diesem Blog findet man das nicht durch en bisschen Googeln, deshalb hier die Lösung: Die Property PR_SECURITY_FLAGS des aktuellen Mailitems setzen:
''' <summary>
''' E-Mail Item signieren (Zertifikat)
''' </summary>
''' <param name="blnSignieren"></param>
''' <remarks></remarks>
Public Shared Sub Nachricht_signieren(blnSignieren As Boolean)
Try
Const PR_SECURITY_FLAGS = "http://schemas.microsoft.com/mapi/proptag/0x6E010003"
Const SECFLAG_NONE = &H0
Const SECFLAG_SIGNED = &H2
'Const SECFLAG_ENCRYPTED = &H1
'Aktuelles Mailitem holen
Dim actOutItem As Outlook.MailItem
actOutItem = CType(oOut.ActiveInspector.CurrentItem, Outlook.MailItem)
'Sign / Unsign
If Funktionen.isEmailItem(actOutItem) Then
Dim prop As Long
prop = CLng(actOutItem.PropertyAccessor.GetProperty(PR_SECURITY_FLAGS))
actOutItem.PropertyAccessor.SetProperty(PR_SECURITY_FLAGS, If(blnSignieren = True, SECFLAG_SIGNED, SECFLAG_NONE))
End If
actOutItem = Nothing
Catch ex As Exception
Throw ex
End Try
End Sub
eine Auflistung der Properties findet Ihr auf der Webseite https://searchcode.com/codesearch/view/3372596/ bzw. da ich dem Internet nicht traue, ebenfalls als Textdatei im Anhang. Danke. Bitte :-)
Szenario: WPF Browseranwendung, festelegen des Owners eines modalen Fensters
Lösung: Festlegen von "window.Owner = Application.Current.MainWindow" -> Funktioniert generell
Allerdings darf dann die WindowStartupLocation NICHT "CenterOwner" sondern "CenterScreen" sein, dann klappts. Klingt komisch ist aber so.
1000 Seiten zu DataGrid Performance, keine hat geholfen. Versuchthabe ich folgende empfohlenen Verbesserung der Eigensdchaften:
VirtualizingPanel.IsVirtualizing="False"
EnableColumnVirtualization="True"
EnableRowVirtualization="True"
ScrollViewer.IsDeferredScrollingEnabled="True"
EnableColumnVirtualization="True"
EnableRowVirtualization="True"
Leider brachte das bei mir nicht den erhofften Erfolg. Folgende Erweiterung des Grids im XAMLbrachte zumindest bei mir den erwünschten Erfolg:
ItemsSource="{Binding RelativeSource={RelativeSource Self}, Path=DataContext,IsAsync=True}"
ScrollViewer.CanContentScroll="False"
Also, das Binding der Itemssource auf Asnychron umstellen und die Eigenschaft CanContentScroll des übergeordneten internen Scollviewers.
TRICK: Itemssource enthält deshalb einen Verweis auf sich selbst, da aufgrund des Sortings im Codebhin die Datacontext Eigenschaft gesetzt wird!
Ich frage mich warum MS beim Erstellen eines Standard ASP.NET Webforms Projekt die CSS gar grausam ausliefert. z.B. sieht eine DropDownlist im Vergleich zu einer Textbox gar furchterregend aus.
Lösung ist ganz simple: Im Style.CSS im bereich "input, textarea" (Zeile 405) um den Typ "select" erweitern:
input, textarea, select {
border: 1px solid #e2e2e2;
background: #fff;
color: #333;
font-size: 1.2em;
margin: 5px 0 6px 0;
padding: 5px;
}
leider hat die Dropdownlist aufgrund Padding, Border etc der Textbox noch ein Problem mit der Breite, deswegen bei Bedarf nochmal explizit festlegen:
input, textarea {
width: 300px;
}
select {
width: 312px;
}