본문 바로가기
프로그래밍/C#

[C#] ListView 컨트롤 사용하기

by oedpus 2010. 12. 17.
[도구 상자] -> [공용 컨트롤] -> ListView 컨트롤 추가

컨트롤 ID는 기본 속성인 listView1을 사용

여러가지 컬럼을 보여 주기 위해 View 속성을 Detail 로 수정

>> cs파일로 이동

listView1.Columns.Add("", 0);
listView1.Columns.Add(new ColHeader("Column", 120, HorizontalAlignment.Left, true));
listView1.Columns.Add(new ColHeader("소요 시간", 100, HorizontalAlignment.Left, true));
listView1.Columns.Add(new ColHeader("도전 횟수", 100, HorizontalAlignment.Left, true));

위와 같이 ListView에 컬럼을 추가 해 줌
처음 컬럼 추가가 비워져 있는데 이는 나중에 ListViewItem을 이용해 행을 추가 하는 부분에서 설명하기로 한다.
ColHeader는 다음 포스트에 소개할 ListView의 컬럼을 클릭하면
데이터가 정렬이 되기 위해 추가한 클래스인데
현재 클래스가 추가되어 있지 않으므로 오류가 발생할 것이다. 이 부분은 msdn을 참고하여 생성하면 된다.

위 소스의 요점은 컬럼을 추가! 이것만 기억하기로 한다.

다음은 컬럼에 데이터를 추가하는 부분이다.

string[] str = temp.Split('#');
ListViewItem[] subitem = new ListViewItem[str.GetLength(0)/3];

임의의 데이터를 # 을 기점으로 잘라낸 후 str 배열에 집어 넣는다.
예로 temp 에 "1#2#3#4#5#6" 이 들어 왔다면 # 단위로 잘라 str[0] = 1, str[1] = 2 ..., str[5]=6 이와 같은 방식으로 들어간다.

위에서 추가하려는 컬럼이 3개이므로 배열의 사이즈를 3을 나눈만큼의 ListViewItem을 생성한다.

하나의 ListViewItem을 생성해 줄 경우 ListViewItem subitem = new ListViewItem("0번째 데이터"); 와 같이 생성해 줄 수 있으나
생성 시 " " 안에 내용을 생략하고 ()로 생성하게 될 경우 첫번째 컬럼 값은 공백으로 저장되게 된다.
그러므로 위에 컬럼 생성시 첫번째 컬럼에 아무런 속성을 주지 않고 사이즈를 0으로 주어 보이지 않도록 표현하였다.

int cnt = 1;
int index = 0;

for (int i = 0; i < str.GetLength(0); i++)
{
    if (cnt % 3 == 0 && i != 0)
    {
        subitem[index].SubItems.Add(str[i]);
        listView1.Items.Add(subitem[index]);
        cnt++;
        index++;
    }
    else
    {
        if (subitem[index] == null)
        {
            subitem[index] = new ListViewItem();
        }

        subitem[index].SubItems.Add(str[i]);
        cnt++;

    }
}

ListViewItem 에 데이터를 채워넣는 과정이다.
위에서 ListViewItem을 저장할 수 있는 공간만 생성하고
생성자를 호출하지 않아 객체가 생성되지 않았으므로
subitem[index] = new ListViewItem(); 와 같이 해당 인덱스의 배열에 객체를 생성한다.
subitem[index].SubItems.Add(str[i]); 을 이용해 각각의 컬럼들을 채워넣어 준 후
listView1에 데이터가 저장된 subitem[index]를 listView1.Items.Add(subitem[index]); 와 같이 추가해준다.

지금까지 ListView 컨트롤에 데이터를 집어 넣는 방법을 적어 보았다.

다음 포스트는 데이터를 추가한 리스트뷰를 정렬하는 방법에 대해서 보도록 하겠다.

'프로그래밍 > C#' 카테고리의 다른 글

[C#] ListView 자료 정렬하기  (0) 2010.12.20

댓글