2014-08-08 3 views
1

У меня есть Datagridview, заполненный данными из моей базы данных.Столбец Datagridview, показывающий System.Drawing.Bitmap?

У меня есть 3 колонки в моей таблице базы данных: id, name, status. Однако все они находятся в текстовом/строчном формате.

На основании данных, которые я получаю из столбца состояния моей базы данных (онлайн или офлайн), я пытаюсь поместить изображение в ячейку вместо простой сетевой или автономной строки.

Я приложил свой DGV к событию DataBindingComplete. В настоящее время этот код:

void DataGridView1DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e) 
    { 
     foreach (DataGridViewRow r in dataGridView1.Rows) 
     { 
      if (r.Cells["status"].Value.ToString() == "Online") 
      { 
       // add online image here 
       r.Cells["status"].Value = Resource1.MyOnlineIcon; 
      } 
      else if(r.Cells["status"].Value.ToString() == "Offline") 
      { 
       // add offline image here 
       r.Cells["status"].Value = Resource1.MyOfflineIcon; 
      } 

     } 

Но проблема в том, что она показывает System.Drawing.Bitmap на клетку, а на самом деле отображения изображения. Поскольку в моей базе данных тип данных для столбца состояния является строкой, DGV также создает столбец типа строки. Как изменить существующий столбец типа строки/текста на столбец изображения? Какой был бы лучший способ решить эту проблему?

+0

Как вы привязки данные из базы данных? – Moop

+0

Используя команду sql, я получаю данные из базы данных и сохраняю их в наборе данных. Затем я установил datagridview.Source в dataset.Tables [0] – aresz

+0

Не могли бы вы добавить этот код к вопросу? Кроме того, я не думаю, что событие DataBindingComplete является подходящим местом для изменения содержимого ячеек. Предпочтительно преобразование из 'string' в' Bitmap' выполняется до привязки. – Moop

ответ

1

Если преобразовать запрос базы данных в коллекции объектов, как этот

public class SomeObject { 
    public int ID {get;set;} 
    public string Name {get;set;} 
    public Bitmap Image {get;set; 

    public SomeObject(int id, string name, string status) { 
     ID = id; 
     Name = name; 
     Image = status == "Online" ? Resource1.MyOnlineIcon : Resource1.MyOfflineIcon; 
    } 

} 

Она должна хорошо работать, связывая его с DataGridView:

List<SomeObject> source = dbConnection.GetObjects(); 
dataGridView.DataSource = source; 
+0

Спасибо за ответ. Это дало мне представление о том, как решить проблему. Теперь он работает. – aresz

1

Чтобы отобразить изображение в DataGridViewCell, вам необходимо использовать DataGridViewImageColumn.

Не уверен, можете ли вы установить тип столбца для существующих столбцов (я считаю, что это невозможно). Во всяком случае, вы можете вручную создать столбцы, установив DataGridView.AutoGenerateColumns на false.

dataGridView1.AutoGenerateColumns = false; 
dataGridView1.Columns.Add(new DataGridViewImageColumn 
          { 
           DataPropertyName = "YourImageColumnName", 
           Name = "status" 
          }); 

dataGridView1.DataSource = yourDataSource; 
+0

У меня есть Datagridview, заполненный данными из моей базы данных с использованием набора данных. В результате я получаю текстовые/строковые типы столбцов. Как изменить существующий тип столбца на DataGridViewImageColumn? – aresz

+0

Обновлен мой ответ, посмотрите, поможет ли это. –

+0

@Downvoter, пожалуйста, оставьте комментарий, чтобы я знал, где не так. –

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