[C#] ListView 복사하는 방법
ListView에서 데이터를 복사하는 방법에 대해 알아보도록 합시다~ 하나의 ListView에서 다른 ListView로 복사할 때, 다음의 두 가지 코드를 참고할 수 있습니다.
- 인스턴스를 그대로 할당하여 복사하는 방법 (얕은 복사)
- Clone 메서드로 복사하는 방법 (깊은 복사)
편의상 복사의 출처가 되는 ListView를 listViewFrom라 하고, 복사의 목표 ListView를 listViewTo라 명명하겠습니다.
인스턴스 할당
다음과 같은 명령어로 같은 주소를 참조할 수 있습니다.
listViewTo = listViewFrom;
Clone
출처 리스트 뷰를 반복하여 대상 리스트 뷰의 아이템에 추가하는 방법입니다.
foreach (ListViewItem item in listViewFrom.Items)
{
listViewTo.Items.Add((ListViewItem)item.Clone());
}
ListView 복사
인스턴스를 그대로 할당하는 경우, 같은 참조 영역에 있기에 출처 리스트 뷰를 수정하면, 목표 리스트 뷰도 변경될 것입니다. 반면, 클론 메서드를 사용하는 경우에는 새로운 객체를 복제하여 만든 다음에 각 항목을 추가하는 방법이란 것을 기억해 주세요. 다음은 인스턴스와 클론 메서드를 사용한 예제 자료입니다. 비교 시 참고해 주십시오~
void BeomSang()
{
ListView listViewFrom, listViewTo;
listViewFrom = new ListView();
listViewTo = new ListView();
listViewFrom.Items.Add(string.Empty);
listViewFrom.Items[0].Text = "ItemFrom0";
listViewTo = listViewFrom;
Debug.WriteLine("listViewTo = new ListView();");
Debug.WriteLine($"From : {listViewFrom.Items[0].Text}");
Debug.WriteLine($"To : {listViewTo.Items[0].Text}");
listViewFrom.Items[0].Text = "ItemFrom0M";
Debug.WriteLine("listViewFrom.Items[0].Text = \"ItemFrom0M\";");
Debug.WriteLine($"From : {listViewFrom.Items[0].Text}");
Debug.WriteLine($"To : {listViewTo.Items[0].Text}");
Debug.WriteLine(string.Empty);
listViewFrom = new ListView();
listViewTo = new ListView();
listViewFrom.Items.Add(string.Empty);
listViewFrom.Items[0].Text = "ItemFrom0";
foreach (ListViewItem item in listViewFrom.Items)
{
listViewTo.Items.Add((ListViewItem)item.Clone());
}
Debug.WriteLine("listViewTo.Items.Add((ListViewItem)item.Clone());");
Debug.WriteLine($"From : {listViewFrom.Items[0].Text}");
Debug.WriteLine($"To : {listViewTo.Items[0].Text}");
listViewFrom.Items[0].Text = "ItemFrom0M";
Debug.WriteLine("listViewFrom.Items[0].Text = \"ItemFrom0M\";");
Debug.WriteLine($"From : {listViewFrom.Items[0].Text}");
Debug.WriteLine($"To : {listViewTo.Items[0].Text}");
}
위의 코드는 다음과 같은 출력을 나타냅니다.
listViewTo = new ListView();
From : ItemFrom0
To : ItemFrom0
listViewFrom.Items[0].Text = "ItemFrom0M";
From : ItemFrom0M
To : ItemFrom0M
listViewTo.Items.Add((ListViewItem)item.Clone());
From : ItemFrom0
To : ItemFrom0
listViewFrom.Items[0].Text = "ItemFrom0M";
From : ItemFrom0M
To : ItemFrom0