C# XtraGrid 에 엑셀 붙여넣기 하는법

2024. 10. 15. 17:24IT/Visual Studio (C#)

반응형
using System;
using System.Windows.Forms;
using DevExpress.XtraGrid.Views.Grid;
using System.Data;

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
        
        // 그리드뷰의 KeyDown 이벤트에 핸들러 추가
        gridView1.KeyDown += GridView1_KeyDown;
    }

    private void GridView1_KeyDown(object sender, KeyEventArgs e)
    {
        // Ctrl+V (붙여넣기) 키가 눌렸을 때
        if (e.Control && e.KeyCode == Keys.V)
        {
            PasteClipboardData();
        }
    }

    private void PasteClipboardData()
    {
        // 클립보드에서 데이터를 가져옵니다.
        string clipboardText = Clipboard.GetText();

        if (string.IsNullOrEmpty(clipboardText))
            return;

        // 데이터를 줄 단위로 나눕니다.
        string[] rows = clipboardText.Split(new[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries);

        // 현재 그리드의 데이터 소스를 가져옵니다.
        DataTable dataSource = gridControl1.DataSource as DataTable;

        if (dataSource == null)
            return;

        // 각 줄을 셀 단위로 나누어 데이터 테이블에 추가합니다.
        foreach (string row in rows)
        {
            string[] cells = row.Split('\t');
            DataRow dataRow = dataSource.NewRow();

            for (int i = 0; i < cells.Length && i < dataSource.Columns.Count; i++)
            {
                dataRow[i] = cells[i];
            }

            dataSource.Rows.Add(dataRow);
        }

        // 그리드를 새로고침합니다.
        gridControl1.RefreshDataSource();
    }
}
  1. KeyDown 이벤트: gridView1에 키보드 이벤트 핸들러를 추가하여, Ctrl + V 키를 감지합니다.
  2. PasteClipboardData: Clipboard.GetText()로 클립보드에서 데이터를 가져온 후, 이를 줄(\r\n)과 셀(\t)로 나누어 그리드의 데이터 소스(DataTable)에 추가합니다.
  3. 데이터 소스 갱신: 데이터를 추가한 후 gridControl1.RefreshDataSource()를 호출하여 그리드를 새로 고칩니다.

이 코드를 사용하면, 엑셀에서 복사한 데이터를 XtraGrid에 붙여넣기 할 수 있습니다.

반응형