c# ListView 기본 예제
데이터를 그리드나 리스트 형태로 출력해야 한다면 우선 DataGridView를 생각해 볼 수 있다. 그러나 이건 편하긴 하지만 느리고 데이터 바인드를 전제로 하기 때문에 직접 제어하는 경우 여러 문제들이 생긴다. 그 대표적인 예가 지나친 메모리 점유다. 그러나 엄격하게 지적하자면 DataGridView로 인해 생기는 여러 문제들은 이거를 적당하지 않은 용도로 이용해서 그런 게 아니라 애당초 이걸 잘못 만들어서 그런 거다. .네트를 델파이와 비교해 보면 연산 능력은 크게 떨어지지 않는다. 어차피 중요한 부분들은 .네트도 내이티브로 만들어져 있기 때문이다. 그러나 비주얼 컨트롤들의 완성도는 .네트가 유서由緖 깊은 델파이에 역시 미치지 못한다. 윈도우즈 표준 컨트롤이야 델파이도 윈도우즈 api를 wrap하여 쓰기 때문에 .네트로 구현한다고 다를 게 없지만 DataGridView처럼 윈도우즈 표준 컨트롤이 아닌 .네트 고유의 컨트롤은 델파이의 유사한 컨트롤에 비해 성능이나 완성도가 떨어진다.
DataGridView를 DataTable 같은 거와 연결해서 쓸 게 아니라 직접 추가하고 삭제해 가면서 쓸 거면 ListView를 쓰는 게 더 좋다. 간단한 이용 방법은 아래와 같다.
private void Form1_Load(object sender, EventArgs e)
{
// 모양을 목록 형태로 한다. 디자이너로 설정할 수 있다.
listView1.View = View.Details;
// 모양을 details로 설정하면 칼럼을 최소한 하나는 만들어야 한다.
listView1.Columns.Add("column 0");
// 칼럼 헤더를 보이지 않게 한다.디자이너로 설정할 수 있다.
listView1.HeaderStyle = ColumnHeaderStyle.None;
// 칼럼의 폭이 자동으로 조절되는 기능을 구현하기 위해 실제로 출력될 내용의 폭보다 ListView의 폭을 좁게 설정한다. 디자이너로 설정할 수 있다.
listView1.Width = 100;
// 길게 출력될 내용을 만들어 넣는다.
for (int i = 0; i < 10; i++)
{
listView1.Items.Add(i.ToString() + "aaaaaaaaaaaaaaa");
}
// 글꼴의 색을 바꾼다.
listView1.Items[0].ForeColor = Color.Red;
// 글꼴의 스타일을 바꾼다.
listView1.Items[1].Font = new(Font, FontStyle.Bold);
// 칼럼의 폭이 자동으로 조절된다. 내용이 추가된 뒤에 실행해야 하며 추가될 때마다 실행해야 한다.
listView1.Columns[0].Width = -1;
}
private void button1_Click(object sender, EventArgs e)
{
// 아이템들의 위치가 바뀌어 인덱스가 바뀌어도 기존 속성은 유지된다.
listView1.Items.Insert(0, "abcde");
}
// 선택한 아이템의 내용을 출력한다.
private void listView1_SelectedIndexChanged(object sender, EventArgs e)
{
if (listView1.SelectedItems.Count > 0)
{
Text = listView1.SelectedItems[0].Text.ToString();
}
}