vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
sevAniGif - als kostenlose Vollversion auf unserer vb@rchiv CD Vol.5  
 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
manuell veränderte Datagridviewcolumns richtig ausgeben 
Autor: Theo_kkv
Datum: 18.12.19 18:19

Hallo,
ich habe in einem Datagridview die Eigenschaft
AllowUserToOrderColumns = True
gesetzt. Das Datagridview wird mit einem Datatable als Datasource gefüllt.
Me.DataGridView1.DataSource = found_dt
Wenn ich nun die Anordnung der Spalten im DGV manuell verändere, wird diese veränderte Reihenfolge nicht korrekt ausgegeben.
Dim sel_dt As DataTable = New DataTable()
For Each spalten As DataGridViewColumn In Me.DataGridView1.Columns
                    sel_dt.Columns.Add(spalten.Name)
Next
sondern die ursprüngliche Reihenfolge wie die Spalten in die Datatable gekommen sind.

Kann dazu jemand helfen?

Vielen dank vorab

Tom
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: manuell veränderte Datagridviewcolumns richtig ausgeben 
Autor: effeff
Datum: 19.12.19 10:25

Warum machst Du das so umständlich?

https://docs.microsoft.com/de-de/dotnet/framework/winforms/controls/how-to-change-the-order-of-columns-in-the-windows-forms-datagridview-control

EALA FREYA FRESENA

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: manuell veränderte Datagridviewcolumns richtig ausgeben 
Autor: Theo_kkv
Datum: 19.12.19 10:46

Hallo,
ich hatte gestern wohl vergessen zu schreiben, dass ich einen CSV Export plane. Dafür möchte ich die Ausgabereihenfolge der Spalten in der CSV Datei so haben, wie ich/der Nutzer die Spalten manuell angeordnet hat.

Wenn die Spaltenreihenfolge nicht verändert wurde, werden die Spaltennamen auch korrekt ausgegeben. Wenn ich die Reihenfolge der Spalten jedoch z.B. durch Schieben mit der Maus verändere, wird diese veränderte Reihenfolge eben nicht berücksichtigt.
Wie kommt da DisplayIndex rein?

Grüße
Tom
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: manuell veränderte Datagridviewcolumns richtig ausgeben 
Autor: Manfred X
Datum: 19.12.19 20:47

Hallo!

In dem Fall mußt Du bei der Aufbereitung der CSV-Zeile die Spaltenreihenfolge
anhand der Displayindex-Eigenschaft bilden.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: manuell veränderte Datagridviewcolumns richtig ausgeben 
Autor: Theo_kkv
Datum: 27.12.19 16:36

Hallo,
über die Feiertage hatte ich etwas Zeit, um an der Sache herum zugrübeln. Ich bin dann auf Folgenden Code gekommen (nach Stunden)
 For Each dgvspalte As DataGridViewColumn In Me.DataGridView1.Columns.Cast(Of _
   DataGridViewColumn)().OrderBy(Function(dgvc) dgvc.DisplayIndex)
                        sel_dt.Columns.Add(dgvspalte.Name, dgvspalte.ValueType)
 Next
Das funktioniert auc soweit. Damit steht die Spaltenreihenfolge erstmal. Jetzt müssen noch die Zeileninhalte der SelectedRows in die Datatable. Geht das in der gleichen Schleife gleich mit?

Schöne Feiertage
Tom
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: manuell veränderte Datagridviewcolumns richtig ausgeben 
Autor: effeff
Datum: 28.12.19 20:51

Hier ist ein kleine Beispiel, bei welchem anhand des Display-Indexes der Spalten eine Ausgabe in manuell erstellter Ordnung als CSV-Datei erfolgt:

