2012-07-14 20 views
6

üzerinde Resim ve Metin:C# - DataGridView - Ben DataGridView üzerinde böyle bir şey arıyorum aynı satırda

Image | Text | 
Text | Text | 
Image | Text 

Temelde, sadece aynı satırda Görüntü hücreleri ve Metin hücreleri istiyorum. Farklı türlerle çalışmayı başarabiliyordum, örneğin: Checkbox, Text ve etc ... Ama görüntüleri ile çalışmasını sağlayamıyorum.

bu hatayı alıyorum: Invalid Cast from 'System.String' to 'System.Drawing.Image'

herkes çözümü biliyorum yoksa bu yapmalıyım nasıl öneri var mı? Teşekkürler

+1

burada –

+0

Sizin aspx işaretlemeyi sonrası:

Projem için aynı çözüm çalıştı, benim datagrid hücrede 16X16 piksel görüntüyü göstermek için, iyi çalışıyor, ben yukarıdaki TextandImageColumn sınıfındaki fonksiyonun düzenledikten ref1c - sorunuzda karışık satır ve sütunlar mı alıyorsunuz? Aynı satırda (farklı sütunlarda) resim ve metin olması önemsizdir, sadece bir görüntü ve bir metin sütunu vardır. Hem görüntü hem de metin içeren bir sütuna sahip olmak biraz zor. Bunun için bir cevap üzerinde çalışıyorum. –

cevap

7

Bazı hücrelerde DataGridViewImageColumn görüntü metninin bir sütununa sahip olması nispeten kolaydır.

Yapmanız gereken tek şey, istenen bir hücreyi DataGridViewTextBoxCell ile değiştirmektir. Benim ızgaraya aşağıdaki görüntü sütununu eklerseniz

Yani, örneğin,:

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); 

Öyle (burada bir düğme işleyicisi gibi metin ile verilen bir hücreyi yerini alabilir ama aynı zamanda bir yerde gibi yapabilirdi bir veritabanında tam işleyici içinde). Eğer farklı bir metin isterseniz (eğer tip görüntünün bir özelliğine bağlamak gerekir) farklı resimler istiyoruz ve eğer

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

Bu çözüm sizin için işin biraz bırakır. Bir resim sütununun Değer özelliği Resim türü olduğundan, aynı ciltlemeyi kullanamazsınız.

Bunu işleyen kendi geçersiz kılma sütununuzu oluşturabilirsiniz, ancak kendi başına ödeme yapamayacağınız, yalnızca doğrudan metin istediğiniz hücrelerin değerini ayarlayabilecek bir iş olabilir.

+0

Teşekkürler, adamım! Ben farklı bir çözüm ile denedim ama yapamadık '' DataGridViewTextBoxCell() 'kullanmayı unuttum senin çözüm benim görevimi elde etmek için bana yardımcı olur –

1

DataGridViewCellFormattingEventHandler'u işlemek zorunda kaldım ve görüntüyü DataGridViewCellFormattingEventHandler (bu özel durumdan çıkarken istisna atıyordu) olarak atadım. DataGridViewCellFormattingEventHandler İçinde

Ben e->Value = System::Drawing::Image::FromFile("c:/Test.jpeg");
veya e.Value = System.Drawing.Image.FromFile("c:/Test.jpeg");

0


daha iyi bir çözüm için, bu Blogspot yazıyı bakın atanan.

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); 
     } 
    }