在DataGrid中添加图片列(VB.NET)

重写DataGridTextBoxColumn类
None.gif
None.gif
Imports  System
None.gif
Imports  System.Windows.Forms
None.gif
Imports  System.Drawing
None.gif
Imports  System.Data
None.gif
Imports  System.Collections
None.gif
None.gif
None.gif
' / <summary>
None.gif'
/ Summary description for DataGridImageCell.
None.gif'
/ </summary>
None.gif

ExpandedBlockStart.gifContractedBlock.gif
Public   Class DataGridImageCell Class DataGridImageCell
InBlock.gif   
Inherits DataGridTextBoxColumn
InBlock.gif   
Private theImages1 As ArrayList
InBlock.gif   
ExpandedSubBlockStart.gifContractedSubBlock.gif   
Public Sub New()Sub New()
ExpandedSubBlockEnd.gif   
End Sub
 'New
InBlock.gif
   
InBlock.gif   
ExpandedSubBlockStart.gifContractedSubBlock.gif   
Public Property theImages()Property theImages() As ArrayList
InBlock.gif      
Get
InBlock.gif         
Return theImages1
InBlock.gif      
End Get
InBlock.gif      
Set
InBlock.gif         theImages1 
= value
InBlock.gif      
End Set
ExpandedSubBlockEnd.gif   
End Property

