2013-09-06 3 views
0

У меня есть DataGridView, связанный с одним из моих привязывающих адаптеров. В моей сетке есть столбец, который соответствует "type" вложения (например, «.pdf»). Это отображается в столбце вида сетки в виде текста (как и ожидалось). Я хочу, чтобы изменить значение столбца как изображения, чтобы обозначить тип. Например, если тип PDF, я хочу, чтобы в столбце было изображение документа PDF, а не текст ".pdf".Динамически меняйте тип столбца при привязке

Есть ли способ, которым я могу сделать это динамически по мере добавления ячеек? Или хотелось бы, чтобы это было сделано после того, как все ячейки загружены?

Cheers.

+1

вы пробовали какие-либо идеи еще Да, вы можете сделать это динамически, но почему использовать поле шаблона вместо? из 'BoundField' использовать' imagebutton', но это даст вам постоянное изображение для всех 'PdF' или добавит его изображение динамически на событие« RowBound »или у вас уже есть изображение для этого' Pdf'? –

+0

Это запутанный вопрос? Вы хотите изменить тип столбца? Имя столбца или содержимое поля столбца? – Remy

ответ

0

Да, просто используйте изображение и несколько значков с соответствующими названиями.

E.g. pdf.png, word.png

Затем построить ссылку так:

<img src="<%# LinkRoot + Eval("type").ToString() + ".png" %>" height="32" width="32" /> 
0

Вы должны рисовать изображения на колонке type сами, конечно, нарисованный образ, соответствующий text (описывающего файл типа, например: .pdf, .txt, ...). Вы должны сами подготовить все изображения, если нет какого-либо соответствующего изображения для неизвестного типа файла, вы можете использовать Unknown file type image. Для того, чтобы нарисовать изображение на ячейку, вы должны обрабатывать событие CellPainting, вот код, который вы можете попробовать:

//Dictionary to store the pairs of `text` and the corresponding image 
Dictionary<string, Image> dict = new Dictionary<string, Image>(StringComparer.CurrentCultureIgnoreCase); 
//load data for your dict 
dict["Unknown"] = yourUnknownImage;//This should always be added 
dict[".pdf"] = yourPdfImage; 
dict[".txt"] = yourTxtImage; 
//..... 
//CellPainting event handler for your dataGridView1 
//Suppose the column at index 1 is the type column. 
private void dataGridView1_CellPainting(object sender, DataGridViewCellPaintingEventArgs e){ 
    if(e.ColumnIndex == 1 && e.RowIndex > -1){ 
    var image = dict["Unknown"]; 
    if(e.Value != null) { 
     Image img; 
     if(dict.TryGetValue(e.Value.ToString(), out img)) image = img;    
    } 
    //Draw the image 
    e.Graphics.DrawImage(image, new Rectangle(2,2, e.Bounds.Height-4, e.Bounds.Height-4)); 
    } 
}