.NET 에 보면 ListView 라는 것이 있다.
평소 ListBox 를 사용하다가 여러개의 컬럼이 들어가는 리스트가 필요해 ListView를 사용할 계기가 생겼다.
이것 저것 알아보고 ListView를 사용..
일반적으로 우리가 알고 있는 윈도우탐색기를 생각하면 된다.
아래는 우리가 알고 있는 일반적인 탐색기의 모습이다.
보기 -> 아이콘(작은아이콘) 상태에서는 아래 처럼 아이콘과 파일(폴더)의 이름이 표시된다.
아래는 보기 -> 자세히를 선택한 상태다.
자세히 보기 상태는 보통 한눈에 다 볼수 있도록 정보가 표시된다.
보통 ListView 기능은 위 두가지 기능에 많이 사용되며 특히 두번째와 같은 형식으로 많이 쓴다.
ListView 를 이용하면 우리가 DB 작업에서 흔히 사용하는 쿼리분석기의 결과 창처럼 표시도 가능하다.
아래는 각각 쿼리분석기에서 실행한 결과 창과 ListView를 이용하여 만들어본 샘플의 결과이다.
처음 ListView 컨트롤을 봤을 때는 단순히 "ListBox와 비슷하겠지" 라는 생각만으로 너무 간단히 봤다..
하지만 뭔가 다른게 많았다..
이런 다른점들을 몇개 정리 해 보려한다.
1. ColumnHeader
- ColumnHeader는 위의 샘플에서 보면 UserID / Password 와 같이 컬럼의 헤더 부분에 들어가는 영역을 말한다.
컬럼헤더의 사용법
와 같이 사용한다.
2. ListViewItem
- ListView의 경우 ListViewItem 컨트롤을 사용한다. ListView에 들어가 있는 각각의 항목들에 관한 내용이다.
ListViewItem 의 추가 방법
위처럼 사용한다.
3. 내용 복사
- ListView 에 입력된 내용을 ClipBoard(Ctrl+C)로 복사 한다.
우선 ListView에 특정 이벤트를 추가하던가. 아니면 별도의 버튼으로 이벤트를 만든다. 예제에서는 별도의 버튼의 클릭이벤트를 사용하겠습니다.
출처는 구글에서 검색했는데 까먹었네요.
위와 같이 작업 하여 엑셀이나 메모장 등에 붙여 넣기 하여 사용할 수 있습니다.
4. 헤더 클릭 시 정렬 하기.
- 이것도 아직 수정이 필요한 사항...
클릭하면 오름차순, 다시 누르면 내림차순이 아니라. 그냥 무조건 오름 차순으로 정렬되는 단점이 있지만 그래도 이게 어딘가 ;.... 라는 생각으로 ..
저 같은 초보 분들에게는 조금이라도 도움이 되길 바라며..
조만간 LargeIcon 모드도 사용하게 되면 사용 후 정리해서 올려보겠습니다.
평소 ListBox 를 사용하다가 여러개의 컬럼이 들어가는 리스트가 필요해 ListView를 사용할 계기가 생겼다.
이것 저것 알아보고 ListView를 사용..
일반적으로 우리가 알고 있는 윈도우탐색기를 생각하면 된다.
아래는 우리가 알고 있는 일반적인 탐색기의 모습이다.
보기 -> 아이콘(작은아이콘) 상태에서는 아래 처럼 아이콘과 파일(폴더)의 이름이 표시된다.
아래는 보기 -> 자세히를 선택한 상태다.
자세히 보기 상태는 보통 한눈에 다 볼수 있도록 정보가 표시된다.
보통 ListView 기능은 위 두가지 기능에 많이 사용되며 특히 두번째와 같은 형식으로 많이 쓴다.
ListView 를 이용하면 우리가 DB 작업에서 흔히 사용하는 쿼리분석기의 결과 창처럼 표시도 가능하다.
아래는 각각 쿼리분석기에서 실행한 결과 창과 ListView를 이용하여 만들어본 샘플의 결과이다.
<쿼리 분석기의 결과 창>
<Sample 프로그램의 결과창>
처음 ListView 컨트롤을 봤을 때는 단순히 "ListBox와 비슷하겠지" 라는 생각만으로 너무 간단히 봤다..
하지만 뭔가 다른게 많았다..
이런 다른점들을 몇개 정리 해 보려한다.
1. ColumnHeader
- ColumnHeader는 위의 샘플에서 보면 UserID / Password 와 같이 컬럼의 헤더 부분에 들어가는 영역을 말한다.
컬럼헤더의 사용법
ColumnHeader cHeader = new ColumnHeader(); // 헤더 생성 cHeader.Text = "UserID"; // 헤더에 들어갈 텍스트 cHeader.Width = 150; // 헤더의 크기 ListView1.Columns.Add(cHeader); // ListView에 헤더컬럼 추가
와 같이 사용한다.
2. ListViewItem
- ListView의 경우 ListViewItem 컨트롤을 사용한다. ListView에 들어가 있는 각각의 항목들에 관한 내용이다.
ListViewItem 의 추가 방법
ListViewItem lItem = new ListViewItem("test001"); // 첫번째 컬럼에 들어갈 내용을 ListViewItem 생성시 입력한다. lItem.SubItem.Add("비밀번호1"); // 두번째 컬럼에 들어갈 내용부터는 SubItem 을 사용하여 추가한다. lItem.SubItem.Add("이름1") ; // 마찬가지로 앞으로 주욱~~ SubItem 으로 추가하면 옆으로 계속 내용이 늘어난다. ListView1.Item.Add(lItem); // ListView에 Item 추가
위처럼 사용한다.
3. 내용 복사
- ListView 에 입력된 내용을 ClipBoard(Ctrl+C)로 복사 한다.
우선 ListView에 특정 이벤트를 추가하던가. 아니면 별도의 버튼으로 이벤트를 만든다. 예제에서는 별도의 버튼의 클릭이벤트를 사용하겠습니다.
출처는 구글에서 검색했는데 까먹었네요.
private void btnCopy_Click(object sender, EventArgs e) // 버튼 클릭 이벤트 { ListView lv = lvList; // ListView 에 원본 ListView 를 복사 StringBuilder buffer = new StringBuilder(); for (int i = 0; i < lv.Columns.Count; i++) // 컬럼 카운트 만큰 루프를 돌면서 헤더 항목 복사 { buffer.Append(lv.Columns[i].Text); buffer.Append("\t"); } buffer.Append("\n"); for (int i = 0; i < lv.Items.Count; i++) //아이템 카운트 만큼 루프를 돌면서 항목 복사 { for (int j = 0; j < lv.Columns.Count; j++) { buffer.Append(lv.Items[i].SubItems[j].Text); buffer.Append("\t"); } buffer.Append("\n"); } Clipboard.SetText(buffer.ToString()); // 클립보드에 내용 복사 MessageBox.Show("ClipBoard에 복사 되었습니다. Ctrl+V로 붙여넣기 하여 사용할 수 있습니다."); }
위와 같이 작업 하여 엑셀이나 메모장 등에 붙여 넣기 하여 사용할 수 있습니다.
4. 헤더 클릭 시 정렬 하기.
- 이것도 아직 수정이 필요한 사항...
클릭하면 오름차순, 다시 누르면 내림차순이 아니라. 그냥 무조건 오름 차순으로 정렬되는 단점이 있지만 그래도 이게 어딘가 ;.... 라는 생각으로 ..
private void lvList_ColumnClick(object sender, ColumnClickEventArgs e) { lvList.ListViewItemSorter = new ListViewItemComparer(e.Column); } // Implements the manual sorting of items by columns. class ListViewItemComparer : IComparer // ICompare는 using System.Collections; 를 잊지 말아야 함. { private int col; public ListViewItemComparer() { col = 0; } public ListViewItemComparer(int column) { col = column; } public int Compare(object x, object y) { return String.Compare(((ListViewItem)x).SubItems[col].Text, ((ListViewItem)y).SubItems[col].Text); } }
저 같은 초보 분들에게는 조금이라도 도움이 되길 바라며..
조만간 LargeIcon 모드도 사용하게 되면 사용 후 정리해서 올려보겠습니다.
'프로그래밍 > C#' 카테고리의 다른 글
BinaryWriter pointer 사용(seek) (0) | 2012.08.06 |
---|---|
[ASP.NET C#]이미지 메타태그 값 수정하기 / keyword, comment / EXIF (0) | 2011.12.08 |
[C#] DataGridViewRow 복사 (0) | 2010.07.05 |
[C#] MessageBox의 기능 (1) | 2010.07.05 |
[C#] DataGridView (0) | 2010.07.02 |