Sortare DataGridView

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:

OrdenandoDatagridview001

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:

OrdenandoDatagridview002

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ă.

OrdenandoDatagridview003

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:

OrdenandoDatagridview004

Sper că vă pot oferi o bună utilizare a acestei tehnici.

9 Responses to "Sortarea DataGridView"

  1. Bitacoras.com spune:

    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 ......

    • jose spune:

      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

  2. Omar spune:

    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

  3. Natalia spune:

    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.

  4. Nerio Espina spune:

    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.

  5. Alvaro spune:

    O întrebare, așa cum a ordonat dupa data? Mulțumesc.

  6. Joel spune:

    bun prieten, mi-o foarte mult acest lucru a ajutat ...

  7. BGTT spune:

    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!

  8. tija spune:

    I a lua acest mesaj de eroare dacă DataGridView1.Columns (e.ColumnIndex). Name = "semne de punctuație" Atunci,

Comentariu