DataGridView에 정렬

DataGridView에 열이 있으며, 기본적으로, 정렬 기능은 자동으로 단순히 데이터를 정렬하려는 데이터가 들어있는 열 머리글을 클릭하여 로그인합니다.

각 열은 우리가 NoSortable 자동프로그래밍에서 설정할 수있는 속성 SortMode의 DataGridView가있다. 우리가이 속성을 변경하지 않을 경우, 자동에있을 것입니다.

당신은 숫자 열을 기준으로 정렬하지 않으려면 순서는 잘 작동합니다. 그 순서가 정확하지 않을 수 있도록 숫자 데이터는 텍스트로 정렬됩니다. 당신이 더 잘 이해 할 수 있도록 다음 예를 보여줍니다.

예를 들어, 우리는 형태와 DataGridView 컨트롤이 필요합니다. 이름, 그룹과 점수라는 세 개의 열을 추가합니다. 당신은 다음 이미지와 비슷한 나타납니다 :

OrdenandoDatagridview001

다음 몇 가지 레코드를 추가 할 폼의 Load에서이 코드를 추가합니다 :

  개인 서브하여 Form1_Load (System.EventArgs으로 개체, ByVal을 전자로 ByVal로 보낸) 손잡이 MyBase.Load
     DataGridView1.Rows.Add (새로운 문자열 () { "엘리사", "사용자", 24321})
     DataGridView1.Rows.Add (새로운 문자열 () { "카를로스", "지원", 122})
     DataGridView1.Rows.Add (새로운 문자열 () { "호세", "사용자", 423})
     DataGridView1.Rows.Add (새로운 문자열 () { "세바스찬", "관리자", 1023})
     DataGridView1.Rows.Add (새로운 문자열 () { "하비에르", "사용자", 111})
     DataGridView1.Rows.Add (새로운 문자열 () { "슈", "사용자", 1})
     DataGridView1.Rows.Add (새로운 문자열 () { "베로니카", "관리자", 24})
     DataGridView1.Rows.Add (새로운 문자열 () { "가브리엘라", "사용자", 65})
     DataGridView1.Rows.Add (새 문자열 () { "어거스틴", "사용자", 719})
     DataGridView1.Rows.Add (새로운 문자열 () { "카밀라", "관리자", 4322})
     DataGridView1.Rows.Add (새로운 문자열 () { "의 Melisa", "사용자", 654})
     DataGridView1.Rows.Add (새로운 문자열 () { "릴리아나", "지원", 22})
 End Sub 참고 

지금, 그들은 세 개의 열을 기준으로 정렬 프로그램 테스트를 실행하는 방법을 잘 이해합니다. 여기에서는 점수 열을 기준으로 정렬하는 방법 때 표시됩니다 :

OrdenandoDatagridview002

음, 그림은 매우 분명하다 : 1, 1023 111, 122, 22 ...하지 올바른 순서. 이 문제를 해결하기 위해 우리는 프로그래밍 자동 평가에 열의 순서를 변경해야합니다.

OrdenandoDatagridview003

음, 지금은 우리의 양식으로 숫자 열의 순서를 예약하는 새로운 클래스를 추가 할 필요가 단지 첫 번째 단계, 클래스는 다음과 같습니다 :

  Public 클래스 OrdenarColumnaNumerica
     System.Collections.IComparer를 구현

     개인 sortOrderModifier으로 정수 = 1
     정수 = 0으로 개인 골

     공공 서브 뉴 (SORTORDER으로 ByVal로 SORTORDER, 정수로 ByVal로 열)
         COL = 열
         SORTORDER은 = 다음 sortOrder.Descending 경우
             sortOrderModifier = -1
         다음 ELSEIF SORTORDER는 = sortOrder.Ascending
             sortOrderModifier = 1
         종료하는 경우
     End Sub 참고

     공공 기능은 정수로 (객체와 객체, ByVal로 Y로 ByVal로 x)를 비교 _
         System.Collections.IComparer.Compare를 구현

         DataGridViewRow1 DataGridViewRow에 = CTYPE (X, DataGridViewRow를)로서 희미한
         DataGridViewRow에 = CTYPE (Y, DataGridViewRow를)로서 DataGridViewRow2 희미한

         * sortOrderModifier - (.. CLng 함수 (DataGridViewRow2.Cells (골) 값)) Math.Sign (CLng 함수 (DataGridViewRow1.Cells (골) 값))을 반환
     함수 끝
 최종 클래스 

