在DataGrid中添加图片列(VB.NET)
重写DataGridTextBoxColumn类
![](/Images/OutliningIndicators/None.gif)
Imports System
Imports System.Windows.Forms
Imports System.Drawing
Imports System.Data
Imports System.Collections
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
'/ <summary>
'/ Summary description for DataGridImageCell.
'/ </summary>
![](/Images/OutliningIndicators/None.gif)
Public Class DataGridImageCell
Inherits DataGridTextBoxColumn
Private theImages1 As ArrayList
Public Sub New()
End Sub 'New
Public Property theImages() As ArrayList
Get
Return theImages1
End Get
Set
theImages1 = value
End Set
End Property
Protected Overloads Overrides Sub Paint(ByVal g As System.Drawing.Graphics, ByVal bounds As System.Drawing.Rectangle, ByVal [source] As System.Windows.Forms.CurrencyManager, ByVal rowNum As Integer, ByVal backBrush As System.Drawing.Brush, ByVal foreBrush As System.Drawing.Brush, ByVal alignToRight As Boolean)
Dim o As Object = Me.GetColumnValueAtRow([source], rowNum)
If Not (o Is Nothing) Then
Dim i As Integer = Fix(o)
g.FillRectangle(backBrush, bounds)
![](/Images/OutliningIndicators/InBlock.gif)
Dim bmp As Bitmap = CType(theImages(i), Bitmap)
![](/Images/OutliningIndicators/InBlock.gif)
'GridImageCellDrawOption cellDrawOption = GridImageCellDrawOption.NoResize;
'GridImageCellDrawOption cellDrawOption = GridImageCellDrawOption.FitProportionally;
Dim cellDrawOption As GridImageCellDrawOption = GridImageCellDrawOption.FitToCell
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
Dim gu As System.Drawing.GraphicsUnit = System.Drawing.GraphicsUnit.Point
![](/Images/OutliningIndicators/InBlock.gif)
Dim srcRect As RectangleF = bmp.GetBounds(gu)
Dim destRect As Rectangle = Rectangle.Empty
![](/Images/OutliningIndicators/InBlock.gif)
Dim saveRegion As [Region] = g.Clip
![](/Images/OutliningIndicators/InBlock.gif)
Select Case cellDrawOption
Case GridImageCellDrawOption.FitToCell
destRect = bounds
Case GridImageCellDrawOption.NoResize
destRect = New Rectangle(bounds.X, bounds.Y, Fix(srcRect.Width), Fix(srcRect.Height))
g.Clip = New [Region](bounds)
Case GridImageCellDrawOption.FitProportionally
If (True) Then
Dim srcRatio As Single = srcRect.Width / srcRect.Height
Dim tarRatio As Single = System.Convert.ToSingle(bounds.Width) / bounds.Height
destRect = bounds
If tarRatio < srcRatio Then
destRect.Height = Fix(destRect.Width * srcRatio)
Else
destRect.Width = Fix(destRect.Height * srcRatio)
End If
End If
![](/Images/OutliningIndicators/InBlock.gif)
Case Else
End Select
![](/Images/OutliningIndicators/InBlock.gif)
If Not destRect.IsEmpty Then
'g.DrawImage(bmp, destRect, srcRect, gu)
Dim destRectF As New RectangleF(destRect.X, destRect.Y, destRect.Width, destRect.Height)
Dim srcRectF As New RectangleF(srcRect.X, srcRect.Y, srcRect.Width, srcRect.Height)
![](/Images/OutliningIndicators/InBlock.gif)
g.DrawImage(bmp, destRectF, srcRectF, gu)
End If
g.Clip = saveRegion
End If
End Sub 'Paint
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
Protected Overloads Overrides Sub Edit(ByVal [source] As System.Windows.Forms.CurrencyManager, ByVal rowNum As Integer, ByVal bounds As System.Drawing.Rectangle, ByVal [readOnly] As Boolean, ByVal instantText As String, ByVal cellIsVisible As Boolean)
'overriden to avoid editing
End Sub 'Edit
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
Public Enum GridImageCellDrawOption
FitToCell = 0
NoResize = 1
FitProportionally = 2
End Enum 'GridImageCellDrawOption
![](/Images/OutliningIndicators/InBlock.gif)
End Class 'DataGridImageCell
测试代码
Private WithEvents dataGrid1 As System.Windows.Forms.DataGrid
![](/Images/OutliningIndicators/None.gif)
Private nRows As Integer = 5
Private bitMaps As ArrayList
![](/Images/OutliningIndicators/None.gif)
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load
![](/Images/OutliningIndicators/InBlock.gif)
'create a datatable
Dim dt As New DataTable("MyTable")
![](/Images/OutliningIndicators/InBlock.gif)
dt.Columns.Add(New DataColumn("Col0"))
dt.Columns.Add(New DataColumn("Images", GetType(Integer)))
![](/Images/OutliningIndicators/InBlock.gif)
Dim r As New Random()
Dim i As Integer
![](/Images/OutliningIndicators/InBlock.gif)
For i = 0 To nRows - 1
Dim dr As DataRow = dt.NewRow()
dr(0) = String.Format("row{0}", i)
dr(1) = r.Next(4)
dt.Rows.Add(dr)
Next
![](/Images/OutliningIndicators/InBlock.gif)
'store bitmaps in an arraylist
bitMaps = New ArrayList()
Dim strm As System.IO.Stream = [GetType]().Assembly.GetManifestResourceStream("ImageCellInDataGrid.Blue hills.jpg")
bitMaps.Add(New Bitmap(strm))
strm = [GetType]().Assembly.GetManifestResourceStream("ImageCellInDataGrid.Sunset.jpg")
bitMaps.Add(New Bitmap(strm))
strm = [GetType]().Assembly.GetManifestResourceStream("ImageCellInDataGrid.Water lilies.jpg")
bitMaps.Add(New Bitmap(strm))
strm = [GetType]().Assembly.GetManifestResourceStream("ImageCellInDataGrid.Winter.jpg")
bitMaps.Add(New Bitmap(strm))
![](/Images/OutliningIndicators/InBlock.gif)
Dim tableStyle As New DataGridTableStyle()
tableStyle.MappingName = "MyTable"
![](/Images/OutliningIndicators/InBlock.gif)
Dim tbc As New DataGridTextBoxColumn()
tbc.MappingName = "Col0"
tbc.HeaderText = "Column 1"
tbc.Width = 50
tableStyle.GridColumnStyles.Add(tbc)
![](/Images/OutliningIndicators/InBlock.gif)
Dim width As Integer = Me.dataGrid1.ClientSize.Width - tbc.Width - Me.dataGrid1.RowHeaderWidth - 4
Dim tbc1 As New DataGridImageCell()
tbc1.MappingName = "Images"
tbc1.HeaderText = "Images"
tbc1.theImages = bitMaps
tbc1.Width = width
tableStyle.GridColumnStyles.Add(tbc1)
![](/Images/OutliningIndicators/InBlock.gif)
Me.dataGrid1.TableStyles.Add(tableStyle)
Me.dataGrid1.DataSource = dt
dt.DefaultView.AllowNew = False
![](/Images/OutliningIndicators/InBlock.gif)
Dim rect As Rectangle = Me.dataGrid1.GetCellBounds(0, 0)
topPos = rect.Top
Dim height As Integer = (Me.dataGrid1.ClientSize.Height - topPos - nRows) / nRows
tableStyle.PreferredRowHeight = height
Me.dataGrid1.DataSource = Nothing
Me.dataGrid1.DataSource = dt
End Sub 'Form1_Load
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)