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를 출력합니다.
참고 자료
'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 |