Henry手记:WinForm Datagrid结构剖析(三)使用代码
点击次数:16 次 发布日期:2008-11-26 11:12:45 作者:源代码网
|
源代码网推荐 源代码网推荐 "---------------------------------------------------------------------- 源代码网推荐 源代码网推荐 " 辅助方法 源代码网推荐 源代码网推荐 "---------------------------------------------------------------------- 源代码网推荐 源代码网推荐 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() 源代码网推荐 源代码网推荐 End With 源代码网推荐 源代码网推荐 Catch dbError As OleDbException 源代码网推荐 源代码网推荐 Stop 源代码网推荐 源代码网推荐 End Try 源代码网推荐 源代码网推荐 源代码网推荐 源代码网推荐 With _CustomerDS.Tables 源代码网推荐 源代码网推荐 objCustomerCM = CType(Me.BindingContext(.Item(Name:="Customers")), CurrencyManager) 源代码网推荐 源代码网推荐 End With 源代码网推荐 源代码网推荐 "生成显示信息 源代码网推荐 源代码网推荐 With GridTableStyle 源代码网推荐 源代码网推荐 .MappingName = "Customers" 源代码网推荐 源代码网推荐 With .GridColumnStyles 源代码网推荐 源代码网推荐 .Add(column:=New DataGridTextBoxColumn(objCustomerCM. _ 源代码网推荐 源代码网推荐 GetItemProperties.Item(Name:="地址"))) 源代码网推荐 源代码网推荐 With .Item(index:=0) 源代码网推荐 源代码网推荐 .MappingName = "地址" 源代码网推荐 源代码网推荐 .HeaderText = "地址" 源代码网推荐 源代码网推荐 .Alignment = HorizontalAlignment.Left 源代码网推荐 源代码网推荐 .Width = IntAvgCharWidth * 20 源代码网推荐 源代码网推荐 .NullText = String.Empty 源代码网推荐 源代码网推荐 End With 源代码网推荐 源代码网推荐 _StatesDT = _CustomerDS.Tables.Item("国家") 源代码网推荐 源代码网推荐 .Add(column:=New DataGridComboBoxColumn(DataSource:=_StatesDT, _ 源代码网推荐 源代码网推荐 DisplayMember:=0, _ 源代码网推荐 源代码网推荐 ValueMember:=0)) 源代码网推荐 源代码网推荐 With .Item(index:=1) 源代码网推荐 源代码网推荐 .MappingName = "国家" 源代码网推荐 源代码网推荐 .HeaderText = "国家" 源代码网推荐 源代码网推荐 .Alignment = HorizontalAlignment.Left 源代码网推荐 源代码网推荐 .Width = IntAvgCharWidth * 10 源代码网推荐 源代码网推荐 .NullText = String.Empty 源代码网推荐 源代码网推荐 End With 源代码网推荐 源代码网推荐 .Add(column:=New DataGridTextBoxColumn(objCustomerCM. _ 源代码网推荐 源代码网推荐 GetItemProperties.Item(Name:="城市"))) 源代码网推荐 源代码网推荐 With .Item(index:=2) 源代码网推荐 源代码网推荐 .MappingName = "城市" 源代码网推荐 源代码网推荐 .HeaderText = "城市" 源代码网推荐 源代码网推荐 .Alignment = HorizontalAlignment.Left 源代码网推荐 源代码网推荐 .Width = IntAvgCharWidth * 20 源代码网推荐 源代码网推荐 .NullText = String.Empty 源代码网推荐 源代码网推荐 End With 源代码网推荐 源代码网推荐 End With 源代码网推荐 源代码网推荐 End With 源代码网推荐 源代码网推荐 With EntryGrid 源代码网推荐 源代码网推荐 .CaptionText = String.Empty 源代码网推荐 源代码网推荐 .DataSource = _CustomerDS 源代码网推荐 源代码网推荐 .DataMember = "Customers" 源代码网推荐 源代码网推荐 .TableStyles.Add(table:=GridTableStyle) 源代码网推荐 源代码网推荐 End With 源代码网推荐 源代码网推荐 End Sub 源代码网推荐 源代码网推荐 源代码网推荐 源代码网推荐 致谢:本程序参考了网上的多个实现方案,在此向各位原作者表示感谢。 源代码网推荐 源代码网推荐 ---- 源代码网推荐 源代码网推荐 声明:本文版权与解释权归韩睿所有,如需转载,请保留完整的内容及此声明。 做人要厚道,请注明转自酷网动力(www.ASPCOOL.COM)。 源代码网推荐 源代码网供稿. |
