달력

52024  이전 다음

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
.NET 에 보면 ListView 라는 것이 있다.
평소 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 모드도 사용하게 되면 사용 후 정리해서 올려보겠습니다.
Posted by SadDev
|