Скопируйте строки DataGridView в другой DataGridView. - PullRequest
7 голосов
/ 14 июня 2011

Итак, в основном у меня есть 2 DataGridView, и мне нужно скопировать строки из одной в другую.

Пока я пробовал:

DataGridViewRowCollection tmpRowCollection = DataGridView1.Rows;

DataGridViewRow[] tmpRowArray = new DataGridViewRow[tmpRowCollection.Count];
tmpRowCollection.CopyTo(tmpRowArray, 0);            

DataGridView2.Rows.AddRange((DataGridViewRow[]) tmpRowArray));

Но этопродолжает говорить, что

"Row provided already belongs to a DataGridView control."

Так, каков наилучший способ скопировать содержимое строк (оба DataGridView имеют одинаковые столбцы)?

Ответы [ 4 ]

5 голосов
/ 14 июня 2011

Вы используете функцию по следующей ссылке

private DataGridView CopyDataGridView(DataGridView dgv_org)
{
    DataGridView dgv_copy = new DataGridView();
    try
    {
        if (dgv_copy.Columns.Count == 0)
        {
            foreach (DataGridViewColumn dgvc in dgv_org.Columns)
            {
                dgv_copy.Columns.Add(dgvc.Clone() as DataGridViewColumn);
            }
        }

        DataGridViewRow row = new DataGridViewRow();

        for (int i = 0; i < dgv_org.Rows.Count; i++)
        {
            row = (DataGridViewRow)dgv_org.Rows[i].Clone();
            int intColIndex = 0;
            foreach (DataGridViewCell cell in dgv_org.Rows[i].Cells)
            {
                row.Cells[intColIndex].Value = cell.Value;
                intColIndex++;
            }
            dgv_copy.Rows.Add(row);
        }
        dgv_copy.AllowUserToAddRows = false;
        dgv_copy.Refresh();

    }
    catch (Exception ex)
    {
        cf.ShowExceptionErrorMsg("Copy DataGridViw", ex);
    }
    return dgv_copy;
}

http://canlu.blogspot.com/2009/06/copying-datagridviewrow-to-another.html

1 голос
/ 14 июня 2011

вам нужно сначала клонировать строку из оригинала, а затем добавить в новый вид. http://msdn.microsoft.com/en-us/library/system.windows.forms.datagridviewrow.clone.aspx

0 голосов
/ 29 июля 2017

просто напишите это:

copyDGV.DataSource = mainDGV.DataSource;        
0 голосов
/ 14 июня 2011

Я бы порекомендовал использовать для этого вспомогательный DTO.Вместо непосредственного обращения со строками создайте DTO, который содержит все столбцы ваших GridView, а затем используйте их список в качестве источника данных.Затем все, что вам нужно сделать, чтобы добавить / удалить строки, это добавить / удалить DTO в списке.

...