XtraGrid 컨트롤 행(Row) 복사(Copy) 및 붙여넣기(Paste) 하는 방법


DevExpress XtraGrid 컨트롤은 Visual Studio의 표준 컨트롤인 GridView에 비해 월등히 기능이 향상된 Grid Control 입니다.

XtraGrid 컨트롤의 행(Row)을 추가할 때 여러 컬럼(Column)의 내용이 비슷하고 한두 개의 컬럼 내용만 다를 경우 하나의 행을 복사한 다음 새로운 행으로 붙여 넣기 한 다음 변경할 컬럼 내용만 변경하면 훨씬 쉽게 새로운 행을 추가할 수 있게 됩니다.

즉, 비슷한 행의 데이터를 여러 행으로 추가해야 하는 경우 기준이 되는 행을 복사하고 원하는 행의 수만큼 붙여 넣기 하여 행을 추가한 다음 수정할 컬럼만 수정하면 쉽게 여러 행을 만들 수 있게 되는 것입니다.

이번 글에서는 XtraGrid 컨트롤 행(Row) 복사(Copy) 및 붙여넣기(Paste) 하는 방법에 대해 알아보겠습니다.

XtraGrid 컨트롤 행(Row) 복사(Copy) 및 붙여넣기(Paste) 하는 방법

DevExpress XtraGrid 컨트롤의 행(Row)을 클립보드에 복사하는 방법

▶ 선택한 행(Row)을 클립보드에 복사하는 과정은 무척 간단합니다.

  • gridView1.OptionsClipboard.CopyColumnHeaders = DevExpress.Utils.DefaultBoolean.False;
    : 컬럼 헤더는 클립보드에 복사하지 않습니다.
  • gridView1.CopyToClipboard();
    : 선택한 행이 클립보드에 복사 됩니다. (여러 행을 선택해서 클립보드로 복사할 수 있습니다.)
//복사하기
private void btnCopy_Click(object sender, EventArgs e)
{
    gridView1.OptionsClipboard.ClipboardMode = DevExpress.Export.ClipboardMode.Formatted;
    gridView1.OptionsClipboard.CopyColumnHeaders = DevExpress.Utils.DefaultBoolean.False;
    gridView1.OptionsClipboard.AllowExcelFormat = DevExpress.Utils.DefaultBoolean.True;
 
    //선택한 Row를 클립보드에 복사한다.
    gridView1.CopyToClipboard();
}

DevExpress XtraGrid 컨트롤의 새로운 행(Row)을 클립보드 내용으로 붙여 넣기하는 방법

▶ 클립보드에 저장된 데이터를 XtraGrid 컨트롤의 새로운 행을 추가하고 붙여 넣기 하는 방법입니다.

  • 클립보드에 저장된 내용을 DataTable 형식으로 변환해서 가져옵니다.
  • DataTable의 컬럼은 XtraGrid의 컬럼과 동일한 구조로 만들어 줍니다.
  • 여러 행이 복사 된 경우 동일하게 여러 행을 새로 추가해서 각 행에 붙여 넣기 해 줍니다.
//붙여넣기
private void btnPaste_Click(object sender, EventArgs e)
{
    DataTable tblPaste = PasteTable(gridView1);    //클립보드의 내용을 DataTable로 변환해서 가져옴
 
    foreach (DataRow dr in tblPaste.Rows)
    {
        if (dr[“colPK”].ToString() != “”)  //기준 컬럼의 내용이 있는 경우만(의미 있는 데이터만)
        {
            gridView1.AddNewRow();
 
            foreach (DevExpress.XtraGrid.Columns.GridColumn item in gridView1.Columns)
            {
                gridView1.SetFocusedRowCellValue(item.FieldName, dr[item.FieldName].ToString());
            }
            gridView1.UpdateCurrentRow();
         }
    }
}
 
 
//클립보드의 내용을 가져옴
private string ClipboardData
{
    get
    {
        IDataObject iData = Clipboard.GetDataObject();
 
        if (iData == nullreturn “”;
 
        if (iData.GetDataPresent(DataFormats.Text))
            return (string)iData.GetData(DataFormats.Text);
 
        return “”;
    }
    set { Clipboard.SetDataObject(value); }
}
 
 
//클립보드에서 가녀온 내용을 DataTable 형식으로 변환함
public DataTable PasteTable(DevExpress.XtraGrid.Views.Grid.GridView gv)
{
    DataTable tbl = new DataTable();
 
    //GridView의 컬럼 그대로 DataTable을 만든다.
    foreach (DevExpress.XtraGrid.Columns.GridColumn item in gv.Columns)
    {
        tbl.Columns.Add(item.FieldName);
    }
 
    tbl.Clear();
    string[] data = ClipboardData.Split(‘\n’);  //가져온 클립보드 내용을 엔터구분자로 행 나눔
 
    if (data.Length < 1return tbl;
 
    foreach (string row in data)
    {
        AddRow(tbl, row);
    }
 
    return tbl;
}
 
//클립보드에서 가져온 행에서 컬럼을 구분하여 DataTable에 넣기
private void AddRow(DataTable tbl, string data)
{
    string[] rowData = data.Split(new char[] { ‘\r’‘\x09’ });
    DataRow newRow = tbl.NewRow();
 
    for (int i = 0; i < rowData.Length; i++)
    {
        if (i >= tbl.Columns.Count) break;
        newRow[i] = rowData[i];
    }
    tbl.Rows.Add(newRow);
}
 

마무리

Grid 컨트롤의 데이터 입력 작업을 할 때 행을 복사해서 신규 행에 붙여 넣기 작업을 하게 되면 직접 입력할 때 발생할 수 있는 입력 오류도 줄일 수 있습니다. 뿐만 아니라 동일한 내용을 반복해서 계속 입력해야 하는 불필요한 작업도 줄일 수 있습니다.

클립보드를 활용한 XtraGrid 컨트롤의 행 복사 및 붙여 넣기를 잘 활용해 보시기 바랍니다.





이 글이 도움이 되었기를 바랍니다. ^-^


답글 남기기