본문 바로가기
개발언어/C#

[C#] LISTVIEW 기능 분석

by 창용이랑 2021. 8. 10.
728x90

ListView는 목록을 표시하는 컨트롤이다.

ListView 를 Layout 에 추가하는 방법은 도구상자에게 ListView 를 Drag 해서 뿌려질 화면위에 놓는다.

 

 

 

 

 

 

 

폼에서 설정해주면 *.Designer.cs 파일에 설정값이 저장된다.

this.listView1.GridLines = true;

this.listView1.View = System.Windows.Forms.View.Details;

폼 UI 에서 설정하지 않고 사용자 소스파일에서 listView1.View = View.Details; 라고 직접 설정해줘도 된다.

 

FullRowSelect : 항목이 선택될 때 하위 항목까지 한줄 전체를 선택한다.

MultiSelect : 복수 개의 항목을 선택할 수 있는지를 지정한다.

LabelEdit : 실행 중에 항목을 직접 편집할 수 있는지의 여부를 지정한다. default 는 false 이다.

LabelWrap : 항목의 텍스트를 줄바꿈하여 출력할 것인가를 지정한다.

Focuseditem : 현재 포커스를 가진 항목을 조사한다.

 

 

ListView 의 열(Column)의 편집은 칼럼(열)의 헤더를 설정(text, size)하는 방법이다.

 

 

 

 

 

칼럼 헤더의 Text, TextAlign, Width 를 지정한다.

 

 

 

 

 

 

 

 

dataGridView 와는 달리 listView 에서는 행(Row)는 첫열을 기준으로 해서 Item, 다음열부터는 subItem 으로 값을 입력한다.

 

 

 

 

listView1.Items.Clear(); // 데이터 내용 전부 지우기

listView1.Items.Count;  // 전체 항목의 개수 카운트

 

// listView 헤더행 숨기기

listView1.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.None;

 

선택된 항목 지우기

if (listView1.SelectedItems.Count == 0)
{
    MessageBox.Show("선택된 항목이 하나도 없습니다.");
}
else
{
    while (listView1.SelectedItems.Count > 0)
        listView1.Items.Remove(listView1.SelectedItems[0]);
}

 

 

if (listView1.SelectedItems.Count > 0)
{
    int index = listView1.SelectedIndices[0]; // 선택된 첫번째 레코드의 인덱스
    foreach (ListViewItem row in listView1.SelectedItems)
    {

        int index = row.index;

        listView1.Items.Remove(row);  // 선택한 행 삭제
        
// listView1.Items[index].Remove();  //   다. index    

    }
}

 

for (int row = 0; row < listView1.Items.Count; row++)
{
    string text = listView1.Items[row].SubItems[4].Text;
    if (Left(text,1) =="(" && Right(text,1) ==")")
    {
        listView1.Items[row].Remove();  // 선택한 행 삭제
    }
}

 

for (int row = listView1.SelectedIndices.Count - 1; row > 0; row--)
{
    index = listView1.SelectedItems[row].Index //  
    listView1.Items[index].Remove(); // 삭제는 index 번호가 큰번호에서 작은번호 순으로
}

 

 

리스트 추가하기

private void btnAdd_Click(object sender, EventArgs e) // 추가 버튼
{
    ListViewItem lvt = new ListViewItem();
    lvt.Text = textBox1.Text;
    lvt.SubItems.Add(textBox2.Text);
    lvt.SubItems.Add(textBox3.Text);
    lvt.SubItems.Add(textBox4.Text);
    lvt.SubItems.Add(textBox5.Text);
    listView1.Items.Add(lvt);

    listView1.FullRowSelect = true;  // 행단위로 선택

 

    textBox1.Text ="";
    textBox2.Text ="";
    textBox3.Text ="";
    textBox4.Text ="";
    textBox5.Text ="";

}

 

* 다른 방법으로
ListViewItem lvt = new ListViewItem();
lvt.Text = textBox1.Text;

2줄을 한줄로 줄여서

ListViewItem lvt = new ListViewItem(textBox1.Text);

로 해도 된다.

 

리스트 수정하기

private void btnChange_Click(object sender, EventArgs e)    // 변경 버튼
{
    if (listView1.SelectedIndices.Count > 0)
    {
        listView1.SelectedItems[0].SubItems[0].Text = textBox1.Text;
        listView1.SelectedItems[0].SubItems[1].Text = textBox2.Text;
        listView1.SelectedItems[0].SubItems[2].Text = textBox3.Text;
        listView1.SelectedItems[0].SubItems[3].Text = textBox4.Text;
        listView1.SelectedItems[0].SubItems[4].Text = textBox5.Text;
    }
}

 

리스트 읽어오기

private void listView1_Click(object sender, EventArgs e)  // 해당 Row 클릭시 읽어오기
{
    if (listView1.SelectedIndices.Count > 0)
    {
        textBox1.Text = listView1.SelectedItems[0].SubItems[0].Text;
        textBox2.Text = listView1.SelectedItems[0].SubItems[1].Text;
        textBox3.Text = listView1.SelectedItems[0].SubItems[2].Text;
        textBox4.Text = listView1.SelectedItems[0].SubItems[3].Text;
        textBox5.Text = listView1.SelectedItems[0].SubItems[4].Text;
    }
}


private void listView1_KeyUp(object sender, EventArgs e)  // 해당 Row 에 키보드가 놓일때
{
    if (listView1.SelectedIndices.Count > 0)
    {
        textBox1.Text = listView1.SelectedItems[0].SubItems[0].Text;
        textBox2.Text = listView1.SelectedItems[0].SubItems[1].Text;
        textBox3.Text = listView1.SelectedItems[0].SubItems[2].Text;
        textBox4.Text = listView1.SelectedItems[0].SubItems[3].Text;
        textBox5.Text = listView1.SelectedItems[0].SubItems[4].Text;
    }
}


 

번호 매기기

for(int i=0 ; i < listView1.Items.Count ; i++)
{
    listView1.Items[i].SubItems[0].Text = (i + 1).ToString();
}

 

foreach (ListViewItem item in listView1.Items)
{
    // 수행할 내용
}

 

 

열의 특정값 변경

private void LVCellUpdate(ListView LV)
{
    int value = 0;
    foreach (ListViewItem row in LV.Items)
    {
        int.TryParse(row.SubItems[4].Text, out value);
        if (value == 10)
        {
            row.SubItems[4].Text = "보통";
        }
    }
}

 


private void LVCellUpdate(ListView LV)
{
    int value = 0;
    for (int row = 0; row < LV.Items.Count; row++)
    {
        //MessageBox.Show(LV.Items[row].SubItems[4].Text);
        int.TryParse(LV.Items[row].SubItems[4].Text, out value);
        if (value == 10)
        {
            LV.Items[row].SubItems[4].Text = "보통";
        }
    }
}

 

 

각 행(row)을 반복해서 돌아가면서 해당 행의 특정열의 값을 구하거나 다른 값으로 치환하고자 할 경우에는 LV.Items[row].SubItems[4].Text; 만 알면
선택된 행으로부터 currentindex 를 구할 수가 있다.
index 만 구하면 해당행을 삭제하거나 병합할 수 있다.

 

listView1.Items[previousindex].Selected = true;  //      

 

listView2.Items[index].EnsureVisible();  // 내용을 스크롤하여 항목이 컨트롤에 표시되도록 함

 

// 상은      

private void listView_ColorSet(ListView LV)
{
    for (int row = 0; row < LV.Items.Count; row++)
    {
        if (LV.Items[row].BackColor.Equals(Color.Aquamarine))
        {
            LV.Items[row].BackColor = Color.Aquamarine;
        } else if (LV.Items[row].BackColor.Equals(Color.YellowGreen))
        {
            LV.Items[row].BackColor = Color.YellowGreen;       
        }
        else
        {
            LV.Items[row].BackColor = Color.White;
        }               
    }
}



출처: https://link2me.tistory.com/800 [소소한 일상 및 업무TIP 다루기]