当前位置:首页 > 网络编程 > WEB编程 > ASP.net >  Henry手记:WinForm Datagrid结构剖析(三)类代码

 Henry手记:WinForm Datagrid结构剖析(三)类代码

点击次数:14 次 发布日期:2008-11-26 11:12:46 作者:源代码网
源代码网推荐      -------------------X类的代码X---------------------
源代码网推荐  
源代码网推荐  Option Strict On
源代码网推荐  
源代码网推荐  Option Explicit On
源代码网推荐  
源代码网推荐  Imports System.Collections
源代码网推荐  
源代码网推荐  Imports System.ComponentModel
源代码网推荐  
源代码网推荐  Imports System.Drawing
源代码网推荐  
源代码网推荐  Imports System.Windows.Forms
源代码网推荐  
源代码网推荐  Imports System.Data
源代码网推荐  
源代码网推荐  
源代码网推荐  
源代码网推荐  Public Class DataGridComboBox
源代码网推荐  
源代码网推荐  ‘与DataGridTextBox类相类似地定义一个在下拉框列类中使用的ComboBox
源代码网推荐  
源代码网推荐   Inherits ComboBox
源代码网推荐  
源代码网推荐   Public Sub New()
源代码网推荐  
源代码网推荐   MyBase.New()
源代码网推荐  
源代码网推荐   End Sub
源代码网推荐  
源代码网推荐   Public isInEditOrNavigateMode As Boolean = True
源代码网推荐  
源代码网推荐  End Class
源代码网推荐  
源代码网推荐  
源代码网推荐  
源代码网推荐  Public Class DataGridComboBoxColumn
源代码网推荐  
源代码网推荐   Inherits DataGridColumnStyle
源代码网推荐  
源代码网推荐   " 与用户界面相关的变量
源代码网推荐  
源代码网推荐   Private xMargin As Integer = 2
源代码网推荐  
源代码网推荐   Private yMargin As Integer = 1
源代码网推荐  
源代码网推荐   Private Combo As DataGridComboBox
源代码网推荐  
源代码网推荐   Private _DisplayMember As String
源代码网推荐  
源代码网推荐   Private _ValueMember As String
源代码网推荐  
源代码网推荐   " 用于跟踪编辑状态变化的变量
源代码网推荐  
源代码网推荐   Private OldVal As String = String.Empty
源代码网推荐  
源代码网推荐   Private InEdit As Boolean = False
源代码网推荐  
源代码网推荐   "构造函数 – 实例的DisplayMember, ValueMember值为由父类传来的integer类型的值
源代码网推荐  
源代码网推荐   Public Sub New(ByRef DataSource As DataTable, _
源代码网推荐  
源代码网推荐   ByVal DisplayMember As Integer, _
源代码网推荐  
源代码网推荐   ByVal ValueMember As Integer)
源代码网推荐  
源代码网推荐   Combo = New DataGridComboBox()
源代码网推荐  
源代码网推荐   _DisplayMember = DataSource.Columns.Item(index:=DisplayMember).ToString
源代码网推荐  
源代码网推荐   _ValueMember = DataSource.Columns.Item(index:=ValueMember).ToString
源代码网推荐  
源代码网推荐   With Combo
源代码网推荐  
源代码网推荐   .Visible = False
源代码网推荐  
源代码网推荐   .DataSource = DataSource
源代码网推荐  
源代码网推荐   .DisplayMember = _DisplayMember
源代码网推荐  
源代码网推荐   .ValueMember = _ValueMember
源代码网推荐  
源代码网推荐   End With
源代码网推荐  
源代码网推荐   End Sub
源代码网推荐  
源代码网推荐   "构造函数– 实例的DisplayMember, ValueMember 是String类型的值
源代码网推荐  
源代码网推荐   Public Sub New(ByRef DataSource As DataTable, _
源代码网推荐  
源代码网推荐   ByVal DisplayMember As String, _
源代码网推荐  
源代码网推荐   ByVal ValueMember As String)
源代码网推荐  
源代码网推荐   Combo = New DataGridComboBox()
源代码网推荐  
源代码网推荐   With Combo
源代码网推荐  
源代码网推荐   .Visible = False
源代码网推荐  
源代码网推荐   .DataSource = DataSource
源代码网推荐  
源代码网推荐   .DisplayMember = DisplayMember
源代码网推荐  
源代码网推荐   .ValueMember = ValueMember
源代码网推荐  
源代码网推荐   End With
源代码网推荐  
源代码网推荐   End Sub
源代码网推荐  
源代码网推荐   "------------------------------------------------------
源代码网推荐  
源代码网推荐   "从 DataGridColumnStyle类继承下来的方法
源代码网推荐  
源代码网推荐   "------------------------------------------------------
源代码网推荐  
源代码网推荐   " 焦点离开combobox格后的改变
源代码网推荐  
源代码网推荐   Protected Overloads Overrides Sub Abort(ByVal RowNum As Integer)
源代码网推荐  
源代码网推荐   Debug.WriteLine("Abort()")
源代码网推荐  
源代码网推荐   RollBack()
源代码网推荐  
源代码网推荐   HideComboBox()
源代码网推荐  
源代码网推荐   EndEdit()
源代码网推荐  
源代码网推荐   End Sub
源代码网推荐  
源代码网推荐   " 接受改变
源代码网推荐  
源代码网推荐   Protected Overloads Overrides Function Commit(ByVal DataSource As CurrencyManager, _
源代码网推荐  
源代码网推荐   ByVal RowNum As Integer) As Boolean
源代码网推荐  
源代码网推荐   HideComboBox()
源代码网推荐  
源代码网推荐   If Not InEdit Then
源代码网推荐  
源代码网推荐   Return True
源代码网推荐  
源代码网推荐   End If
源代码网推荐  
源代码网推荐   Try
源代码网推荐  
源代码网推荐   Dim Value As Object = Combo.SelectedValue
源代码网推荐  
源代码网推荐   If NullText.Equals(Value) Then
源代码网推荐  
源代码网推荐   Value = Convert.DBNull
源代码网推荐  
源代码网推荐   End If
源代码网推荐  
源代码网推荐   SetColumnValueAtRow(DataSource, RowNum, Value)
源代码网推荐  
源代码网推荐   Catch e As Exception
源代码网推荐  
源代码网推荐   RollBack()
源代码网推荐  
源代码网推荐   Return False
源代码网推荐  
源代码网推荐   End Try
源代码网推荐  
源代码网推荐   EndEdit()
源代码网推荐  
源代码网推荐   Return True
源代码网推荐  
源代码网推荐   End Function
源代码网推荐  
源代码网推荐   " 移开聚焦
源代码网推荐  
源代码网推荐   Protected Overloads Overrides Sub ConcedeFocus()
源代码网推荐  
源代码网推荐   Combo.Visible = False
源代码网推荐  
源代码网推荐   End Sub
源代码网推荐  
源代码网推荐   " 编辑单元格
源代码网推荐  
源代码网推荐   Protected Overloads Overrides Sub Edit(ByVal Source As CurrencyManager, _
源代码网推荐  
源代码网推荐   ByVal Rownum As Integer, _
源代码网推荐  
源代码网推荐   ByVal Bounds As Rectangle, _
源代码网推荐  
源代码网推荐   ByVal [ReadOnly] As Boolean, _
源代码网推荐  
源代码网推荐   ByVal InstantText As String, _
源代码网推荐  
源代码网推荐   ByVal CellIsVisible As Boolean)
源代码网推荐  
源代码网推荐   Combo.Text = String.Empty
源代码网推荐  
源代码网推荐   Dim OriginalBounds As Rectangle = Bounds
源代码网推荐  
源代码网推荐   OldVal = Combo.Text
源代码网推荐  
源代码网推荐   If CellIsVisible Then
源代码网推荐  
源代码网推荐   Bounds.Offset(xMargin, yMargin)
源代码网推荐  
源代码网推荐   Bounds.Width -= xMargin * 2
源代码网推荐  
源代码网推荐   Bounds.Height -= yMargin
源代码网推荐  
源代码网推荐   Combo.Bounds = Bounds
源代码网推荐  
源代码网推荐   Combo.Visible = True
源代码网推荐  
源代码网推荐   Else
源代码网推荐  
源代码网推荐   Combo.Bounds = OriginalBounds
源代码网推荐  
源代码网推荐   Combo.Visible = False
源代码网推荐  
源代码网推荐   End If
源代码网推荐  
源代码网推荐   Combo.SelectedValue = GetText(GetColumnValueAtRow(Source, Rownum))
源代码网推荐  
源代码网推荐   If Not InstantText Is Nothing Then
源代码网推荐  
源代码网推荐   Combo.SelectedValue = InstantText
源代码网推荐  
源代码网推荐   End If
源代码网推荐  
源代码网推荐   Combo.RightToLeft = Me.DataGridTableStyle.DataGrid.RightToLeft
源代码网推荐  
源代码网推荐   Combo.Focus()
源代码网推荐  
源代码网推荐   If InstantText Is Nothing Then
源代码网推荐  
源代码网推荐   Combo.SelectAll()
源代码网推荐  
源代码网推荐   Else
源代码网推荐  
源代码网推荐   Dim [End] As Integer = Combo.Text.Length
源代码网推荐  
源代码网推荐   Combo.Select([End], 0)
源代码网推荐  
源代码网推荐   End If
源代码网推荐  
源代码网推荐   If Combo.Visible Then
源代码网推荐  
源代码网推荐   DataGridTableStyle.DataGrid.Invalidate(OriginalBounds)
源代码网推荐  
源代码网推荐   End If
源代码网推荐  
源代码网推荐   InEdit = True
源代码网推荐  
源代码网推荐   End Sub
源代码网推荐  
源代码网推荐   Protected Overloads Overrides Function GetMinimumHeight() As Integer
源代码网推荐  
源代码网推荐   " 设置combobox的最小高度
源代码网推荐  
源代码网推荐   Return Combo.PreferredHeight + yMargin
源代码网推荐  
源代码网推荐   End Function
源代码网推荐  
源代码网推荐   Protected Overloads Overrides Function GetPreferredHeight(ByVal g As Graphics, _
源代码网推荐  
源代码网推荐   ByVal Value As Object) As Integer
源代码网推荐  
源代码网推荐   Debug.WriteLine("GetPreferredHeight()")
源代码网推荐  
源代码网推荐   Dim NewLineIndex As Integer = 0
源代码网推荐  
源代码网推荐   Dim NewLines As Integer = 0
源代码网推荐  
源代码网推荐   Dim ValueString As String = Me.GetText(Value)
源代码网推荐  
源代码网推荐   Do
源代码网推荐  
源代码网推荐   While NewLineIndex <> -1
源代码网推荐  
源代码网推荐   NewLineIndex = ValueString.IndexOf("r ", NewLineIndex + 1)
源代码网推荐  
源代码网推荐   NewLines += 1
源代码网推荐  
源代码网推荐   End While
源代码网推荐  
源代码网推荐   Loop
源代码网推荐  
源代码网推荐   Return FontHeight * NewLines + yMargin
源代码网推荐  
源代码网推荐   End Function
源代码网推荐  
源代码网推荐   Protected Overloads Overrides Function GetPreferredSize(ByVal g As Graphics, _
源代码网推荐  
源代码网推荐   ByVal Value As Object) As Size
源代码网推荐  
源代码网推荐   Dim Extents As Size = Size.Ceiling(g.MeasureString(GetText(Value), _
源代码网推荐  
源代码网推荐   Me.DataGridTableStyle.DataGrid.Font))
源代码网推荐  
源代码网推荐   Extents.Width += xMargin * 2 + DataGridTableGridLineWidth
源代码网推荐  
源代码网推荐   Extents.Height += yMargin
源代码网推荐  
源代码网推荐   Return Extents
源代码网推荐  
源代码网推荐   End Function
源代码网推荐  
源代码网推荐   Protected Overloads Overrides Sub Paint(ByVal g As Graphics, _
源代码网推荐  
源代码网推荐   ByVal Bounds As Rectangle, _
源代码网推荐  
源代码网推荐   ByVal Source As CurrencyManager, _
源代码网推荐  
源代码网推荐   ByVal RowNum As Integer)
源代码网推荐  
源代码网推荐   Paint(g, Bounds, Source, RowNum, False)
源代码网推荐  
源代码网推荐   End Sub
源代码网推荐  
源代码网推荐   Protected Overloads Overrides Sub Paint(ByVal g As Graphics, _
源代码网推荐  
源代码网推荐   ByVal Bounds As Rectangle, _
源代码网推荐  
源代码网推荐   ByVal Source As CurrencyManager, _
源代码网推荐  
源代码网推荐   ByVal RowNum As Integer, _
源代码网推荐  
源代码网推荐   ByVal AlignToRight As Boolean)
源代码网推荐  
源代码网推荐   Dim Text As String = GetText(GetColumnValueAtRow(Source, RowNum))
源代码网推荐  
源代码网推荐   PaintText(g, Bounds, Text, AlignToRight)
源代码网推荐  
源代码网推荐   End Sub
源代码网推荐  
源代码网推荐   Protected Overloads Sub Paint(ByVal g As Graphics, _
源代码网推荐  
源代码网推荐   ByVal Bounds As Rectangle, _
源代码网推荐  
源代码网推荐   ByVal Source As CurrencyManager, _
源代码网推荐  
源代码网推荐   ByVal RowNum As Integer, _
源代码网推荐  
源代码网推荐   ByVal BackBrush As Brush, _
源代码网推荐  
源代码网推荐   ByVal ForeBrush As Brush, _
源代码网推荐  
源代码网推荐   ByVal AlignToRight As Boolean)
源代码网推荐  
源代码网推荐  
源代码网推荐  
源代码网推荐   Dim Text As String = GetText(GetColumnValueAtRow(Source, RowNum))
源代码网推荐  
源代码网推荐   PaintText(g, Bounds, Text, BackBrush, ForeBrush, AlignToRight)
源代码网推荐  
源代码网推荐   End Sub
源代码网推荐  
源代码网推荐   Protected Overloads Overrides Sub SetDataGridInColumn(ByVal Value As DataGrid)
源代码网推荐  
源代码网推荐   MyBase.SetDataGridInColumn(Value)
源代码网推荐  
源代码网推荐   If Not (Combo.Parent Is Value) Then
源代码网推荐  
源代码网推荐   If Not (Combo.Parent Is Nothing) Then
源代码网推荐  
源代码网推荐   Combo.Parent.Controls.Remove(Combo)
源代码网推荐  
源代码网推荐   End If
源代码网推荐  
源代码网推荐   End If
源代码网推荐  
源代码网推荐   If Not (Value Is Nothing) Then Value.Controls.Add(Combo)
源代码网推荐  
源代码网推荐   End Sub
源代码网推荐  
源代码网推荐   Protected Overloads Overrides Sub UpdateUI(ByVal Source As CurrencyManager, _
源代码网推荐  
源代码网推荐   Val RowNum As Integer, ByVal InstantText As String)
源代码网推荐  
源代码网推荐   Combo.Text = GetText(GetColumnValueAtRow(Source, RowNum))
源代码网推荐  
源代码网推荐   If Not (InstantText Is Nothing) Then
源代码网推荐  
源代码网推荐   Combo.Text = InstantText
源代码网推荐  
源代码网推荐   End If
源代码网推荐  
源代码网推荐   End Sub
源代码网推荐  
源代码网推荐  ---未完,见(三)使用代码一文---------
源代码网推荐  
源代码网推荐  声明:本文版权与解释权归韩睿所有,如需转载,请保留完整的内容及此声明。  做人要厚道,请注明转自酷网动力(www.ASPCOOL.COM)。
源代码网推荐


源代码网供稿.
网友评论 (0)
会员中心
网络编程
本站推荐
网络编程之精华