2012-07-14 53 views
6

Tôi đang tìm kiếm một cái gì đó như thế này trên DataGridView:C# - DataGridView - Hình ảnh và văn bản trên cùng hàng

Image | Text | 
Text | Text | 
Image | Text 

Về cơ bản, tôi chỉ muốn các tế bào hình ảnh và các tế bào văn bản trên cùng một dòng. Tôi có thể làm cho nó hoạt động với nhiều loại khác nhau, ví dụ: Hộp kiểm, Văn bản, v.v. Nhưng tôi không thể làm cho nó hoạt động với hình ảnh.

tôi nhận được lỗi này: Invalid Cast from 'System.String' to 'System.Drawing.Image'

Có ai biết giải pháp hay có gợi ý về cách tôi nên làm điều này? Cảm ơn

+1

gửi đánh dấu aspx của bạn ở đây –

+0

ref1c - bạn đang nhận được hàng và cột nhầm lẫn trong câu hỏi của bạn? Để có hình ảnh và văn bản trên cùng một hàng (trong các cột khác nhau) là tầm thường, chỉ cần có hình ảnh và cột văn bản. Để có một cột với cả hình ảnh và văn bản thì phức tạp hơn một chút. Tôi đang làm việc trên một câu trả lời cho điều đó ngay bây giờ. –

Trả lời

7

Tương đối dễ dàng để có một cột loại DataGridViewImageColumn văn bản hiển thị trong các ô nhất định.

Tất cả những gì bạn cần làm là thay thế ô mong muốn bằng DataGridViewTextBoxCell.

Vì vậy, ví dụ, nếu tôi thêm cột hình ảnh sau đây để lưới của tôi:

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

Bạn có thể thay thế một tế bào được với văn bản như vậy (ở đây trong một handler nút nhưng bạn cũng có thể làm điều đó ở đâu đó như trong một trình xử lý hoàn chỉnh dữ liệu).

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

Giải pháp này để lại một chút công việc cho bạn nếu bạn muốn hình ảnh khác nhau (bạn cần phải liên kết với thuộc tính loại hình ảnh) và nếu bạn muốn văn bản khác. Vì thuộc tính Value của một cột hình ảnh thuộc loại Image bạn không thể sử dụng cùng một ràng buộc.

Bạn có thể tạo cột hình ảnh được ghi đè của riêng mình, nhưng nó có thể là một chút công việc, có thể không trả tiền cho chính nó và chỉ cần đặt giá trị cho ô mà bạn muốn văn bản trực tiếp.

+0

Cảm ơn, người đàn ông !!! Tôi đã thử với giải pháp khác nhau nhưng không thể làm điều đó tôi quên sử dụng 'DataGridViewTextBoxCell()' giải pháp của bạn giúp tôi đạt được nhiệm vụ của mình –

1

Tôi thấy mình phải xử lý DataGridViewCellFormattingEventHandler và gán hình ảnh trong DataGridViewCellFormattingEventHandler (đã ném ngoại lệ khi thoát).

Bên trong DataGridViewCellFormattingEventHandler tôi giao e->Value = System::Drawing::Image::FromFile("c:/Test.jpeg");
hoặc
e.Value = System.Drawing.Image.FromFile("c:/Test.jpeg");

0

Đối với giải pháp tốt hơn, hãy tham khảo Blogspot bài này.

Tôi đã thử các giải pháp tương tự cho dự án của tôi, nó đang làm việc tốt, để hiển thị 16x16 pixel hình ảnh trong phòng giam DataGrid của tôi, tôi đã chỉnh sửa các chức năng trong trên TextandImageColumn lớp:

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); 
     } 
    } 
Các vấn đề liên quan