C# - DataGridView-изображение и текст в одной строке

Я ищу что-то вроде этого на DataGridView:

Image  | Text | 
Text   | Text |
Image  | Text

в принципе, я просто хочу, чтобы ячейки изображения и текстовые ячейки в одной строке. Я смог заставить его работать с разными типами, например: Checkbox, Text и т. д... Но я не могу заставить его работать с изображениями.

Я получаю эту ошибку: Invalid Cast from 'System.String' to 'System.Drawing.Image'

кто-нибудь знает решение или есть предложения о том, как я должен делать это ? Спасибо

3 ответов


относительно легко иметь столбец типа DataGridViewImageColumn отображать текст в определенных ячейках.

все, что вам нужно сделать, это заменить нужные ячейки с DataGridViewTextBoxCell.

так, например, если я добавлю следующий столбец изображения в мою сетку:

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

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

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

это решение оставляет немного работы для вас, если вы хотите разные изображения (вам нужно привязать к свойству типа image) и если вы хотите другой текст. Поскольку свойство Value столбца image имеет тип Image, вы не можете использовать ту же привязку.

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


я нашел я для обработки DataGridViewCellFormattingEventHandler и назначить изображение в DataGridViewCellFormattingEventHandler (который выбрасывал исключение при выходе ).

внутри DataGridViewCellFormattingEventHandler Я назначен e->Value = System::Drawing::Image::FromFile("c:/Test.jpeg");
или
e.Value = System.Drawing.Image.FromFile("c:/Test.jpeg");


для лучшего решения, пожалуйста, обратитесь к этому Blogspot пост.

Я пробовал то же решение для моего проекта, он работает хорошо, чтобы отобразить изображение 16x16 пикселей в моей ячейке datagrid, я отредактировал функцию выше TextandImageColumn класс:

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