2012-07-14 19 views
6

Sto cercando qualcosa di simile sulla DataGridView:C# - DataGridView - Immagine e testo sulla stessa riga

Image | Text | 
Text | Text | 
Image | Text 

Fondamentalmente, voglio solo celle di immagine e le cellule di testo sulla stessa riga. Sono riuscito a farlo funzionare con diversi tipi, ad esempio: casella di controllo, testo ed ecc ... Ma non riesco a farlo funzionare con le immagini.

ottengo questo errore: Invalid Cast from 'System.String' to 'System.Drawing.Image'

Qualcuno sa la soluzione o avere suggerimenti su come devo fare questo? Grazie

+1

pubblicare il tuo markup aspx qui –

+0

ref1c - stai confondendo righe e colonne nella tua domanda? Per avere immagini e testo sulla stessa riga (in colonne diverse) è banale, basta avere un'immagine e una colonna di testo. Avere una colonna con entrambe le immagini e il testo è un po 'più complicato. Sto lavorando a una risposta per questo ora. –

risposta

7

È relativamente semplice disporre di una colonna di tipo DataGridViewImageColumn in alcune celle.

Tutto quello che devi fare è sostituire una cella desiderata con un DataGridViewTextBoxCell.

Così, per esempio, se si aggiunge la seguente colonna di immagine alla mia griglia:

DataGridViewImageColumn imageColumn = new DataGridViewImageColumn(); 
imageColumn .Name = "ImageColumn"; 
imageColumn .HeaderText = "An Image!"; 
Image i = Image.FromFile(@"C:\Pictures\TestPicture.jpg"); 
imageColumn.Image = i; 
dataGridView1.Columns.Add(imageColumn); 

è possibile sostituire una determinata cella con il testo in questo modo (qui in un gestore di tasto, ma si potrebbe anche fare da qualche parte come all'interno di un gestore completo di dati).

private void button1_Click(object sender, EventArgs e) 
{ 
    dataGridView1.Rows[3].Cells["ImageColumn"] = new DataGridViewTextBoxCell(); 
    dataGridView1.Rows[3].Cells["ImageColumn"].Value = "Some text!"; 
} 

Questa soluzione lascia un po 'di lavoro per voi, se si desidera che le immagini differenti (è necessario associare a una proprietà immagine tipo di) e se si desidera che il testo diverso. Poiché la proprietà Value di una colonna di immagini è di tipo Image, non è possibile utilizzare la stessa associazione.

È possibile creare la propria colonna immagine sovrascritta che ha gestito questo, ma sarebbe un po 'di lavoro, che potrebbe non ripagarsi da solo rispetto semplicemente impostando il valore per le celle in cui si desidera il testo direttamente.

+0

Grazie, amico !!! Ho provato con una soluzione diversa ma non sono riuscito a farlo, ho dimenticato di usare 'DataGridViewTextBoxCell()' la tua soluzione mi aiuta a raggiungere il mio compito –

1

Ho trovato che dovevo gestire lo DataGridViewCellFormattingEventHandler e assegnare l'immagine nello DataGridViewCellFormattingEventHandler (che stava lanciando l'eccezione all'uscita).

All'interno del DataGridViewCellFormattingEventHandler ho assegnato e->Value = System::Drawing::Image::FromFile("c:/Test.jpeg");
o
e.Value = System.Drawing.Image.FromFile("c:/Test.jpeg");

0

Per soluzione migliore, consulta questo Blogspot posta.

ho provato la stessa soluzione per il mio progetto, si sta lavorando bene, per visualizzare un'immagine 16x16 pixel nella mia cella datagrid, ho curato la funzione al precedente TextandImageColumn classe:

protected override void Paint(Graphics graphics, Rectangle clipBounds, 
    Rectangle cellBounds, int rowIndex, DataGridViewElementStates cellState, 
    object value, object formattedValue, string errorText, 
    DataGridViewCellStyle cellStyle, 
    DataGridViewAdvancedBorderStyle advancedBorderStyle, 
    DataGridViewPaintParts paintParts) 
    { 
     // Paint the base content 
     base.Paint(graphics, clipBounds, cellBounds, rowIndex, cellState, 
      value, formattedValue, errorText, cellStyle, 
      advancedBorderStyle, paintParts); 

     if (this.Image != null) 
     { 
      PointF p = cellBounds.Location; 
      p.X += 0; 
      p.Y += 4; 

      graphics.DrawImage(this.Image, p); 
     } 
    } 
Problemi correlati