일단 우리가 숫자 열 순서를 취급하는 우리의 클래스를 가지고, 우리는 다음과 같은 이벤트 ColumnHeaderMouseClick DataGridView에에서 호출 :

  DataGridView1_ColumnHeaderMouseClick 개인 서브 (System.Windows.Forms.DataGridViewCellMouseEventArgs으로 개체, ByVal로 이메일로 ByVal을 보낸 사람) 손잡이 DataGridView1.ColumnHeaderMouseClick

         정수 = 1로 고정 주문

         DataGridView1.Rows.Count> 0 그런 경우
             = "구두점"그럼 DataGridView1.Columns (e.ColumnIndex). 이름 경우
                 다음 순서 = 1 경우
                     DataGridView1.Sort (새 OrdenarColumnaNumerica (e.ColumnIndex을 SortOrder.Ascending))
                     주문 = 0
                 그렇지 않으면
                     DataGridView1.Sort (새 OrdenarColumnaNumerica (e.ColumnIndex을 SortOrder.Descending))
                     주문 = 1
                 종료하는 경우
             종료하는 경우
         종료하는 경우
     End Sub 참고 

준비! 이제 프로그램을 실행하고 테스트하는 것만이 필요합니다. 이제 결과는 다음 사진을 올바른 순서에 같이 표시됩니다 :

OrdenandoDatagridview004

난 당신이 기술을 잘 사용을 줄 수 있기를 바랍니다.

9 답변은 "DataGridView가 정렬"로

  1. Bitacoras.com는 말합니다 :

    정보 Bitacoras.com ...

    Bitacoras.com의 비율 : DataGridView에 열은 기본적으로, 정렬 기능은 자동으로 단순히 정렬하려는 데이터가 들어있는 열 머리글을 클릭하여 로그인하는 ......

    • 호세는 말합니다 :

      안녕하세요 이와 같은 모든 운동을 다하고 난 문장 열에 오류가 그에게 따옴표를 배치했다 "또한없는 명령, 당신이 저를 도와주세요 불법적으로 grasias을

  2. 오마르는 말합니다 :

    안녕, 난이 게시물이 매우 흥미로운 발견, 나는 열이 날짜가 있다면 그들이 할 수있는 방법을 궁금해, 문제는 SQL 쿼리와 그리드를 채울 때, 오직없이 저에게 날짜를 표시하는 VARCHAR로 변환하는 것입니다 시간이 아닙니다 그리드에서 그들을 주문하는 방법을 찾을

  3. 나탈리아는 말합니다 :

    내가 SQL에서 테이블에 쿼리의 데이터 집합으로로드되는 데이터 그리드를 주문해야합니다. 내가 주문, 컬럼의 이름을 클릭 CDO.

  4. Nerio Espina는 말합니다 :

    대단히 감사합니다, 나는 약간의 도움이었다. 사용자가 클릭하고 당신의 도움으로 내가 원하는 것을 달성했다없이 나는 Da​​taGridView 컨트롤을 정렬하는 데 필요한.

  5. 알바는 말합니다 :

    질문이 하나, 같은 날짜에 의해 정렬? 감사합니다.

  6. 조엘은 말합니다 :

    좋은 친구는 저 많은이 도움이 ...

  7. BGTT는 말합니다 :

    안녕하세요! 제가 비슷한 질문을하고 난 해결할 수 없습니다. 누구든지 나를 도울 수 있습니까? 그렇다면 나는 당신의 전자 우편에 도움이 될 수 있습니다 더 자세한 질문을 보내십시오. 감사합니다. 이 내 메일입니다 : nelson_nn_0800@hotmail.com는 저를 도와 주셔서 감사합니다!

  8. 막대는 말합니다 :

    나는 Da​​taGridView1.Columns (e.ColumnIndex). 이름 경우 = "구두점"그럼이 오류 메시지가

논평