linux社区爱心援助Linux认证系列教程业界动态站务新闻公司招聘网络学院网址大全LPI专题CISCO专题
设为首页
加入收藏
管理团队
JSP  
JAVA  
PERL  
 您的位置:首页 > 开发语言 > asp.net >
栏目导栏
  php
  JSP
  ASP
  asp.net
  JAVA
  c/c++/c#
  perl
  JavaScript
  Basic
  Delphi
资料搜索
热门文章
·NetBPM工作流的一个示例:请假
·Office Web Components(OWC)绘
·asp.net正则表达式语法
·asp.net 2.0 ajax中使用PopupC
·Ado.Net读取Excel常见问题总结
·数据源为空时如何让GridView显
·如何让UpdatePanel支持文件上传
·C#.Net的常见面试试题和参考答
·asp.net ajax客户端编程+jquer
·Brettle.Web.NeatUpload.dll支
·ASP.NET使用Cookie
·ASP.NET DEMO 15: 同时支持行单
·如何使IE的后退按钮无效
·如何在ASP.NET中用OWC绘制图表
·asp.net:正确判断当前用户角色
最新文章
·Ajax Control Toolkit Animati
·讨论一下类似BlogEngine内一次
·使用CSS+SiteMap+UserControl+
·Asp.net中多彩下拉框的实现
·浅谈ASP.NET的Postback
·分清ASP.NET AJAX中的Extender
·Tip:在使用AjaxControlTookit
·有关注册DataItem的一些可能被
·IIRF(Ionic's Isapi Rewrite
·asp.net 客户端回调功能的实现
·关于控件部分的看法--读Progra
·为什么在vista上做开发
·如何封装JS和CSS文件为服务器端
·岂今我看过的最强的排序算法
·设计模式学习笔记之单件模式
Google
 
WinForm Datagrid结构剖析(三)类代码
[ 作者:  加入时间:2007-11-27 17:02:48  来自:Linux联盟收集整理 ]
-------------------X类的代码X--------------------- YAALinux联盟
   YAALinux联盟
  Option Strict On YAALinux联盟
   YAALinux联盟
  Option Explicit On YAALinux联盟
   YAALinux联盟
  Imports System.Collections YAALinux联盟
   YAALinux联盟
  Imports System.ComponentModel YAALinux联盟
   YAALinux联盟
  Imports System.Drawing YAALinux联盟
   YAALinux联盟
  Imports System.Windows.Forms YAALinux联盟
   YAALinux联盟
  Imports System.Data YAALinux联盟
   YAALinux联盟
   YAALinux联盟
   YAALinux联盟
  Public Class DataGridComboBox YAALinux联盟
   YAALinux联盟
  ‘与DataGridTextBox类相类似地定义一个在下拉框列类中使用的ComboBox YAALinux联盟
   YAALinux联盟
   Inherits ComboBox YAALinux联盟
   YAALinux联盟
   Public Sub New() YAALinux联盟
   YAALinux联盟
   MyBase.New() YAALinux联盟
   YAALinux联盟
   End Sub YAALinux联盟
   YAALinux联盟
   Public isInEditOrNavigateMode As Boolean = True YAALinux联盟
   YAALinux联盟
  End Class YAALinux联盟
   YAALinux联盟
   YAALinux联盟
   YAALinux联盟
  Public Class DataGridComboBoxColumn YAALinux联盟
   YAALinux联盟
   Inherits DataGridColumnStyle YAALinux联盟
   YAALinux联盟
   ' 与用户界面相关的变量 YAALinux联盟
   YAALinux联盟
   Private xMargin As Integer = 2 YAALinux联盟
   YAALinux联盟
   Private yMargin As Integer = 1 YAALinux联盟
   YAALinux联盟
   Private Combo As DataGridComboBox YAALinux联盟
   YAALinux联盟
   Private _DisplayMember As String YAALinux联盟
   YAALinux联盟
   Private _ValueMember As String YAALinux联盟
   YAALinux联盟
   ' 用于跟踪编辑状态变化的变量 YAALinux联盟
   YAALinux联盟
   Private OldVal As String = String.Empty YAALinux联盟
   YAALinux联盟
   Private InEdit As Boolean = False YAALinux联盟
   YAALinux联盟
   '构造函数 – 实例的DisplayMember, ValueMember值为由父类传来的integer类型的值 YAALinux联盟
   YAALinux联盟
   Public Sub New(ByRef DataSource As DataTable, _ YAALinux联盟
   YAALinux联盟
   ByVal DisplayMember As Integer, _ YAALinux联盟
   YAALinux联盟
   ByVal ValueMember As Integer) YAALinux联盟
   YAALinux联盟
   Combo = New DataGridComboBox() YAALinux联盟
   YAALinux联盟
   _DisplayMember = DataSource.Columns.Item(index:=DisplayMember).ToString YAALinux联盟
   YAALinux联盟
   _ValueMember = DataSource.Columns.Item(index:=ValueMember).ToString YAALinux联盟
   YAALinux联盟
   With Combo YAALinux联盟
   YAALinux联盟
   .Visible = False YAALinux联盟
   YAALinux联盟
   .DataSource = DataSource YAALinux联盟
   YAALinux联盟
   .DisplayMember = _DisplayMember YAALinux联盟
   YAALinux联盟
   .ValueMember = _ValueMember YAALinux联盟
   YAALinux联盟
   End With YAALinux联盟
   YAALinux联盟
   End Sub YAALinux联盟
   YAALinux联盟
   '构造函数– 实例的DisplayMember, ValueMember 是String类型的值 YAALinux联盟
   YAALinux联盟
   Public Sub New(ByRef DataSource As DataTable, _ YAALinux联盟
   YAALinux联盟
   ByVal DisplayMember As String, _ YAALinux联盟
   YAALinux联盟
   ByVal ValueMember As String) YAALinux联盟
   YAALinux联盟
   Combo = New DataGridComboBox() YAALinux联盟
   YAALinux联盟
   With Combo YAALinux联盟
   YAALinux联盟
   .Visible = False YAALinux联盟
   YAALinux联盟
   .DataSource = DataSource YAALinux联盟
   YAALinux联盟
   .DisplayMember = DisplayMember YAALinux联盟
   YAALinux联盟
   .ValueMember = ValueMember YAALinux联盟
   YAALinux联盟
   End With YAALinux联盟
   YAALinux联盟
   End Sub YAALinux联盟
   YAALinux联盟
   '------------------------------------------------------ YAALinux联盟
   YAALinux联盟
   '从 DataGridColumnStyle类继承下来的方法 YAALinux联盟
   YAALinux联盟
   '------------------------------------------------------ YAALinux联盟
   YAALinux联盟
   ' 焦点离开combobox格后的改变 YAALinux联盟
   YAALinux联盟
   Protected Overloads Overrides Sub Abort(ByVal RowNum As Integer) YAALinux联盟
   YAALinux联盟
   Debug.WriteLine("Abort()") YAALinux联盟
   YAALinux联盟
   RollBack() YAALinux联盟
   YAALinux联盟
   HideComboBox() YAALinux联盟
   YAALinux联盟
   EndEdit() YAALinux联盟
   YAALinux联盟
   End Sub YAALinux联盟
   YAALinux联盟
   ' 接受改变 YAALinux联盟
   YAALinux联盟
   Protected Overloads Overrides Function Commit(ByVal DataSource As CurrencyManager, _ YAALinux联盟
   YAALinux联盟
   ByVal RowNum As Integer) As Boolean YAALinux联盟
   YAALinux联盟
   HideComboBox() YAALinux联盟
   YAALinux联盟
   If Not InEdit Then YAALinux联盟
   YAALinux联盟
   Return True YAALinux联盟
   YAALinux联盟
   End If YAALinux联盟
   YAALinux联盟
   Try YAALinux联盟
   YAALinux联盟
   Dim Value As Object = Combo.SelectedValue YAALinux联盟
   YAALinux联盟
   If NullText.Equals(Value) Then YAALinux联盟
   YAALinux联盟
   Value = Convert.DBNull YAALinux联盟
   YAALinux联盟
   End If YAALinux联盟
   YAALinux联盟
   SetColumnValueAtRow(DataSource, RowNum, Value) YAALinux联盟
   YAALinux联盟
   Catch e As Exception YAALinux联盟
   YAALinux联盟
   RollBack() YAALinux联盟
   YAALinux联盟
   Return False YAALinux联盟
   YAALinux联盟
   End Try YAALinux联盟
   YAALinux联盟
   EndEdit() YAALinux联盟
   YAALinux联盟
   Return True YAALinux联盟
   YAALinux联盟
   End Function YAALinux联盟
   YAALinux联盟
   ' 移开聚焦 YAALinux联盟
   YAALinux联盟
   Protected Overloads Overrides Sub ConcedeFocus() YAALinux联盟
   YAALinux联盟
   Combo.Visible = False YAALinux联盟
   YAALinux联盟
   End Sub YAALinux联盟
   YAALinux联盟
   ' 编辑单元格 YAALinux联盟
   YAALinux联盟
   Protected Overloads Overrides Sub Edit(ByVal Source As CurrencyManager, _ YAALinux联盟
   YAALinux联盟
   ByVal Rownum As Integer, _ YAALinux联盟
   YAALinux联盟
   ByVal Bounds As Rectangle, _ YAALinux联盟
   YAALinux联盟
   ByVal [ReadOnly] As Boolean, _ YAALinux联盟
   YAALinux联盟
   ByVal InstantText As String, _ YAALinux联盟
   YAALinux联盟
   ByVal CellIsVisible As Boolean) YAALinux联盟
   YAALinux联盟
   Combo.Text = String.Empty YAALinux联盟
   YAALinux联盟
   Dim OriginalBounds As Rectangle = Bounds YAALinux联盟
   YAALinux联盟
   OldVal = Combo.Text YAALinux联盟
   YAALinux联盟
   If CellIsVisible Then YAALinux联盟
   YAALinux联盟
   Bounds.Offset(xMargin, yMargin) YAALinux联盟
   YAALinux联盟
   Bounds.Width -= xMargin * 2 YAALinux联盟
   YAALinux联盟
   Bounds.Height -= yMargin YAALinux联盟
   YAALinux联盟
   Combo.Bounds = Bounds YAALinux联盟
   YAALinux联盟
   Combo.Visible = True YAALinux联盟
   YAALinux联盟
   Else YAALinux联盟
   YAALinux联盟
   Combo.Bounds = OriginalBounds YAALinux联盟
   YAALinux联盟
   Combo.Visible = False YAALinux联盟
   YAALinux联盟
   End If YAALinux联盟
   YAALinux联盟
   Combo.SelectedValue = GetText(GetColumnValueAtRow(Source, Rownum)) YAALinux联盟
   YAALinux联盟
   If Not InstantText Is Nothing Then YAALinux联盟
   YAALinux联盟
   Combo.SelectedValue = InstantText YAALinux联盟
   YAALinux联盟
   End If YAALinux联盟
   YAALinux联盟
   Combo.RightToLeft = Me.DataGridTableStyle.DataGrid.RightToLeft YAALinux联盟
   YAALinux联盟
   Combo.Focus() YAALinux联盟
   YAALinux联盟
   If InstantText Is Nothing Then YAALinux联盟
   YAALinux联盟
   Combo.SelectAll() YAALinux联盟
   YAALinux联盟
   Else YAALinux联盟
   YAALinux联盟
   Dim [End] As Integer = Combo.Text.Length YAALinux联盟
   YAALinux联盟
   Combo.Select([End], 0) YAALinux联盟
   YAALinux联盟
   End If YAALinux联盟
   YAALinux联盟
   If Combo.Visible Then YAALinux联盟
   YAALinux联盟
   DataGridTableStyle.DataGrid.Invalidate(OriginalBounds) YAALinux联盟
   YAALinux联盟
   End If YAALinux联盟
   YAALinux联盟
   InEdit = True YAALinux联盟
   YAALinux联盟
   End Sub YAALinux联盟
   YAALinux联盟
   Protected Overloads Overrides Function GetMinimumHeight() As Integer YAALinux联盟
   YAALinux联盟
   ' 设置combobox的最小高度 YAALinux联盟
   YAALinux联盟
   Return Combo.PreferredHeight + yMargin YAALinux联盟
   YAALinux联盟
   End Function YAALinux联盟
   YAALinux联盟
   Protected Overloads Overrides Function GetPreferredHeight(ByVal g As Graphics, _ YAALinux联盟
   YAALinux联盟
   ByVal Value As Object) As Integer YAALinux联盟
   YAALinux联盟
   Debug.WriteLine("GetPreferredHeight()") YAALinux联盟
   YAALinux联盟
   Dim NewLineIndex As Integer = 0 YAALinux联盟
   YAALinux联盟
   Dim NewLines As Integer = 0 YAALinux联盟
   YAALinux联盟
   Dim ValueString As String = Me.GetText(Value) YAALinux联盟
   YAALinux联盟
   Do YAALinux联盟
   YAALinux联盟
   While NewLineIndex <> -1 YAALinux联盟
   YAALinux联盟
   NewLineIndex = ValueString.IndexOf("r\n", NewLineIndex + 1) YAALinux联盟
   YAALinux联盟
   NewLines += 1 YAALinux联盟
   YAALinux联盟
   End While YAALinux联盟
   YAALinux联盟
   Loop YAALinux联盟
   YAALinux联盟
   Return FontHeight * NewLines + yMargin YAALinux联盟
   YAALinux联盟
   End Function YAALinux联盟
   YAALinux联盟
   Protected Overloads Overrides Function GetPreferredSize(ByVal g As Graphics, _ YAALinux联盟
   YAALinux联盟
   ByVal Value As Object) As Size YAALinux联盟
   YAALinux联盟
   Dim Extents As Size = Size.Ceiling(g.MeasureString(GetText(Value), _ YAALinux联盟
   YAALinux联盟
   Me.DataGridTableStyle.DataGrid.Font)) YAALinux联盟
   YAALinux联盟
   Extents.Width += xMargin * 2 + DataGridTableGridLineWidth YAALinux联盟
   YAALinux联盟
   Extents.Height += yMargin YAALinux联盟
   YAALinux联盟
   Return Extents YAALinux联盟
   YAALinux联盟
   End Function YAALinux联盟
   YAALinux联盟
   Protected Overloads Overrides Sub Paint(ByVal g As Graphics, _ YAALinux联盟
   YAALinux联盟
   ByVal Bounds As Rectangle, _ YAALinux联盟
   YAALinux联盟
   ByVal Source As CurrencyManager, _ YAALinux联盟
   YAALinux联盟
   ByVal RowNum As Integer) YAALinux联盟
   YAALinux联盟
   Paint(g, Bounds, Source, RowNum, False) YAALinux联盟
   YAALinux联盟
   End Sub YAALinux联盟
   YAALinux联盟
   Protected Overloads Overrides Sub Paint(ByVal g As Graphics, _ YAALinux联盟
   YAALinux联盟
   ByVal Bounds As Rectangle, _ YAALinux联盟
   YAALinux联盟
   ByVal Source As CurrencyManager, _ YAALinux联盟
   YAALinux联盟
   ByVal RowNum As Integer, _ YAALinux联盟
   YAALinux联盟
   ByVal AlignToRight As Boolean) YAALinux联盟
   YAALinux联盟
   Dim Text As String = GetText(GetColumnValueAtRow(Source, RowNum)) YAALinux联盟
   YAALinux联盟
   PaintText(g, Bounds, Text, AlignToRight) YAALinux联盟
   YAALinux联盟
   End Sub YAALinux联盟
   YAALinux联盟
   Protected Overloads Sub Paint(ByVal g As Graphics, _ YAALinux联盟
   YAALinux联盟
   ByVal Bounds As Rectangle, _ YAALinux联盟
   YAALinux联盟
   ByVal Source As CurrencyManager, _ YAALinux联盟
   YAALinux联盟
   ByVal RowNum As Integer, _ YAALinux联盟
   YAALinux联盟
   ByVal BackBrush As Brush, _ YAALinux联盟
   YAALinux联盟
   ByVal ForeBrush As Brush, _ YAALinux联盟
   YAALinux联盟
   ByVal AlignToRight As Boolean) YAALinux联盟
   YAALinux联盟
   YAALinux联盟
   YAALinux联盟
   Dim Text As String = GetText(GetColumnValueAtRow(Source, RowNum)) YAALinux联盟
   YAALinux联盟
   PaintText(g, Bounds, Text, BackBrush, ForeBrush, AlignToRight) YAALinux联盟
   YAALinux联盟
   End Sub YAALinux联盟
   YAALinux联盟
   Protected Overloads Overrides Sub SetDataGridInColumn(ByVal Value As DataGrid) YAALinux联盟
   YAALinux联盟
   MyBase.SetDataGridInColumn(Value) YAALinux联盟
   YAALinux联盟
   If Not (Combo.Parent Is Value) Then YAALinux联盟
   YAALinux联盟
   If Not (Combo.Parent Is Nothing) Then YAALinux联盟
   YAALinux联盟
   Combo.Parent.Controls.Remove(Combo) YAALinux联盟
   YAALinux联盟
   End If YAALinux联盟
   YAALinux联盟
   End If YAALinux联盟
   YAALinux联盟
   If Not (Value Is Nothing) Then Value.Controls.Add(Combo) YAALinux联盟
   YAALinux联盟
   End Sub YAALinux联盟
   YAALinux联盟
   Protected Overloads Overrides Sub UpdateUI(ByVal Source As CurrencyManager, _ YAALinux联盟
   YAALinux联盟
   Val RowNum As Integer, ByVal InstantText As String) YAALinux联盟
   YAALinux联盟
   Combo.Text = GetText(GetColumnValueAtRow(Source, RowNum)) YAALinux联盟
   YAALinux联盟
   If Not (InstantText Is Nothing) Then YAALinux联盟
   YAALinux联盟
   Combo.Text = InstantText YAALinux联盟
   YAALinux联盟
   End If YAALinux联盟
   YAALinux联盟
   End Sub YAALinux联盟
   YAALinux联盟
  ---未完,见(三)使用代码一文--------- YAALinux联盟
   YAALinux联盟
  声明:本文版权与解释权归韩睿所有,如需转载,请保留完整的内容及此声明。 Linux联盟收集整理 ,转贴请标明原始链接,如有任何疑问欢迎来本站Linux论坛讨论
评论】【加入收藏夹】【 】【打印】【关闭
※ 相关链接
 ·WinForm Datagrid结构剖析(三)使用代码  (2007-11-27 17:01:15)