728x90

listView 에서 행을 병합할 때 사용하는 코드입니다. 이 코드는 특정한 셀기준으로 병합처리를 했다. 여러행을 같이 처리하라면 더 추가해야 한다. 개념적인 것만 알아두면 응용은 할 수 있다.


private void LineMerge(ListView LV)
{
    // 첫번째 row 에 데이터 같이 저장, 두번째이후 row 삭제처리
    if (LV.SelectedIndices.Count >= 2)
    {
        for (int i = 0; i < LV.SelectedIndices.Count; i++)
        {
            string str = LV.SelectedItems[i].SubItems[2].Text;
            merge_str += str + System.Environment.NewLine; // 줄바꿈문자
        }
        LV.SelectedItems[0].SubItems[2].Text = merge_str.Trim();
        // MessageBox.Show(merge_str);  //
        merge_str = string.Empty;
        for (int i = LV.SelectedIndices.Count - 1; i > 0; i--)
        {
            LV.Items.Remove(LV.SelectedItems[i]); // 삭제는 index 번호가 큰번호에서 작은번호 순으로
        }
        listView_No(LV);  // renumbering
    }
    else
    {
        MessageBox.Show("최소 2개의 행을 선택해야 합니다");
        return;
    }
}


2. 선택된 Line 의 바로 이전행과 병합할 때

키포인트는 선택된 행의 index 를 구한 다음에 이전 행의 index 를 구해서
LV.Items[i].SubItems[3].Text // i = selectedindex
즉 LV.SelectedItems[0].SubItems[3].Text 가 아니라는 점이다.

private void LineMergeWithLineBefore(ListView LV)
{
    string delimiter = System.Environment.NewLine;
    if (LV.SelectedIndices.Count > 0)
    {
        int selectedindex = LV.SelectedItems[0].Index;
        int previousindex = selectedindex - 1;
        merge_str = LV.Items[previousindex].SubItems[3].Text + delimiter + LV.Items[selectedindex].SubItems[3].Text;
        LV.Items[previousindex].SubItems[3].Text = merge_str.Trim();
        LV.Items.Remove(LV.Items[selectedindex]);

        listView_No(LV);
    }
}


3. 선택된 Line 의 바로 다음행과 병합할 때

private void LineMergeWithLineAfter(ListView LV)
{
    string delimiter = System.Environment.NewLine;
    if (LV.SelectedIndices.Count > 0)
    {
        int selectedindex = LV.SelectedItems[0].Index;
        int nextindex = selectedindex + 1;
        merge_str = LV.Items[selectedindex].SubItems[3].Text + delimiter + LV.Items[nextindex].SubItems[3].Text;
        LV.Items[selectedindex].SubItems[3].Text = merge_str.Trim();
        LV.Items.Remove(LV.Items[nextindex]);

        listView_No(LV);
    }
}



블로그 이미지

Link2Me

,