IT/C#

[C#] Excel Data Ctrl+C Ctrl+V to DataGridView

Ella.J 2022. 11. 17. 09:37
728x90
반응형

 

엑셀에서 데이터를 복사해서 그대로 DataGridView에 붙여넣기 하고 싶을 때.

아래의 DataGridView에서 Ctrl+V를 사용해서 복붙하도록 만들었다.

DataGridView의 Column은 개수가 정해져 있고 엑셀에서도 컬럼 개수에 맞게 복사해오도록 했다.

Row는 복사해 온 데이터의 길이에 맞게 Row를 추가하도록 했다.

아래의 코드를 참고하면 된다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
private void dataGridView1_KeyDown(object sender, KeyEventArgs e)
{
    if (e.Control && e.KeyCode == Keys.V)
    {
        string s = Clipboard.GetText();
 
        string[] lines = s.Replace("\n""").Split('\r');
        string[] fields;
 
        if (lines.Length > 0)
        {
            int row = dataGridView1.CurrentCell.RowIndex;
            int col = dataGridView1.CurrentCell.ColumnIndex;
            if (dataGridView1.Rows.Count < (row + lines.Length)) dataGridView1.Rows.Add((row + lines.Length) - dataGridView1.Rows.Count);
 
            foreach (string item in lines)
            {
                fields = item.Split('\t');
                foreach (string f in fields)
                {
                    dataGridView1[col, row].Value = f;
                    col++;
                }
                row++;
                col = dataGridView1.CurrentCell.ColumnIndex;
            }
        }
    }
}
 
private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
    DataGridViewTextBoxEditingControl tb = (DataGridViewTextBoxEditingControl)e.Control;
    tb.KeyDown += new KeyEventHandler(dataGridView1_KeyDown);
    e.Control.KeyDown += new KeyEventHandler(dataGridView1_KeyDown);
}
cs

코드 아래의 EditingControlShowing 이벤트에 KeyDown 이벤트를 두 개 등록해줘야 한다.

DataGridView에서 왼쪽처럼 Cell을 선택한 상태에서 Ctrl+V 할 수도 있고,

오른쪽처럼 Cell이 Editing 상태로 들어가 커서가 깜빡이는 상태에서 Ctrl+V 할 수도 있기 때문이다.

 

DataGridView.EditingControlShowing Event (System.Windows.Forms)

Occurs when a control for editing a cell is showing.

learn.microsoft.com

 

728x90
반응형