Autor
|
Thema: DataGridView / Spalten Sortierung Nummerisch (1539 / 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: 2624 Registriert: 18.10.2005 HP Z420 WIN7 64 Win 10 UG NX6-2212 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: 778 Registriert: 18.05.2005 SolidWorks 2020 x64 SP3.0 Dell Precision 5820 Intel Xeon W-2125 4x4GHz NVIDIA Quadro P2000 5GB 32GB RAM 2x Dell U2412M, 24" TFT Windows 10 Enterprise x64 21H1 Microsoft Office 365 ProPlus 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 |
| Technischer Systemplaner (m/w/d) Versorgungstechnik | VIVAWEST ist einer der führenden Wohnungsanbieter in NRW und bewirtschaftet rund 120.000 Wohnungen in ca. 100 Kommunen an Rhein und Ruhr. Für den Bereich Bestandstechnik, Fachbereich Technische Gebäudeausrüstung, suchen wir zum nächstmöglichen Zeitpunkt einen Mitarbeiter.
- Gewährleistung der klima- und unternehmensstrategiekonformen Planung einschließlich der Dokumentation von ...
| Anzeige ansehen | Gebäude-, Versorgungs-, Sicherheitstechnik |
|
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 |