Hallo zusammen,
ich habe ein Problem mit Drag&Drop von einem DataGrid zu einem anderen DataGrid.
Die Problematik hierbei ist, das in dem 1. Grid Emails direkt aus Outlook (zb. Posteingang) dargestellt werden und per Doppelklick geöffnet werden können.
Diese Emails möchste ich nun aus diesem Grid in ein 2. ziehen können. Und zwar genau so, als wenn ich sie direkt aus Outlook in mein Grid ziehen würde.
Mein Versuch bisher:
C_Outlook ist hierbei eine Instanz von Interop.Outlook.
Beim DragOver wird dann geprüft, woher das gezogene Objekt stammt und ob dieses dann auch gedroppt werden darf. Bisher dürfen nur Objekt direkt aus Outlook und aus dem Explorer gedropt werden.
Das sieht dann so aus:
An dieser Stelle versage ich dann leider. Mein mail-Objekt wird nicht als Outlook-Objekt erkannt (was ich auch verständlich finde) und somit darf es nicht gedropt werden.
Hat jemand eine Idee, was ich machen muss, damit es klappt?
Achja, und seit ich das Ziehen mit MouseDown starte, funktioniert auch der Doppelklick nicht mehr
EDIT:
Die Emails im 2. Grid liegen entweder als *.msg irgendwo aufm Dateisystem oder werden binär in der Datenbank gespeichert. Dies passiert beim Droppen ins 2. Grid.
ich habe ein Problem mit Drag&Drop von einem DataGrid zu einem anderen DataGrid.
Die Problematik hierbei ist, das in dem 1. Grid Emails direkt aus Outlook (zb. Posteingang) dargestellt werden und per Doppelklick geöffnet werden können.
Diese Emails möchste ich nun aus diesem Grid in ein 2. ziehen können. Und zwar genau so, als wenn ich sie direkt aus Outlook in mein Grid ziehen würde.
Mein Versuch bisher:
Code:
Private Sub ctl_MailGrid_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles ctl_MailGrid.MouseDown Dim mailID As String Dim grid As DataGrid = CType(sender, DataGrid) Dim oKlasse As New C_Outlook Dim mail As Outlook.MailItem If oKlasse Is Nothing Then F_Meldung("FEHLEROUTLOOK", "A connection to Outlook couldn't be established.") Exit Sub End If Try mailID = grid(grid.CurrentRowIndex, 0) mail = oKlasse.OutlookNS.GetItemFromID(mailID) Me.ctl_MailGrid.DoDragDrop(mail, DragDropEffects.Copy) Catch ex As Exception MsgBox(ex.Message, vbOKOnly + vbExclamation) End Try End Sub
Beim DragOver wird dann geprüft, woher das gezogene Objekt stammt und ob dieses dann auch gedroppt werden darf. Bisher dürfen nur Objekt direkt aus Outlook und aus dem Explorer gedropt werden.
Das sieht dann so aus:
Code:
' Ermittelt DragDrop-Quelle anhand der übergebenen Datenformate Public Function F_DragDropQuelle(ByVal devent As DragEventArgs) As Integer Dim FormatFeld() As String Dim OLFeld() As String = {"RenPrivateSourceFolder", "RenPrivateMessages", "FileGroupDescriptor", "FileContents", "Object Descriptor", "System.String", "UnicodeText", "Text"} Dim ExpFeld() As String = {"FileDrop", "FileNameW", "FileName"} Dim Retwert As Integer Dim Ipos As Integer, Fanz As Integer, ILauf As Integer FormatFeld = devent.Data.GetFormats Fanz = FormatFeld.GetLength(0) ' Formatliste Outlook prüfen Retwert = enum_DRAGDROP.Outlook For ILauf = 0 To OLFeld.GetLength(0) - 1 Ipos = Array.IndexOf(FormatFeld, OLFeld(ILauf)) If Ipos < 0 Then Retwert = enum_DRAGDROP.Unknown Else ' Darf überhaupt binär gespeichert werden? If F_TPZeilenAnz("VP_Verweisart", "VERWEISART=4") < 1 Then Return enum_DRAGDROP.Unknown End If End If Next ' Kein Outlook-Element -> evtl. Datei? If Retwert = enum_DRAGDROP.Unknown Then Retwert = enum_DRAGDROP.Explorer For ILauf = 0 To ExpFeld.GetLength(0) - 1 Ipos = Array.IndexOf(FormatFeld, ExpFeld(ILauf)) If Ipos < 0 Then Retwert = enum_DRAGDROP.Unknown Next End If Return Retwert End Function
Hat jemand eine Idee, was ich machen muss, damit es klappt?
Achja, und seit ich das Ziehen mit MouseDown starte, funktioniert auch der Doppelklick nicht mehr
EDIT:
Die Emails im 2. Grid liegen entweder als *.msg irgendwo aufm Dateisystem oder werden binär in der Datenbank gespeichert. Dies passiert beim Droppen ins 2. Grid.
Comment