類似BOOLEAN列的DATAGRIDTEXTBOX的改進
發表時間:2024-02-13 來源:明輝站整理相關軟件相關文章人氣:
在這里我們來講一篇關于如何進行數據列內容與顯示操作的方法。
這種方法類似于實現:有數據表test(id int not null primary key ,name varchar(20) ,sex bit ), 那么是否有方法不通過直接使用sql語句,如:select id ,name ,sex =case sex ( when true then ‘男’ when false then ‘女’ else sex end) 的形式來構建要顯示的是“男”,“女”,而實際上存儲的是true和false呢?當然,如果我們使用datagridboolcolumn,通過設置它的一些屬性(truevalue,falsevalue)可以達到類似的效果,但對于那些非bit列呢?回答是肯定的。我們使用繼承datagridtextboxcolumn類,然后重寫GetColumnValueAtRow方法,來達到效果。GetColumnValueAtRow方法,把要從數據源的數據取出,然后判斷后,返回我們想要在網格中顯示的值。(代碼見后面的詳細代碼)
這樣,我們可以順利地在網格中顯示我們想要的數據了,但是還有另外一個問題,就是如果我們想在網格中修改數據,那么是否可以被提交給數據庫呢?如果僅僅通過上面的操作,只是達到了顯示的目的,還要重寫edit,commit,abort方法,來達到點擊單元格后修改內容,然后提交,最后更新到數據庫。
下面是程序的完整代碼,這里只是拋磚引玉,希望你可以根據需要來作出相應的改進。
'***************************************************************************
'程序名稱:CanSetValueDatagridTextbox
'功能說明:繼承自datagridtextboxcolumn類的列樣式,主要實現顯示值與實際值的顯示與更新
'參數說明:無
'返回值 :cansetvaluedatagridtextbox
'編寫人員:閔峰
'日期時間:2005-06-16上午
'遺留問題:點擊列標題排序會發生顯示值的改變,這是一個bug嗎?有待解決
'**************************************************************************
Public Class cansetvaluedatagridtextbox
Inherits System.Windows.Forms.DataGridTextBoxColumn
#Region " Windows 窗體設計器生成的代碼 "
Public Sub New()
MyBase.New()
'該調用是 Windows 窗體設計器所必需的。
InitializeComponent()
'在 InitializeComponent() 調用之后添加任何初始化
End Sub
'UserControl 重寫 dispose 以清理組件列表。
Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
If disposing Then
If Not (components Is Nothing) Then
components.Dispose()
End If
End If
MyBase.Dispose(disposing)
End Sub
'Windows 窗體設計器所必需的
Private components As System.ComponentModel.IContainer