InBlock.gif    
ExpandedSubBlockStart.gifContractedSubBlock.gif    
Protected Overloads Overrides Sub Paint()Sub Paint(ByVal g As System.Drawing.Graphics, ByVal bounds As System.Drawing.Rectangle, ByVal [source] As System.Windows.Forms.CurrencyManager, ByVal rowNum As IntegerByVal backBrush As System.Drawing.Brush, ByVal foreBrush As System.Drawing.Brush, ByVal alignToRight As Boolean)
InBlock.gif        
Dim o As Object = Me.GetColumnValueAtRow([source], rowNum)
InBlock.gif        
If Not (o Is NothingThen
InBlock.gif            
Dim i As Integer = Fix(o)
InBlock.gif            g.FillRectangle(backBrush, bounds)
InBlock.gif
InBlock.gif            
Dim bmp As Bitmap = CType(theImages(i), Bitmap)
InBlock.gif
InBlock.gif            
'GridImageCellDrawOption cellDrawOption = GridImageCellDrawOption.NoResize;
InBlock.gif
            'GridImageCellDrawOption cellDrawOption = GridImageCellDrawOption.FitProportionally;
InBlock.gif
            Dim cellDrawOption As GridImageCellDrawOption = GridImageCellDrawOption.FitToCell
InBlock.gif
InBlock.gif
InBlock.gif            
Dim gu As System.Drawing.GraphicsUnit = System.Drawing.GraphicsUnit.Point
InBlock.gif
InBlock.gif            
Dim srcRect As RectangleF = bmp.GetBounds(gu)
InBlock.gif            
Dim destRect As Rectangle = Rectangle.Empty
InBlock.gif
InBlock.gif            
Dim saveRegion As [Region] = g.Clip
InBlock.gif
InBlock.gif            
Select Case cellDrawOption
InBlock.gif                
Case GridImageCellDrawOption.FitToCell
InBlock.gif                    destRect 
= bounds
InBlock.gif                
Case GridImageCellDrawOption.NoResize
InBlock.gif                    destRect 
= New Rectangle(bounds.X, bounds.Y, Fix(srcRect.Width), Fix(srcRect.Height))
InBlock.gif                    g.Clip 
= New [Region](bounds)
InBlock.gif                
Case GridImageCellDrawOption.FitProportionally
InBlock.gif                    
If (TrueThen
InBlock.gif                        
Dim srcRatio As Single = srcRect.Width / srcRect.Height
InBlock.gif                        
Dim tarRatio As Single = System.Convert.ToSingle(bounds.Width) / bounds.Height
InBlock.gif                        destRect 
= bounds
InBlock.gif                        
If tarRatio < srcRatio Then
InBlock.gif                            destRect.Height 
= Fix(destRect.Width * srcRatio)
InBlock.gif                        
Else
InBlock.gif                            destRect.Width 
= Fix(destRect.Height * srcRatio)
InBlock.gif                        
End If
InBlock.gif                    
End If
InBlock.gif
InBlock.gif                
Case Else
InBlock.gif            
End Select
InBlock.gif
InBlock.gif            
If Not destRect.IsEmpty Then
InBlock.gif                
'g.DrawImage(bmp, destRect, srcRect, gu)
InBlock.gif
                Dim destRectF As New RectangleF(destRect.X, destRect.Y, destRect.Width, destRect.Height)
InBlock.gif                
Dim srcRectF As New RectangleF(srcRect.X, srcRect.Y, srcRect.Width, srcRect.Height)
InBlock.gif
InBlock.gif                g.DrawImage(bmp, destRectF, srcRectF, gu)
InBlock.gif            
End If
InBlock.gif            g.Clip 
= saveRegion
InBlock.gif        
End If
ExpandedSubBlockEnd.gif    
End Sub
 'Paint
InBlock.gif

InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif    
Protected Overloads Overrides Sub Edit()Sub Edit(ByVal [source] As System.Windows.Forms.CurrencyManager, ByVal rowNum As IntegerByVal bounds As System.Drawing.Rectangle, ByVal [readOnlyAs BooleanByVal instantText As StringByVal cellIsVisible As Boolean)
InBlock.gif        
'overriden to avoid editing
ExpandedSubBlockEnd.gif
    End Sub
 'Edit
InBlock.gif

InBlock.gif
InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif    
Public Enum GridImageCellDrawOptionEnum GridImageCellDrawOption
InBlock.gif        FitToCell 
= 0
InBlock.gif        NoResize 
= 1
InBlock.gif        FitProportionally 
= 2
ExpandedSubBlockEnd.gif    
End Enum
 'GridImageCellDrawOption
InBlock.gif

ExpandedBlockEnd.gif
End Class
  ' DataGridImageCell
测试代码
None.gif Private   WithEvents  dataGrid1  As  System.Windows.Forms.DataGrid
None.gif
None.gif  
Private  nRows  As   Integer   =   5
None.gif    
Private  bitMaps  As  ArrayList
None.gif
ExpandedBlockStart.gifContractedBlock.gif 
Private   Sub Form1_Load() Sub Form1_Load(ByVal sender As ObjectByVal e As System.EventArgs) Handles MyBase.Load
InBlock.gif
InBlock.gif        
'create a datatable
InBlock.gif
        Dim dt As New DataTable("MyTable")
InBlock.gif
InBlock.gif        dt.Columns.Add(
New DataColumn("Col0"))
InBlock.gif        dt.Columns.Add(
New DataColumn("Images"GetType(Integer)))
InBlock.gif
InBlock.gif        
Dim r As New Random()
InBlock.gif        
Dim i As Integer
InBlock.gif
InBlock.gif        
For i = 0 To nRows - 1
InBlock.gif            
Dim dr As DataRow = dt.NewRow()
InBlock.gif            dr(
0= String.Format("row{0}", i)
InBlock.gif            dr(
1= r.Next(4)
InBlock.gif            dt.Rows.Add(dr)
InBlock.gif        
Next
InBlock.gif
InBlock.gif        
'store bitmaps in an arraylist
InBlock.gif
        bitMaps = New ArrayList()
InBlock.gif        
Dim strm As System.IO.Stream = [GetType]().Assembly.GetManifestResourceStream("ImageCellInDataGrid.Blue hills.jpg")
InBlock.gif        bitMaps.Add(
New Bitmap(strm))
InBlock.gif        strm 
= [GetType]().Assembly.GetManifestResourceStream("ImageCellInDataGrid.Sunset.jpg")
InBlock.gif        bitMaps.Add(
New Bitmap(strm))
InBlock.gif        strm 
= [GetType]().Assembly.GetManifestResourceStream("ImageCellInDataGrid.Water lilies.jpg")
InBlock.gif        bitMaps.Add(
New Bitmap(strm))
InBlock.gif        strm 
= [GetType]().Assembly.GetManifestResourceStream("ImageCellInDataGrid.Winter.jpg")
InBlock.gif        bitMaps.Add(
New Bitmap(strm))
InBlock.gif
InBlock.gif        
Dim tableStyle As New DataGridTableStyle()
InBlock.gif        tableStyle.MappingName 
= "MyTable"
InBlock.gif
InBlock.gif        
Dim tbc As New DataGridTextBoxColumn()
InBlock.gif        tbc.MappingName 
= "Col0"
InBlock.gif        tbc.HeaderText 
= "Column 1"
InBlock.gif        tbc.Width 
= 50
InBlock.gif        tableStyle.GridColumnStyles.Add(tbc)
InBlock.gif
InBlock.gif        
Dim width As Integer = Me.dataGrid1.ClientSize.Width - tbc.Width - Me.dataGrid1.RowHeaderWidth - 4
InBlock.gif        
Dim tbc1 As New DataGridImageCell()
InBlock.gif        tbc1.MappingName 
= "Images"
InBlock.gif        tbc1.HeaderText 
= "Images"
InBlock.gif        tbc1.theImages 
= bitMaps
InBlock.gif        tbc1.Width 
= width
InBlock.gif        tableStyle.GridColumnStyles.Add(tbc1)
InBlock.gif
InBlock.gif        
Me.dataGrid1.TableStyles.Add(tableStyle)
InBlock.gif        
Me.dataGrid1.DataSource = dt
InBlock.gif        dt.DefaultView.AllowNew 
= False
InBlock.gif
InBlock.gif        
Dim rect As Rectangle = Me.dataGrid1.GetCellBounds(00)
InBlock.gif        topPos 
= rect.Top
InBlock.gif        
Dim height As Integer = (Me.dataGrid1.ClientSize.Height - topPos - nRows) / nRows
InBlock.gif        tableStyle.PreferredRowHeight 
= height
InBlock.gif        
Me.dataGrid1.DataSource = Nothing
InBlock.gif        
Me.dataGrid1.DataSource = dt
ExpandedBlockEnd.gif    
End Sub
  ' Form1_Load 
None.gif

None.gif

转载于:https://www.cnblogs.com/timsoft/articles/415000.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值