vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Blitzschnelles Erstellen von grafischen Diagrammen!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Ein- und Umsteiger
Row in DataGridView verschieben? 
Autor: Christoph1972
Datum: 13.03.08 21:49

Hi Leute,

ich versuche gerade raus zu finden, wie man ein Row in einem DataGridView verschiebt. Die Columns kann man ja verschieben, wenn man es in den Propertys AlowUserToOrderColumns einstellt. Mit einem Row geht das scheinbar nicht, warum auch immer, oder bin ich blind? Muss ich etwa eine Drag and Drop Funktion coden, mit der ich die Rows moven kann? Hat hier jemand eine Idee, wie ich das am Besten realisieren kann? Ach ja, das DGV ist nicht gebunden, der Inhalt wird später in eine Datei gestreamt. Es soll also ein reiner Sortiervorgang werden, nicht mehr und nicht weniger

Gruß
Christoph

Gruß
Christoph

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Row in DataGridView verschieben? 
Autor: bauer
Datum: 14.03.08 08:40

Hi Christoph,

so ein Problem hatte ich auch mal, sprich einen Sort auf eine ungebundenes DataGridView.

Sah dann in etwa so aus (abgesehen davon, daß es sicher performantere Algorithmen gibt (Heapsort ......)).


            ''' <summary>
            ''' Eigentliche Sort Methode 
            ''' </summary>
            ''' <param name="m_grid"></param>
            ''' <param name="FromRow"></param>
            ''' <param name="ToRow"></param>
            ''' <param name="SortKeys"></param>
            ''' <remarks></remarks>
            Private Shared Sub SortWithoutDialogDoIt(ByVal m_grid As _
              System.Windows.Forms.DataGridView _
                               , ByVal FromRow As Integer _
                               , ByVal ToRow As Integer _
                               , ByVal SortKeys As List(Of SortColumn))
 
                'Lokale Hilfsgroessen fuer vertauschen von zwei Rows im 
                ' DataGridView 
                Dim R1 As DataGridViewRow = Nothing
                Dim R2 As DataGridViewRow = Nothing
 
                'Plausipruefungen und Ausfuehren der Sortierung 
                If (SortKeys.Count > 0) And (FromRow < ToRow) Then
                    For i As Integer = FromRow To ToRow - 1
                        For j As Integer = i + 1 To ToRow
                            If SwapNecessary(m_grid, i, j, SortKeys, 0) = True _
                              Then
 
                                'Vertausche zwei ROWs gegeneinander 
                                R1 = m_grid.Rows(i)
                                R2 = m_grid.Rows(j)
 
                                m_grid.Rows.RemoveAt(j)
                                m_grid.Rows.RemoveAt(i)
 
                                m_grid.Rows.Insert(i, R2)
                                m_grid.Rows.Insert(j, R1)
                            Else
                            End If
                        Next
                    Next
                Else
                    'Keine Sortierungskeys verfuegbar bzw. FromRow / ToRow 
                    ' ungueltig 
                End If
 
            End Sub
gruß bauer
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Row in DataGridView verschieben? 
Autor: Melkor
Datum: 14.03.08 13:53

So kann der Benutzer Rows verschieben, wenn du das willst (.AllowDrop = True!)
    Private mdrect As Rectangle
    Private mdindex As Integer
 
    Private Sub dgv_DragEnter(ByVal sender As Object, ByVal e As _
      System.Windows.Forms.DragEventArgs) Handles dgv.DragEnter
        e.Effect = DragDropEffects.Move
    End Sub
 
    Private Sub dgv_MouseMove(ByVal sender As Object, ByVal e As _
      MouseEventArgs) Handles dgv.MouseMove
        If e.Button And MouseButtons.Left = MouseButtons.Left Then
            If mdrect <> Rectangle.Empty AndAlso Not mdrect.Contains(e.X, _
              e.Y) Then
                Dim rtd As DataGridViewRow = dgv.Rows(mdindex)
                Debug.WriteLine("Row to drag " & rtd.Cells(0).ToString())
                Dim dropEffect As DragDropEffects = dgv.DoDragDrop(rtd, _
                  DragDropEffects.Move)
            End If
        End If
    End Sub
 
    Private Sub dgv_MouseDown(ByVal sender As Object, ByVal e As _
      MouseEventArgs) Handles dgv.MouseDown
        mdindex = dgv.HitTest(e.X, e.Y).RowIndex
        If mdindex <> -1 Then
            Dim ds As Size = SystemInformation.DragSize
            mdrect = New Rectangle(New Point(e.X - (ds.Width / 2), e.Y - ( _
              ds.Height / 2)), ds)
        Else
            mdrect = Rectangle.Empty
        End If
    End Sub
 
    Private Sub dgv_DragDrop(ByVal sender As Object, ByVal e As DragEventArgs) _
      Handles dgv.DragDrop
        Dim cp As Point = dgv.PointToClient(New Point(e.X, e.Y))
        Dim dropindex As Integer = dgv.HitTest(cp.X, cp.Y).RowIndex()
        If e.Effect = DragDropEffects.Move Then
            Dim rtm As DataGridViewRow = CType(e.Data.GetData(GetType( _
              DataGridViewRow)), DataGridViewRow)
            dgv.Rows.RemoveAt(mdindex)
            dgv.Rows.Insert(dropindex, rtm)
        End If
    End Sub

Those people who think they know everything are a great annoyance to those of us who do - Isaac Asimov

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Row in DataGridView verschieben? 
Autor: Christoph1972
Datum: 15.03.08 10:12

Vielen Dank euch beiden!

Ich habe mich allerdings für die Variante von Melkor entschieden. Mittlerweile hatte ich selbst auch schon eine Lösung gefunden, aber die von Melkor ist doch deutlich eleganter, als meine. Auf diesen Lösungsweg wäre ich so nie gekommen. Ich finde ihn auch alles andere als einfach, da kann ich nur sagen Respekt! Das zeigt mir mal wieder das ich eine sehr kleine Lampe bin und der Weg zum Kronleuchter noch ein weiter Weg für mich ist
Meiner Meinung nach fehlt dem DGV diese Funktion. Da müsste MS noch nachbessern, für Columns besteht ja die Möglichkeit von vornherein.

Also 1000 Dank für diesen Tipp!! Der könnte übrigens wirklich in die Rubrik Tipps verschoben werden!


Gruß
Christoph

Gruß
Christoph

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Row in DataGridView verschieben? 
Autor: Melkor
Datum: 15.03.08 13:10

Naja, den Code hatte ich auch ursprünglich (als C# glaube ich) von irgendwoher.

Those people who think they know everything are a great annoyance to those of us who do - Isaac Asimov

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel