Click here to Skip to main content
14,734,420 members
Articles » General Programming » Uncategorised Tips and Tricks » General
Posted 8 Jun 2011

Tagged as


22 bookmarked

Copy Paste in Datagridview Control

Rate me:
Please Sign up or sign in to vote.
4.69/5 (12 votes)
8 Jun 2011CPOL
How to copy paste in Datagridview control


This post discusses how to add a datagridview and a contextmenustrip with cut, copy and paste into the form.

Image 1

Populate the DataGridView and define the click events as follows:

private void dataGridView1_CellMouseClick(object sender, DataGridViewCellMouseEventArgs e)
    if (dataGridView1.SelectedCells.Count > 0)
        dataGridView1.ContextMenuStrip = contextMenuStrip1;

private void cutToolStripMenuItem_Click(object sender, EventArgs e)
    //Copy to clipboard

    //Clear selected cells
    foreach (DataGridViewCell dgvCell in dataGridView1.SelectedCells)
        dgvCell.Value = string.Empty;

private void copyToolStripMenuItem_Click(object sender, EventArgs e)

private void pasteToolStripMenuItem_Click(object sender, EventArgs e)
    //Perform paste Operation

Copy/Paste routines follow...

The clipboard values are saved in a Dictionary, so the user can validate or manipulate the values before assigning them into gridviewcell.

private void CopyToClipboard()
    //Copy to clipboard
    DataObject dataObj = dataGridView1.GetClipboardContent();
    if (dataObj != null)

private void PasteClipboardValue()
    //Show Error if no cell is selected
    if (dataGridView1.SelectedCells.Count == 0)
        MessageBox.Show("Please select a cell", "Paste", 
		MessageBoxButtons.OK, MessageBoxIcon.Warning);

    //Get the starting Cell
    DataGridViewCell startCell = GetStartCell(dataGridView1);
    //Get the clipboard value in a dictionary
    Dictionary<int, Dictionary<int, string>> cbValue = 

    int iRowIndex = startCell.RowIndex;
    foreach (int rowKey in cbValue.Keys)
        int iColIndex = startCell.ColumnIndex;
        foreach (int cellKey in cbValue[rowKey].Keys)
            //Check if the index is within the limit
            if (iColIndex <= dataGridView1.Columns.Count - 1
            && iRowIndex <= dataGridView1.Rows.Count - 1)
                DataGridViewCell cell = dataGridView1[iColIndex, iRowIndex];

                //Copy to selected cells if 'chkPasteToSelectedCells' is checked
                if ((chkPasteToSelectedCells.Checked && cell.Selected) ||
                    cell.Value = cbValue[rowKey][cellKey];

private DataGridViewCell GetStartCell(DataGridView dgView)
    //get the smallest row,column index
    if (dgView.SelectedCells.Count == 0)
        return null;

    int rowIndex = dgView.Rows.Count - 1;
    int colIndex = dgView.Columns.Count - 1;

    foreach (DataGridViewCell dgvCell in dgView.SelectedCells)
        if (dgvCell.RowIndex < rowIndex)
            rowIndex = dgvCell.RowIndex;
        if (dgvCell.ColumnIndex < colIndex)
            colIndex = dgvCell.ColumnIndex;

    return dgView[colIndex, rowIndex];

private Dictionary<int, Dictionary<int, string>> ClipBoardValues(string clipboardValue)
    Dictionary<int, Dictionary<int, string>>
    copyValues = new Dictionary<int, Dictionary<int, string>>();

    String[] lines = clipboardValue.Split('\n');

    for (int i = 0; i <= lines.Length - 1; i++)
        copyValues[i] = new Dictionary<int, string>();
        String[] lineContent = lines[i].Split('\t');

        //if an empty cell value copied, then set the dictionary with an empty string
        //else Set value to dictionary
        if (lineContent.Length == 0)
            copyValues[i][0] = string.Empty;
            for (int j = 0; j <= lineContent.Length - 1; j++)
                copyValues[i][j] = lineContent[j];
    return copyValues;


This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


About the Author

Balu Sathish
Software Developer UVJ Technologies
India India
No Biography provided

Comments and Discussions

PraiseGood work Pin
Member 1268962927-Aug-19 4:51
MemberMember 1268962927-Aug-19 4:51 
QuestionchkPasteToSelectedCells Pin
n shiva Ram24-Sep-14 3:02
Membern shiva Ram24-Sep-14 3:02 
QuestionExcellent thanks. Used this with derived DataGridView class. Pin
Member 1062780723-Jul-14 6:02
MemberMember 1062780723-Jul-14 6:02 
QuestionIs it possible to Force Single Cell Only Pin
Member 171591218-Feb-14 2:32
MemberMember 171591218-Feb-14 2:32 
GeneralThanks Pin
Mikles, Max Mikles29-Apr-13 15:45
MemberMikles, Max Mikles29-Apr-13 15:45 
Questionconvert to Pin
mr.fugio29-Nov-12 20:57
Membermr.fugio29-Nov-12 20:57 
AnswerRe: convert to Pin
Michael Paschal25-Mar-15 15:25
MemberMichael Paschal25-Mar-15 15:25 
Question...? Pin
Member 926187310-Aug-12 0:49
MemberMember 926187310-Aug-12 0:49 
AnswerRe: ...? Pin
rndtech15-Jul-13 14:20
professionalrndtech15-Jul-13 14:20 
GeneralGreat Code Pin
HolyHannah21-Jun-12 4:27
MemberHolyHannah21-Jun-12 4:27 
GeneralMy vote of 5 Pin
Manoj Kumar Choubey5-Apr-12 8:53
professionalManoj Kumar Choubey5-Apr-12 8:53 
QuestionCopy and Paste Pin
Anthony Fonseca5-Jul-11 17:20
MemberAnthony Fonseca5-Jul-11 17:20 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.