Public Class Form1
 
    Dim dt As New DataTable
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Initialize_dt()
        dgvNamen.AllowUserToOrderColumns = True
        dgvNamen.DataSource = dt
        dtFill()
 
    End Sub
 
    Private Sub dtFill()
 
        Dim newRow As DataRow = dt.NewRow
        newRow("Nachname") = "Irgendwer"
        newRow("Vorname") = "Dieter"
        newRow("Geburtsort") = "Lissabon"
        dt.Rows.Add(newRow)
 
        Dim newRow1 As DataRow = dt.NewRow
        newRow1("Nachname") = "Mustermann"
        newRow1("Vorname") = "Erika"
        newRow1("Geburtsort") = "München"
        dt.Rows.Add(newRow1)
 
        Dim newRow2 As DataRow = dt.NewRow
        newRow2("Nachname") = "Gibsnich"
        newRow2("Vorname") = "Günni"
        newRow2("Geburtsort") = "Bärlin"
        dt.Rows.Add(newRow2)
 
        Dim newRow3 As DataRow = dt.NewRow
        newRow3("Nachname") = "Wildschwein"
        newRow3("Vorname") = "Willi"
        newRow3("Geburtsort") = "Hagen"
        dt.Rows.Add(newRow3)
 
    End Sub
 
    Private Sub Initialize_dt()
        dt.TableName = "Tabelle"
 
        Dim keys(1) As DataColumn
        Dim column As New DataColumn
        column.DataType = System.Type.GetType("System.Int32")
        With column
            .ColumnName = "ID"
            .AutoIncrement = True
            .AutoIncrementStep = 1
        End With
        dt.Columns.Add(column)
        keys(0) = column
        dt.PrimaryKey = keys
 
        column = New DataColumn
        column.DataType = System.Type.GetType("System.String")
        column.ColumnName = "Nachname"
        dt.Columns.Add(column)
 
        column = New DataColumn
        column.DataType = System.Type.GetType("System.String")
        column.ColumnName = "Vorname"
        dt.Columns.Add(column)
 
        column = New DataColumn
        column.DataType = System.Type.GetType("System.String")
        column.ColumnName = "Geburtsort"
        dt.Columns.Add(column)
 
    End Sub
 
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles _
      Button1.Click
        Dim Spalten As Integer = dt.Columns.Count
        Dim arr(Spalten - 1) As String
        Dim i As Integer = 0
 
        For i = 0 To Spalten - 1
            arr(dgvNamen.Columns(i).DisplayIndex) = i
        Next
 
        Dim Ausgabe As String = ""
        Dim Zeile As String = ""
 
        For j = 0 To dt.Rows.Count - 1
            For i = 0 To arr.Count - 1
                Zeile = Zeile & dgvNamen.Rows(j).Cells(i).Value & ";"
            Next
            Zeile = Zeile.Substring(0, Zeile.Length - 1)
            Ausgabe = Ausgabe & Zeile & vbCrLf
            Zeile = ""
        Next
        Ausgabe = Ausgabe.Substring(0, Ausgabe.Length - 2)
 
        CSVAusgeben(Ausgabe)
 
    End Sub
 
    Private Sub CSVAusgeben(Ausgabe As String)
        Dim Ausgabedatei As String = "D:\irgendwas.csv"
        Dim sw As New System.IO.StreamWriter(Ausgabedatei)
        sw.Write(Ausgabe)
        sw.Close()
    End Sub
 
End Class

EALA FREYA FRESENA

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: manuell veränderte Datagridviewcolumns richtig ausgeben 
Autor: Theo_kkv
Datum: 08.01.20 08:56

Vielen Dank effeff für diesen kompletten Code. Ich hoffe, dass ich in den nächsten Tagen Zeit habe, ihn durchzuschauen und auf meinen bisherigen Code anzupassen.

Viele Grüße
Tom
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: manuell veränderte Datagridviewcolumns richtig ausgeben 
Autor: Manfred X
Datum: 08.01.20 09:36

Hallo!

Hinweis: Eine Zeile wäre zu korrigieren ...
Zeile = Zeile & dgvnamen.Rows(j).Cells(arr(i)).Value.ToString & ";"
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