| |
VB.NET - Ein- und Umsteigermanuell 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 | |
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 | |
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. | |
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 | |
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 | |
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 | |
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 & ";" | |
| 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 |
|
|
Neu! sevDTA 3.0 Pro
SEPA mit Kontonummernprüfung
Erstellen von SEPA-Dateien mit integriertem BIC-Verzeichnis und Konto- nummern-Prüfverfahren, so dass ungültige Bankdaten bereits im Vorfeld ermittelt werden können. Weitere InfosTipp des Monats Access-Tools Vol.1
Über 400 MByte Inhalt
Mehr als 250 Access-Beispiele, 25 Add-Ins und ActiveX-Komponenten, 16 VB-Projekt inkl. Source, mehr als 320 Tipps & Tricks für Access und VB
Nur 24,95 EURWeitere Infos
|
|
|
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
|
|