学院首页>网络编程>ASP.NET>类似BOOLEAN列的DATAGRIDTEXTBOX的改进

类似BOOLEAN列的DATAGRIDTEXTBOX的改进

作者: 来源: 添加时间:2006-5-21 20:01:06
   '注意:以下过程是 Windows 窗体设计器所必需的

'可以使用 Windows 窗体设计器修改此过程。

'不要使用代码编辑器修改它。

Private Sub InitializeComponent()

  components = New System.ComponentModel.Container()

End Sub

#End Region

Private rnum As Integer '列序号

Private rname As String = "" '列名称

Private m_type As Type '列的类型

Public Sub New(ByVal source As DataTable, ByVal rnum As Integer, ByVal displaytrue As String, ByVal truevalue As String, _

ByVal displayfalse As String, ByVal falsevalue As String)

 rnum = rnum

  m_displaytrue = displaytrue

  m_valuetrue = truevalue

  m_displayfalse = displayfalse

  m_valuefalse = falsevalue

  m_type = source.Columns(rnum).DataType

End Sub

Public Sub New(ByVal source As DataTable, ByVal rname As String, ByVal displaytrue As String, ByVal truevalue As String, _

ByVal displayfalse As String, ByVal falsevalue As String)

  rname = rname

  m_displaytrue = displaytrue

  m_valuetrue = truevalue

  m_displayfalse = displayfalse

  m_valuefalse = falsevalue

  m_type = source.Columns(rname).GetType

End Sub

Private m_displaytrue As String '显示的真值

Private m_displayfalse As String '显示的假值

Private m_valuefalse As String '存储的假值

Private m_valuetrue As String '存储的真值

'-------------以下内容操作数据的显示---------------

'重写该过程是为了以合适的形式来显示数据(★)

Protected Overrides Function GetColumnValueAtRow(ByVal source As System.Windows.Forms.CurrencyManager, ByVal rowNum As Integer) As Object

  '从数据源获得指定行的数据(注意:这里使用的类型是object)

  Dim Result As Object = MyBase.GetColumnValueAtRow(source, rowNum)

  '显示的设置

  If Result.ToString = m_valuetrue Then

   Return Me.m_displaytrue

  ElseIf Result.ToString = m_valuefalse Then

  Return Me.m_displayfalse

  ElseIf Result Is DBNull.Value Then

   If Me.NullText Is Nothing Then

Return DBNull.Value

   Else

Return Me.NullText

   End If

  Else

   Throw New Exception("该列中存在没有指定显示的字符!")

  End If

End Function

'---------------以下内容操作更新------------------

Private isediting As Boolean = False '是否在修改状态

Private oldvalue As Object '原始值

'点击单元格,准备编辑(★)

Protected Overloads Overrides Sub Edit(ByVal source As System.Windows.Forms.CurrencyManager, ByVal rowNum As Integer, ByVal bounds As System.Drawing.Rectangle, ByVal [readOnly] As Boolean, ByVal instantText As String, ByVal cellIsVisible As Boolean)

  Console.WriteLine("edit") '---------

  '直接触发父类事件,是为了达到点击后选中文本的效果。(如果不触发就要自己把textbox移动到对应的边框内)

  MyBase.Edit(source, rowNum, bounds, [readOnly], instantText, cellIsVisible)

  '设置修改码

  isediting = True

  '记录原始值

  oldvalue = Me.GetColumnValueAtRow(source, rowNum)

End Sub

'对输入的修改进行提交(★)

Protected Overrides Function Commit(ByVal dataSource As System.Windows.Forms.CurrencyManager, ByVal rowNum As Integer) As Boolean

  Console.WriteLine("in commit") '---------

  '如果修改码为真则意味着修改完毕

  If Not isediting Then Return True

  '获得单元格的内容

  Dim currentvalue As Object = Me.TextBox.Text

  Console.WriteLine(currentvalue) '---------

  Try

   currentvalue = setsuitablevalue(currentvalue)

   SetColumnValueAtRow(dataSource, rowNum, currentvalue)

  Catch ex As Exception

   Return False

  End Try

  isediting = False

  Invalidate()

  Console.WriteLine("out commit") '---------

  Return True

End Function

第 2 页,共 3 页 [1] [2] [3]
站内搜索