Coloanele DataGridView sunt, în mod implicit, funcționalitatea fel conectează în mod automat de către pur și simplu clic pe antetul coloanei care conține datele pentru care doriți să sortați datele.
Fiecare coloană are o SortMode DataGridView de proprietate pe care le puteți seta în NoSortable, automat si programatic. Dacă nu vom schimba această proprietate, va fi pe automat.
Pentru mare de lucrări cu excepția cazului în care doriți să sortați după o coloană numerică. Datele numerice sunt sortate ca text, astfel încât pentru a nu va fi corect. Apoi, arata un exemplu, astfel încât să puteți înțelege mai bine.
De exemplu, avem nevoie de o formă și de control DataGridView. Adauga trei coloane numit nume, Grupul și scor. Ar trebui să vedeți ceva similar cu imaginea de mai jos:
Apoi adăugați acest cod în formă de încărcare a adăuga unele înregistrări:
Private Sub Form1_Load (expeditor ByVal ca obiect, ByVal e ca System.EventArgs) Manere MyBase.Load DataGridView1.Rows.Add (New String () {"Elisei", "utilizator", 24321}) DataGridView1.Rows.Add ( nou String () {"Carlos", "Sprijin", 122}) DataGridView1.Rows.Add (New String () {"Jose", "utilizator", 423}) DataGridView1.Rows.Add (New String () {" sebastian "," supervizor ", 1023}) DataGridView1.Rows.Add (New String () {" Javier "," utilizator ", 111}) DataGridView1.Rows.Add (New String () {" Sue "," utilizator " , 1}) DataGridView1.Rows.Add (String nou () {"Veronica", "supervizor", 24}) DataGridView1.Rows.Add (New String () {"Gabriela", "utilizator", 65}) DataGridView1. Rows.Add (nou String () {"Augustin", "utilizator", 719}) DataGridView1.Rows.Add (New String () {"Camila", "supervizor", 4322}) DataGridView1.Rows.Add (New String () {"Melisa", "utilizator", 654}) DataGridView1.Rows.Add (New String () {"Liliana", "suport", 22}) End Sub Acum, pentru a înțelege mai bine modul în care acestea ar trebui să ruleze programul și testul comandat de către cele trei coloane. Aici am vă va arăta cum, atunci când a dispus de coloana scor:
Ei bine, imaginea este foarte clar: 1, 1023, 111, 122, 22 ... nu ordinea corectă. Pentru a rezolva această problemă trebuie să schimbăm ordinea de coloană pentru a programatică evaluare automată.
Ei bine, acesta este doar primul pas acum trebuie să adăugați în formularul nostru de o noua clasa care se va programa pentru coloane numerice, clasa este după cum urmează:
Clasa publice OrdenarColumnaNumerica Implementează System.Collections.IComparer SortOrderModifier privat ca Integer = 1 Privat Col Ca Integer = 0 Public Sub New (ByVal sortOrder Ca SortOrder, coloana ByVal ca integer) Col = Coloana Dacă sortOrder = sortOrder.Descending Apoi, sortOrderModifier = -1 Apoi, elseif sortOrder = sortOrder.Ascending sortOrderModifier = 1 End If End Sub Funcția publică Comparați (ByVal x ca obiect, ByVal y ca obiect) Ca Integer _ Implementează System.Collections.IComparer.Compare DataGridViewRow1 Dim Ca DataGridViewRow = Ctype (x, DataGridViewRow) DataGridViewRow2 Dim Ca DataGridViewRow = Ctype (Y, DataGridViewRow) Reveni (Math.Sign (CLng (DataGridViewRow1.Cells (COL) Value) -.. CLng (DataGridViewRow2.Cells (COL) Value))) * sortOrderModifier End Function End Class
După ce ne-am clasa noastră să se ocupe de ordine coloană numerică, o numim de la eveniment ColumnHeaderMouseClick DataGridView după cum urmează:
DataGridView1_ColumnHeaderMouseClick Private Sub (expeditor ByVal ca obiect, e ByVal Ca System.Windows.Forms.DataGridViewCellMouseEventArgs) Manere DataGridView1.ColumnHeaderMouseClick Comanda static Integer = 1 Dacă DataGridView1.Rows.Count> 0 atunci Dacă DataGridView1.Columns (e.ColumnIndex). Name = "semne de punctuație" Atunci, În cazul în care comanda = 1, atunci DataGridView1.Sort (New OrdenarColumnaNumerica (SortOrder.Ascending, e.ColumnIndex)) Pentru = 0 Altfel DataGridView1.Sort (New OrdenarColumnaNumerica (SortOrder.Descending, e.ColumnIndex)) Pentru = 1 End If End If End If End Sub
Gata! Acum ai doar nevoie pentru a rula și testa programul. Acum, rezultatul va arăta ca în imaginea următoare a ordonat în mod corect:
Sper că vă pot oferi o bună utilizare a acestei tehnici.
Informații Bitacoras.com ...
Rata de Bitacoras.com: coloane DataGridView sunt, în mod implicit, funcționalitatea fel conectează în mod automat de către pur și simplu clic pe antetul coloanei care conține datele pentru care doriți să sortați ......
Bună ziua și a făcut tot exercițiul, cum ar fi acest lucru și am obține o eroare în coloana punctuație și a trebuit să-l plaseze ghilimele ", și, de asemenea, a poruncit să nu, vă rugăm să mă puteți ajuta ... muchas grasias
Hi, am găsit acest post foarte interesant, mă întreb cum ar putea face în cazul în care coloana are date, problema este că atunci când umple grila cu o interogare SQL, este convertit la VARCHAR pentru a-mi arate numai data, fără timp și nu găsesc o modalitate de a le comanda de la rețea
Am nevoie pentru a comanda un DataGrid, care este încărcată cu un set de date a unei interogări peste un tabel în SQL. CDO-am faceți clic pe numele de coloană, la comanda.
Vă mulțumesc foarte mult, am fost de putin ajutor. Am nevoie pentru a sorta de control DataGridView fără ca utilizatorul trebuie să faceți clic și cu ajutorul dumneavoastră am realizat ceea ce mi-am dorit.
O întrebare, așa cum a ordonat dupa data? Mulțumesc.
bun prieten, mi-o foarte mult acest lucru a ajutat ...
Buna ziua! Am o întrebare similară și eu nu pot rezolva. cineva mă poate ajuta? dacă așa că am trimite e-mail la mai multe întrebări detaliate, care pot ajuta. Mulțumesc. acest lucru este mea de mail: nelson_nn_0800@hotmail.com aprecia sa ma ajute!
I a lua acest mesaj de eroare dacă DataGridView1.Columns (e.ColumnIndex). Name = "semne de punctuație" Atunci,