1

У меня есть запрос с использованием динамической сводной таблицы, которая вернет мне другое количество столбцов для привязки к моему DataGridView. Я использую AutoGenerateColumns = true ... который является единственным способом отображения столбцов. Как я могу программно сделать некоторые из этих столбцов типа DataGridViewImageColumn? При использовании AutoGenerateColumns автоматически создается DataGridViewTextBoxColumn. Я не могу создавать эти столбцы программно (см. Ниже), потому что я не знаю, сколько столбцов будет возвращено или что будут имена столбцов.Измените тип DataGridViewColumn с помощью AutoGenerateColumns

DataGridViewColumn col = new DataGridViewImageColumn() 
col.Name = ... 
col.DataPropertyName = ... 
DataGridView.Columns.Add(col) 

Как это создается, мне нужно что-то вроде этого:

DataGridView1.Columns[10].Type = DataGridViewImageColumn 

... но я знаю, что это не существует. Thanks

ответ

2

Если вы используете AutoGenerateColumns, то вы не можете изменить их типы после привязки источника. Вы должны удалить столбец затем добавить его обратно:

 DataTable dt = new DataTable(); 
     dataGridView1.DataSource = dt; 

     DataGridViewImageColumn imageCol = new DataGridViewImageColumn(); 
     imageCol.Name = "target_column"; 
     imageCol.DisplayIndex = dataGridView1.Columns["source_column"].DisplayIndex + 1; 

     dataGridView1.Columns.Add(imageCol); 

     for(int index = 0; index < dt.Rows.Count; index ++) 
     { 
      dataGridView1.Rows[index].Cells["target_column"].Value = dt.Rows[index]["source_column"]; 
     } 

     dt.Columns.Remove("source_column"); 

EDIT:

Если вы не можете использовать имена столбцов, вы можете попытаться проверить тип данных, содержащихся в столбце. Но у этого решения возникли бы проблемы, если бы ваши столбцы содержали смешанные типы, и вам нужно будет проверить, содержат ли данные данных данные перед его использованием:

foreach (DataGridViewColumn column in dataGridView1.Columns) 
{ 
    if (dataGridView1.Rows[0].Cells[column.Name].Value.GetType() == typeof(System.Drawing.Bitmap)) //Or whatever type you store your image as 
    { 
     //Do the copy over 
    } 
} 
+0

Спасибо. Похоже, это сработает. Мне просто нужно выяснить, как придумать имена target_column и source_columns, поскольку они являются динамическими из моего сводного запроса ... но это все началось. – rob

+0

Я обновил свой ответ с возможной альтернативой, если это поможет. – JWiley

+0

Проблема заключается в том, что данные будут ID. Если есть идентификатор, я хочу отобразить файл изображения отметки. если нет идентификатора или он равен нулю, тогда я хочу отобразить красный X. Проблема в том, что я не могу сделать это DataGridViewImageColumn, потому что запрос возвращает строку (потому что я использую сводный запрос), и gridview автоматически генерирует DataGridViewTextBoxColumn для этого значения, и я не могу его изменить. – rob

 Смежные вопросы

  • Нет связанных вопросов^_^