! 제품 버전을 정확하게 입력해 주세요.
제품 버전이 정확하게 기재되어 있지 않은 경우,
최신 버전을 기준으로 안내 드리므로
더욱 빠르고 명확한 안내를 위해
제품 버전을 정확하게 입력해 주세요!

컬럼 정렬 시 텍스트 정렬 문의드립니다 > Q&A | 토론

본문 바로가기

Spread.NET

Q&A | 토론

WinForms윈폼 컬럼 정렬 시 텍스트 정렬 문의드립니다

페이지 정보

작성자 chen0516 작성일 2024-04-29 09:33 조회 38회 댓글 0건
제품 버전 : Spread .NET 13
컨트롤 이름 : AutoSortColumn

본문

안녕하세요

AutoSortColumn 관련 문의드립니다.


현재는 번호와 텍스트가 섞여있을때 번호까지 단순 텍스트라 고려하고 1이 무조건 먼저 정렬 되는것같은데,

혹시 번호와 텍스트가 섞여있는 데이터를 번호순으로 정렬이 가능할까요?


text celltype일때 정렬이 어렵다면 다른 celltype으로 변경도 고려중입니다.

 Private Sub Form6_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        fp1.Sheets(0).RowCount = 14
        fp1.Sheets(0).Cells(0, 0).Text = "1. 텍스트"
        fp1.Sheets(0).Cells(1, 0).Text = "2. 텍스트"
        fp1.Sheets(0).Cells(2, 0).Text = "3. 텍스트"
        fp1.Sheets(0).Cells(3, 0).Text = "4. 텍스트"
        fp1.Sheets(0).Cells(4, 0).Text = "5. 텍스트"
        fp1.Sheets(0).Cells(5, 0).Text = "6. 텍스트"
        fp1.Sheets(0).Cells(6, 0).Text = "7. 텍스트"
        fp1.Sheets(0).Cells(7, 0).Text = "8. 텍스트"
        fp1.Sheets(0).Cells(8, 0).Text = "9. 텍스트"
        fp1.Sheets(0).Cells(9, 0).Text = "10. 텍스트"
        fp1.Sheets(0).Cells(10, 0).Text = "11. 텍스트"
        fp1.Sheets(0).Cells(11, 0).Text = "12. 텍스트"
        fp1.Sheets(0).Cells(12, 0).Text = "13. 텍스트"
        fp1.Sheets(0).Cells(13, 0).Text = "14. 텍스트"

    End Sub

  Private Sub fp1_CellClick(sender As Object, e As CellClickEventArgs) Handles fp1.CellClick
        Dim iRow As Integer = fp1.Sheets(0).ActiveRowIndex
        Dim iCol As Integer = fp1.Sheets(0).ActiveColumnIndex

        If e.ColumnHeader = True Then
            If fp1.Sheets(0).Columns(e.Column).SortIndicator = Model.SortIndicator.None Or fp1.Sheets(0).Columns(e.Column).SortIndicator = Model.SortIndicator.Ascending Then
                fp1.Sheets(0).AutoSortColumn(e.Column, False)
            ElseIf fp1.Sheets(0).Columns(e.Column).SortIndicator = Model.SortIndicator.Descending Then
                fp1.Sheets(0).AutoSortColumn(e.Column, True)
            End If
        End If
    End Sub

 


  • 페이스북으로 공유
  • 트위터로  공유
  • 링크 복사
  • 카카오톡으로 보내기

댓글목록

등록된 댓글이 없습니다.

1 답변

WinForms윈폼 Re: 컬럼 정렬 시 텍스트 정렬 문의드립니다

추천1 이 글을 추천하셨습니다 비추천0 채택채택

페이지 정보

작성자 MESCIUS써니 작성일 2024-04-30 14:36 댓글 2건

본문

chen0516 님, 안녕하세요.

메시어스입니다.


적용하신 코드 및 참고 이미지와 함께 자세한 사항을 공유해주심에 감사드립니다.


말씀하신 현상은 셀에 입력된 데이터에서 숫자 부분도 텍스트로 인식되어 발생하는 현상입니다.


숫자를 기준으로 먼저 정렬한 후에, 이어지는 텍스트 순으로 정렬하고 싶으신 경우, IComparer 인터페이스를 상속 받는 사용자정의 클래스를 생성하여 그 기준에 따라 정렬되게 할 수 있습니다.


아래 샘플 코드를 참고하여주시기 바랍니다.

private void FpSpread1_CellClick(object sender, FarPoint.Win.Spread.CellClickEventArgs e)
{
    if (e.ColumnHeader)
    {
        bool ascending = fpSpread1.Sheets[0].Columns[e.Column].SortIndicator != FarPoint.Win.Spread.Model.SortIndicator.Ascending;
        fpSpread1.Sheets[0].SortRows(e.Column, ascending, true, new NumericTextComparer());
    }
}

public class NumericTextComparer : System.Collections.IComparer
{
    public NumericTextComparer()
    {
    }

    public int Compare(object x, object y)
    {
        if (x == null)
        {
            return y == null ? 0 : -1;
        }
        else if (y == null)
        {
            return 1;
        }

        if (x is string s1 && y is string s2)
        {
            int index1 = s1.IndexOf('.');
            int index2 = s2.IndexOf(".");
            if (index1 >= 0 && index2 >= 0)
            {
                if (int.TryParse(s1.Substring(0, index1), out int n1) && int.TryParse(s2.Substring(0, index2), out int n2))
                {
                    if (n1 < n2)
                    {
                        return -1;
                    }
                    else if (n1 > n2)
                    {
                        return 1;
                    }
                    else
                    {
                        return s1.Substring(index1 + 1).CompareTo(s2.Substring(index2 + 1));
                    }
                }
            }

            return s1.CompareTo(s2);
        }
        else if (x is IComparable c1)
        {
            return c1.CompareTo(y);
        }
        else if (y is IComparable c2)
        {
            return c2.CompareTo(x);
        }

        return 0;
    }
}

감사합니다.

메시어스 드림

댓글목록

chen0516님의 댓글

chen0516 작성일

요청드린대로 잘 정렬되고있습니다 감사합니다!

MESCIUS써니님의 댓글의 댓글

MESCIUS써니 작성일

도움이 되어 기쁩니다. :D
좋은 하루 보내시길 바랍니다!

메시어스 홈페이지를 통해 제품에 대해서 더 자세히 알아 보세요!
홈페이지 바로가기
메시어스 홈페이지를 통해 제품에 대해서 더 자세히 알아 보세요!
홈페이지 바로가기
이메일 : sales-kor@mescius.com | 전화 : 1670-0583 | 경기도 과천시 과천대로 7길 33, 디테크타워 B동 1107호 메시어스(주) 대표자 : 허경명 | 사업자등록번호 : 123-84-00981 | 통신판매업신고번호 : 2013-경기안양-00331 ⓒ 2024 MESCIUS inc. All rights reserved.