DevExpress XtraGrid 컨트롤은 Visual Studio의 표준 컨트롤인 GridView에 비해 월등히 기능이 향상된 Grid Control 입니다.
XtraGrid 컨트롤의 행(Row)을 추가할 때 여러 컬럼(Column)의 내용이 비슷하고 한두 개의 컬럼 내용만 다를 경우 하나의 행을 복사한 다음 새로운 행으로 붙여 넣기 한 다음 변경할 컬럼 내용만 변경하면 훨씬 쉽게 새로운 행을 추가할 수 있게 됩니다.
즉, 비슷한 행의 데이터를 여러 행으로 추가해야 하는 경우 기준이 되는 행을 복사하고 원하는 행의 수만큼 붙여 넣기 하여 행을 추가한 다음 수정할 컬럼만 수정하면 쉽게 여러 행을 만들 수 있게 되는 것입니다.
이번 글에서는 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 == null) return “”;
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 < 1) return 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 컨트롤의 행 복사 및 붙여 넣기를 잘 활용해 보시기 바랍니다.
※ 함께 읽으면 도움이 될 만한 다른 포스팅 글입니다.
- DevExpress XtraGrid GridControl에서 변경된 행이나 신규 행만 처리 하는 방법
- DevExpress XtraGrid Control Export할 때 다양한 속성 정의
- DevExpress GridControl의 특정 Row와 Cell의 Style 변경
- C# 윈폼 크기에 따라 반응형으로 크기가 자동 조절되는 Panel 및 Grid Control 구현 방법
- C# 윈폼에서 DataGridView의 컬럼 헤더 텍스트를 여러 줄로 표시 하는 방법
- 비주얼스튜디오 도구 상자에 DevExpress Control이 보이지 않을 때 조치방법
이 글이 도움이 되었기를 바랍니다. ^-^