Копирование подмножества столбцов из одного вида сетки данных в новое представление сетки данных в c # - PullRequest
1 голос
/ 20 августа 2011

Допустим, у нас есть 10 столбцов в одном представлении данных.У меня есть 20 строк данных в этих 10 столбцах.

Динамически я скрываю (устанавливая свойство .Visible столбца в false) несколько столбцов - скажем, столбец 1, 2, 4, 5.

Теперь я хочу скопироватьсодержимое видимых столбцов (20 строк данных, 6 видимых столбцов - 3, 6, 7, 8, 9, 10) для нового представления данных.

Любые предложения / советы / ссылки?

Я исследовал этот форум и не смог найти пост, в котором обсуждается копирование подмножества столбцов из одного представления данных в другое.

спасибо.

Ответы [ 2 ]

2 голосов
/ 20 августа 2011

Попробуйте это (вы не указали, был ли это ASP.NET, WinForms и т. Д. - этот пример основан на WinForms). Вышеупомянутое предложение Кристиана идет в правильном направлении, но когда я попробовал его, Clone() не скопировал значения, и я не мог найти способ заставить его это сделать.

// Set up a List<T> to hold the indexes of the visible columns
List<int> visibleColumns = new List<int>();

foreach (DataGridViewColumn col in dgv1.Columns)
{
    if (col.Visible)
    {
        dgv2.Columns.Add((DataGridViewColumn)col.Clone());

        visibleColumns.Add(col.Index);
    }
}

// Now add the data from the columns
// Set a counter for the current row index for the second DataGridView
int rowIndex = 0;

foreach (DataGridViewRow row in dgv1.Rows)
{

    // Add a new row to the DataGridView
    dgv2.Rows.Add();

    // Loop through the visible columns
    for (int i = 0; i < visibleColumns.Count; i++)
    {
        // Use the index of the for loop for the column in the target data grid
        // Use the index value from the List<T> for the cell of the source target data grid
        dgv2.Rows[rowIndex].Cells[i].Value = row.Cells[visibleColumns[i]].Value;
    }

    // Increment the rowIndex
    rowIndex++;
}

Я признаю, что это уродливо и довольно грубая сила, но я проверил это, и это сработало. Возможно, есть более эффективные способы сделать это, но это, по крайней мере, должно помочь вам, я надеюсь.

1 голос
/ 20 августа 2011

не могу проверить это сейчас ..

foreach (DataGridViewColumn dgvCol in dgv1.Columns)
{
   if (dvgCol.visible) dgv2.Columns.Add((DataGridViewColumn) dgvCol.Clone());
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...