2016-06-27 3 views
0

У меня есть datagridview с колонками, которые я создал во время разработки.Создать datacolumns из столбцов datagridview

Теперь я хочу создать данные с теми же столбцами, что и в gridview, программно.

Я пробовал следующий код.

Dim dataTable As New DataTable 
For Each col As DataGridViewColumn In dgDocEntries.Columns 
    dataTable.Columns.Add(col) 
Next 

Это вызывает ошибку компиляции: значение DataGridViewColumn не может быть преобразовано в DataColumn. Очевидно, я попробовал лить типы, но это не сработало.

Я не могу использовать свойство datasource для клонирования/копирования либо потому, что я устанавливаю строки вручную.

+0

сделать обратное: создать DT с нужными столбцами, добавить данные в DataTable затем использовать его в качестве источника данных - DGV создаст столбцы, которые , Вам также может быть полезно использовать источник данных List , если данные не поступают из базы данных или не переходят в базу данных. – Plutonix

+0

@Plutonix Я не могу этого сделать, потому что иногда я устанавливаю источник данных из данных, поступающих из базы данных. Пойди, не упоминая об этом изначально. – codeGEN

+0

Посмотрите на [этот пост] (http://stackoverflow.com/questions/37815757/c-sharp-datagridviewbuttoncolumn-no-text-showing/37819479#37819479), который делает обратное: он создает столбцы DGV из DataTable. Вы должны иметь возможность использовать те же свойства, что и для обратного преобразования. – TaW

ответ

1

Что-то вдоль этих линий может сделать работу:

void CopyTableColumnsFromDGV(DataGridView dgv, DataTable dt) 
{ 
    foreach (DataGridViewColumn dgvCol in dgv.Columns) 
    { 
     DataColumn dtCol = new DataColumn(dgvCol.Name, dgvCol.ValueType); 
     dtCol.Caption = dgvCol.HeaderText; 

     dt.Columns.Add(dtCol); 
    } 
}