| |
| Xometry ermöglicht JTW Astronomy die Herstellung hochwertiger Trident Teleskophalterungen, ein Anwenderbericht
|
Autor
|
Thema: DataGridView / Spalten Sortierung Nummerisch (1712 / mal gelesen)
|
Dirk.B Mitglied Tischler / Leiter Arbeitsvorbereitung
Beiträge: 534 Registriert: 25.11.2003
|
erstellt am: 06. Feb. 2019 10:25 <-- editieren / zitieren --> Unities abgeben:
Guten Morgen Zusammen, Ich befüll ein DataGridView mit Werten aus einer SQL-DB / Tabelle. In der Spalte "BA-Nr." stehen ausschließlich Zahlen 1 - ... 1000 + X. Diese werden so aufgelistet: 1 10 120 1000 2 20 ... etc.
Wie bekomme ich es hin, dass diese nach der richtigen Reihenfolge angezeigt werden: 1 2 3 4 ... 10 ... 100 ... 200 ... 1000 ... etc. Code:
'--START--Grundeinstellungen im DataGridView--------------------------- DGV_BA.DataSource = Nothing With DGV_BA '--Spaltenköpfe---------------------------------------------------- .Columns.Clear() .DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleLeft .ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.DisableResizing .ColumnHeadersBorderStyle = DataGridViewHeaderBorderStyle.Sunken .ColumnHeadersHeight = 22 .ColumnHeadersDefaultCellStyle.Font = New Drawing.Font("Arial", 8) '//;; '--Zeilen---------------------------------------------------------- .Rows.Clear() .RowHeadersVisible = False .RowsDefaultCellStyle.WrapMode = DataGridViewTriState.False .RowsDefaultCellStyle.BackColor = Drawing.Color.White .AlternatingRowsDefaultCellStyle.BackColor = Drawing.Color.Beige .RowsDefaultCellStyle.Font = New Drawing.Font("Arial", 8) '//;; '------------------------------------------------------------------ .SelectionMode = DataGridViewSelectionMode.FullRowSelect .MultiSelect = False .AllowUserToAddRows = False .AllowUserToDeleteRows = False .AllowUserToResizeColumns = False .AllowUserToResizeRows = False .ReadOnly = True '//;; End With '--ENDE--Grundeinstellungen im DataGridView---------------------------- '--Anpassung / Spaltennamen + Spaltenbreiten--------------------------- With DGV_BA '--Hinzufügen der CheckBox in Spalte 1----------------------------- .Columns.Insert(0, DGV_ChkBox) .Columns(0).Width = 25 .Columns(0).SortMode = DataGridViewColumnSortMode.NotSortable .Columns(0).DefaultCellStyle.BackColor = Color.Gray '--Hinzufügen der Darstellung für den BA-Status-------------------- .Columns.Insert(1, BA_Status) .Columns(1).HeaderText = "BA-Status" .Columns(1).Width = 110 .Columns(1).SortMode = DataGridViewColumnSortMode.NotSortable .Columns(1).DefaultCellStyle.BackColor = Color.Gray '------------------------------------------------------------------ .Columns(2).HeaderText = "Projekt-Nr." .Columns(2).Width = 58 .Columns(2).SortMode = DataGridViewColumnSortMode.NotSortable .Columns(2).DefaultCellStyle.BackColor = Color.Gray '------------------------------------------------------------------ '//;; In dieser Spalte soll die Sortierung erfolgen ///////////// '//;;1 / 10 / 20 ... 80 ... 100 ... 200 ... 1000 etc. ///////////// .Columns(3).HeaderText = "BA-Nr." .Columns(3).ValueType = GetType(Integer) .Columns(3).Width = 52 .Columns(3).SortMode = DataGridViewColumnSortMode.NotSortable .Columns(3).DefaultCellStyle.BackColor = Color.Gray '------------------------------------------------------------------ .Columns(4).HeaderText = "LV Pos.-Nr." .Columns(4).Width = 70 .Columns(4).SortMode = DataGridViewColumnSortMode.NotSortable .Columns(4).DefaultCellStyle.BackColor = Color.Gray '------------------------------------------------------------------
Vielen Dank für eure Hilfe.
------------------ Gruß Dirk Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mseufert Ehrenmitglied V.I.P. h.c. Freiberuflicher CAD/CAM Ingenieur
Beiträge: 2700 Registriert: 18.10.2005 HP Z420 WIN7 64 Win 10 UG NX6-2306 3D Printer Prusa MK2 S
|
erstellt am: 06. Feb. 2019 14:35 <-- editieren / zitieren --> Unities abgeben: Nur für Dirk.B
Hallo Dirk, das geht mit einer eigenen Klasse, die IComparer implementiert. Beispiel findest Du hier Gruß, Michael ------------------ Ein Mensch wird laut, wenn er was will; wenn er's erst hat, dann wird er still; Das "Danke" ist, nach alter Sitte, Weit selt'ner als das "Bitte, Bitte". Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
HenryV Mitglied Konstrukteur, Engineering
Beiträge: 817 Registriert: 18.05.2005 SolidWorks 2022 x64 SP5.0 Dell Precision 5820 Intel Xeon W-2125 4x4GHz NVIDIA Quadro P2000 5GB 32GB RAM 2x Dell U2412M, 24" TFT Windows 10 Enterprise x64 22H2 Microsoft 365 E5 Microsoft Visual Studio Enterprise 2022
|
erstellt am: 06. Feb. 2019 16:31 <-- editieren / zitieren --> Unities abgeben: Nur für Dirk.B
Hallo Dirk Ich nehme an das dein DataGridView ungebunden ist. Dann kannst du das SortCompare-Event des DataGridViews verwenden um das Sortierverhalten zu ändern. Code: Private Sub DGV_BA_SortCompare(sender As Object, e As System.Windows.Forms.DataGridViewSortCompareEventArgs) Handles DGV_BA.SortCompare 'Suppose your interested column has index 3 If e.Column.Index = 3 Then e.SortResult = Integer.Parse(e.CellValue1.ToString()).CompareTo(Integer.Parse(e.CellValue2.ToString())) 'pass by the default sorting e.Handled = True End If End Sub
Andernfalls (bei gebundenem DataGridView) solltest du den Spaltentyp der DataTable ändern. Gruss Andreas ------------------ 21 ist nur die halbe Antwort. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Dirk.B Mitglied Tischler / Leiter Arbeitsvorbereitung
Beiträge: 534 Registriert: 25.11.2003
|
erstellt am: 11. Feb. 2019 15:16 <-- editieren / zitieren --> Unities abgeben:
Hallo Michael! Hallo Andreas! Danke für eure Tipps. @Andreas Entscheidend war der Hinweis auf den Spaltentyp des DataTables.
Code:
.Columns(1).DataType = Type.GetType("System.Int32")
Nun funktioniert es wie gewünscht. ------------------ Gruß Dirk Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |