Fragensteller
ListView oder DataGridView die Groups Ein oder ausklappen

Frage
Alle Antworten
-
Hallo Mattes,
Gibt es eine Möglichkeit die Groups in Listview einzuklappen oder wieder auszuklappen?
Zu diesem Zweck kannst Du Dich der Struktur LVGROUP und der SendMessage-Funktion bedienen. Ein Beispiel ist in folgendem Link zu finden:
Add Group Collapse Behaviour on a Listview ControlDas Beispiel ist zwar in Visual C# verfasst, aber mit einem Konverter lässt sich der Code nach Visual Basic konvertieren. Nachfolgend steht eine aufs Wesentliche verkürzte Demo zur Verfügung und ich hoffe, dass sie und das oben verlinkte Beispiel hilfreich sein werden:
Imports System.Runtime.InteropServices Partial Public Class Form1 Inherits Form <StructLayout(LayoutKind.Sequential)> Public Structure LVGROUP Public cbSize As Integer Public mask As Integer <MarshalAs(UnmanagedType.LPTStr)> Public pszHeader As String Public cchHeader As Integer <MarshalAs(UnmanagedType.LPTStr)> Public pszFooter As String Public cchFooter As Integer Public iGroupId As Integer Public stateMask As Integer Public state As Integer Public uAlign As Integer End Structure <DllImport("user32.dll")> Private Shared Function SendMessage(ByVal window As IntPtr, ByVal message As Integer, ByVal wParam As Integer, ByVal lParam As IntPtr) As Integer End Function 'ListView mit Elementen und Gruppen befüllen Private Sub bnEinklappen_Click(ByVal sender As Object, ByVal e As EventArgs) Handles bnEinklappen.Click For i As Integer = 0 To ListView1.Groups.Count Dim group As LVGROUP = New LVGROUP() group.cbSize = Marshal.SizeOf(group) group.state = 1 'eingeklappt group.mask = 4 group.iGroupId = i Dim ip As IntPtr = IntPtr.Zero Try ip = Marshal.AllocHGlobal(group.cbSize) Marshal.StructureToPtr(group, ip, True) SendMessage(ListView1.Handle, &H1000 + 147, i, ip) Catch ex As Exception System.Diagnostics.Trace.WriteLine(ex.Message + Environment.NewLine + ex.StackTrace) Finally If ip <> IntPtr.Zero Then Marshal.FreeHGlobal(ip) End Try Next End Sub Private Sub bnAusklappen_Click(sender As Object, e As EventArgs) Handles bnAusklappen.Click For i As Integer = 0 To ListView1.Groups.Count Dim group As LVGROUP = New LVGROUP() group.cbSize = Marshal.SizeOf(group) group.state = 0 'ausgeklappt group.mask = 4 group.iGroupId = i Dim ip As IntPtr = IntPtr.Zero Try ip = Marshal.AllocHGlobal(group.cbSize) Marshal.StructureToPtr(group, ip, True) SendMessage(ListView1.Handle, &H1000 + 147, i, ip) Catch ex As Exception System.Diagnostics.Trace.WriteLine(ex.Message + Environment.NewLine + ex.StackTrace) Finally If ip <> IntPtr.Zero Then Marshal.FreeHGlobal(ip) End Try Next End Sub End Class
Oder ist bei DataGridView möglich eine Groups zu erstellen die ein oder ausklappbar sind?
Sieh Dir diesen Thread und die weiterführenden Links an:
VB Datagridview Grouping - Expand and Collapse Row(s). Help neededGruß,
DimitarBitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „IT-Pros helfen IT-Pros“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.
-
Hallo Mattes,
Bist Du weitergekommen? Ist der Thread noch aktuell?
Gruß,
DimitarBitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „IT-Pros helfen IT-Pros“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.