Study/C#, Winform

[C# Winform] DataGridView Column Header Drag (컬럼 헤더 드래그)

2022. 10. 24. 21:41
목차
  1. 참고 자료

Winform 에서 데이터를 표로 나타낼때 주로 DataGridView를 사용합니다.

 

여기서 Column의 Header를 Drag 할 수 있게 하는 옵션이 존재합니다.

dataGridView1.AllowUserToOrderColumns = true;

바로 AllowUserToOrderColumns 라는 옵션입니다.

이렇게 UI 컨트롤 속성에서도 제공하고 있는 옵션입니다.

 

이 옵션이 true인 경우 사용자가 Column의 Header를 Click한 채로 Drag하면 해당 Column이 옮겨집니다.

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();

        // DataGridView의 Name은 dataGridView1
        dataGridView1.AllowUserToOrderColumns = true;
        dataGridView1.Rows.Add(new string[] { "1", "홍길동", "20" });
        dataGridView1.Rows.Add(new string[] { "2", "김민수", "30" });
        dataGridView1.Rows.Add(new string[] { "3", "장발장", "40" });
    }
}

소스코드는 위와 같으며

Column은 위와 같이 설정되어 있습니다.

(No, Name, Age 라는 Column이 존재, 전부 DataGridViewTextBoxColumn)

 

이렇게 Drag 하여 Column이 움직이게 됩니다.

 

하지만 여기서 함정이 하나 있는데 0번 열의 No를 1번 열의 위치로 옮긴다고 해서 실제 열의 번호가 바뀌지는 않습니다.

 

이것을 확인하기 위해서 CellMouseDown 이벤트와 CellMouseUp 이벤트로 확인하여 봅시다.

private void dataGridView1_CellMouseDown(object sender, DataGridViewCellMouseEventArgs e)
{
    Debug.WriteLine($"Cell Mouse Down - Column Index : {e.ColumnIndex}");
}

private void dataGridView1_CellMouseUp(object sender, DataGridViewCellMouseEventArgs e)
{
    Debug.WriteLine($"Cell Mouse Up - Column Index : {e.ColumnIndex}");
}

Cell을 클릭(Down) 했을 때와 클릭 후 마우스를 뗐을 때(Up)의 Column Index를 출력하여 봅시다.

결과를 보시면 Column의 위치가 바뀌었더라도 ColumnIndex는 원래의 위치를 가리키고 있습니다.

 

이 ColumnIndex는 실제 데이터의 Column Index를 의미하고 UI에서 출력하고 있는 Column의 Index는 DisplayIndex를 사용해야 합니다.

private void dataGridView1_CellMouseDown(object sender, DataGridViewCellMouseEventArgs e)
{
    Debug.WriteLine($"Cell Mouse Down - Display Index : {dataGridView1.Columns[e.ColumnIndex].DisplayIndex}");
}

private void dataGridView1_CellMouseUp(object sender, DataGridViewCellMouseEventArgs e)
{
    Debug.WriteLine($"Cell Mouse Up - Display Index : {dataGridView1.Columns[e.ColumnIndex].DisplayIndex}");
}

해당 Column이 Display 되고 있는 Index를 출력합니다.

 

 

참고 자료

 

DataGridView 컨트롤에서 열 다시 정렬 사용 - Windows Forms .NET Framework

사용자가 열을 새 위치로 끌 수 있도록 DataGridView 컨트롤에서 열 순서를 다시 지정하는 방법을 알아봅니다.

learn.microsoft.com

 

DataGridViewCell.ColumnIndex 속성 (System.Windows.Forms)

이 셀의 열 인덱스를 가져옵니다.

learn.microsoft.com

 

DataGridViewColumn.DisplayIndex 속성 (System.Windows.Forms)

현재 표시된 열에 상대적인 열의 표시 순서를 가져오거나 설정합니다.

learn.microsoft.com

 

저작자표시 비영리 변경금지 (새창열림)

'Study > C#, Winform' 카테고리의 다른 글

[C# Winform] PropertyGrid 에서 DisplayName 우선순위  (0) 2022.12.26
[C#] 배열 정렬 기능 (Sort)  (0) 2022.12.10
[C#] DateTime 시간 자르기, 반올림, 반내림, 가까운 값  (1) 2022.10.11
[C#] Enumerable 에서 중복 데이터 삭제 (Distinct)  (0) 2022.10.06
[C# Winform] 스크롤바 크기 (넓이)  (0) 2022.10.04
  • 참고 자료
'Study/C#, Winform' 카테고리의 다른 글
  • [C# Winform] PropertyGrid 에서 DisplayName 우선순위
  • [C#] 배열 정렬 기능 (Sort)
  • [C#] DateTime 시간 자르기, 반올림, 반내림, 가까운 값
  • [C#] Enumerable 에서 중복 데이터 삭제 (Distinct)
Eskeptor
Eskeptor
Eskeptor
Hello World
Eskeptor
전체
오늘
어제
  • 분류 전체보기 (138)
    • Computer (5)
      • Linux (1)
      • Hardware (2)
      • Software (0)
      • Tips (1)
      • Website (0)
    • Mobile (1)
      • Application (1)
    • Study (108)
      • Android (9)
      • C언어 (45)
      • C++ (17)
      • Unity 5(유니티5) (11)
      • Qt 프로그래밍 (2)
      • MFC (12)
      • C#, Winform (12)
    • My World (24)
      • OpenPad(Android) (12)
      • 한글 패치 (1)
      • C#으로 만든 귀요미들 (5)
      • MFC로 만든 귀요미들 (6)
    • Life Goes On (0)
      • Hip Hop (0)

블로그 메뉴

  • 홈
  • 태그
  • 미디어로그
  • 위치로그
  • 방명록

공지사항

인기 글

태그

  • C언어
  • Java
  • 만들기
  • Android
  • c++11
  • C++
  • 강의
  • 자바
  • 기본
  • 왕초보
  • C#
  • 자료구조
  • 배열
  • 포인터
  • 유니티
  • 안드로이드
  • MFC
  • Tetris
  • 초보
  • 오픈패드
  • 메모장
  • 슈팅게임
  • 프로그래밍
  • 비행기
  • 테트리스
  • openpad
  • 강좌
  • Unity
  • 기초
  • 알고리즘

최근 댓글

최근 글

hELLO · Designed By 정상우.
Eskeptor
[C# Winform] DataGridView Column Header Drag (컬럼 헤더 드래그)
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.