接(三)类代码一文:(由于每篇文章的字数限制,不得不割开发,见谅!)
'----------------------------------------------------------------------
' 辅助方法
'----------------------------------------------------------------------
Private ReadOnly Property DataGridTableGridLineWidth() As Integer
Get
If Me .DataGridTableStyle.GridLineStyle = DataGridLineStyle.Solid Then
Return 1
Else
Return 0
End If
End Get
End Property
Private Sub EndEdit()
InEdit = False
Invalidate()
End Sub
Private Function GetText( ByVal Value As Object ) As String
If Value Is System.DBNull.Value Then Return NullText
If Not Value Is Nothing Then
Return Value.ToString
Else
Return String .Empty
End If
End Function
Private Sub HideComboBox() ‘隐藏Combobox
If Combo.Focused Then
Me .DataGridTableStyle.DataGrid.Focus()
End If
Combo.Visible = False
End Sub
Private Sub RollBack()
Combo.Text = OldVal
End Sub
Private Sub PaintText( ByVal g As Graphics, _
ByVal Bounds As Rectangle, _
ByVal Text As String , _
ByVal AlignToRight As Boolean )
Dim BackBrush As Brush = New SolidBrush( Me .DataGridTableStyle.BackColor)
Dim ForeBrush As Brush = New SolidBrush( Me .DataGridTableStyle.ForeColor)
PaintText(g, Bounds, Text, BackBrush, ForeBrush, AlignToRight)
End Sub
Private Sub PaintText( ByVal g As Graphics, _
ByVal TextBounds As Rectangle, _
ByVal Text As String , _
ByVal BackBrush As Brush, _
ByVal ForeBrush As Brush, _
ByVal AlignToRight As Boolean )
Dim Rect As Rectangle = TextBounds
Dim RectF As RectangleF = RectF.op_Implicit(Rect) ' 转为RectangleF类型
Dim Format As StringFormat = New StringFormat()
If AlignToRight Then
Format.FormatFlags = StringFormatFlags.DirectionRightToLeft
End If
Select Case Me .Alignment
Case Is = HorizontalAlignment.Left
Format.Alignment = StringAlignment.Near
Case Is = HorizontalAlignment.Right
Format.Alignment = StringAlignment.Far
Case Is = HorizontalAlignment.Center
Format.Alignment = StringAlignment.Center
End Select
Format.FormatFlags = Format.FormatFlags Or StringFormatFlags.NoWrap
g.FillRectangle(Brush:=BackBrush, Rect:=Rect)
Rect.Offset(0, yMargin)
Rect.Height -= yMargin
g.DrawString(Text, Me .DataGridTableStyle.DataGrid.Font, ForeBrush, RectF, Format)
Format.Dispose()
End Sub
End Class
4. 类的使用
如何使用这个类呢?方法其实很简单,把它看成与 DataGridTextBoxColumn或DataGridBoolColumn一样处理就行了。见下例:数据库名为Northwind.mdb
Private Sub FrmDropDownColumn_Load( ByVal sender As Object , ByVal e As System.EventArgs) Handles MyBase .Load
Dim objCustomerCM As CurrencyManager
Dim objCustomerTableStyle As DataGridTableStyle
Dim objGridCol As DataGridColumnStyle
Dim IntAvgCharWidth As Integer
' 新建一个DataSet对象
_CustomerDS = New DataSet()
'新建一个DataTable对象
_StatesDT = New DataTable()
'新建一个 DataGridTableStyle 对象
GridTableStyle = New DataGridTableStyle()
'计算显示时平均每个字符的宽度
With Graphics.FromHwnd( Me .Handle).MeasureString(Text:="ABCDEFGHIJKLMNOPQRSTUVWXYZ", Font:= Me .Font)
IntAvgCharWidth = CInt (.Width / 26!)
End With
' 建立与数据库的连接
_DB = New OleDbConnection()
Try
With _DB
.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=c:\Northwind.mdb"
.Open()
End With
Catch dbError As OleDbException
Stop
End Try
_DB.Close()
'
'新生成一条SQL语句且在DataSet中新建一个用户表
StrSQL = "SELECT * FROM 客户 WHERE 国家=" & Chr(34) & "美国" & Chr(34) & " ORDER BY 客户ID ASC"
Try
With New OleDbDataAdapter(selectCommand:= New OleDbCommand(cmdText:=StrSQL, _
Connection:=_DB))
.Fill(dataSet:=_CustomerDS, srcTable:="Customers")
.Dispose()
End With
Catch dbError As OleDbException
Stop
End Try
' 同与下拉框内容相关的数据源进行连接
_DB = New OleDbConnection()
Try
With _DB
.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=c:\Northwind.mdb"
.Open()
End With
Catch dbError As OleDbException
Stop
End Try
_DB.Close()
' 创建SQL语句
StrSQL = "SELECT * FROM States ORDER BY 国家名 ASC"
Try
With New OleDbDataAdapter(selectCommand:= New OleDbCommand(cmdText:=StrSQL, _
Connection:=_DB))
.Fill(dataSet:=_CustomerDS, srcTable:="国家")
.Dispose()
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 10pt; TEXT-ALIGN: left; mso-line-height-rule: exactly; mso-layo