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 다루기]
'개발언어 > C#' 카테고리의 다른 글
[C#] ListView의 체크박스(CheckBox) 추가하는 방법 (0) | 2021.08.10 |
---|---|
[C#] ListView 버튼 및 컨트롤 추가 (0) | 2021.08.10 |
[C#] Listview 에 Button, Progressbar, TextBox Control 삽입 예제.. (0) | 2021.08.10 |
[C#] ListView 실습 (0) | 2021.08.10 |
[C#] listview에 button추가시 샘플3 (0) | 2021.08.10 |