明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺(tái)!

類似BOOLEAN列的DATAGRIDTEXTBOX的改進(jìn)

[摘要]在這里我們來(lái)講一篇關(guān)于如何進(jìn)行數(shù)據(jù)列內(nèi)容與顯示操作的方法。 這種方法類似于實(shí)現(xiàn):有數(shù)據(jù)表test(id int not null primary key ,name varchar(20) ,sex bit ), 那么是否有方法不通過(guò)直接使用sql語(yǔ)句,如:select id ,name ,sex...
 

  在這里我們來(lái)講一篇關(guān)于如何進(jìn)行數(shù)據(jù)列內(nèi)容與顯示操作的方法。

這種方法類似于實(shí)現(xiàn):有數(shù)據(jù)表test(id int not null primary key ,name varchar(20) ,sex bit ), 那么是否有方法不通過(guò)直接使用sql語(yǔ)句,如:select id ,name ,sex =case sex ( when true then ‘’ when false then ‘’ else sex end) 的形式來(lái)構(gòu)建要顯示的是“男”,“女”,而實(shí)際上存儲(chǔ)的是truefalse呢?當(dāng)然,如果我們使用datagridboolcolumn,通過(guò)設(shè)置它的一些屬性(truevalue,falsevalue)可以達(dá)到類似的效果,但對(duì)于那些非bit列呢?回答是肯定的。我們使用繼承datagridtextboxcolumn類,然后重寫(xiě)GetColumnValueAtRow方法,來(lái)達(dá)到效果。GetColumnValueAtRow方法,把要從數(shù)據(jù)源的數(shù)據(jù)取出,然后判斷后,返回我們想要在網(wǎng)格中顯示的值。(代碼見(jiàn)后面的詳細(xì)代碼)

  這樣,我們可以順利地在網(wǎng)格中顯示我們想要的數(shù)據(jù)了,但是還有另外一個(gè)問(wèn)題,就是如果我們想在網(wǎng)格中修改數(shù)據(jù),那么是否可以被提交給數(shù)據(jù)庫(kù)呢?如果僅僅通過(guò)上面的操作,只是達(dá)到了顯示的目的,還要重寫(xiě)edit,commitabort方法,來(lái)達(dá)到點(diǎn)擊單元格后修改內(nèi)容,然后提交,最后更新到數(shù)據(jù)庫(kù)。

下面是程序的完整代碼,這里只是拋磚引玉,希望你可以根據(jù)需要來(lái)作出相應(yīng)的改進(jìn)。

'***************************************************************************

'程序名稱:CanSetValueDatagridTextbox

'功能說(shuō)明:繼承自datagridtextboxcolumn類的列樣式,主要實(shí)現(xiàn)顯示值與實(shí)際值的顯示與更新                                                

'參數(shù)說(shuō)明:無(wú)

'返回值  cansetvaluedatagridtextbox

'編寫(xiě)人員:閔峰

'日期時(shí)間:2005-06-16上午

'遺留問(wèn)題:點(diǎn)擊列標(biāo)題排序會(huì)發(fā)生顯示值的改變,這是一個(gè)bug嗎?有待解決

'**************************************************************************

Public Class cansetvaluedatagridtextbox

    Inherits System.Windows.Forms.DataGridTextBoxColumn

 

#Region " Windows 窗體設(shè)計(jì)器生成的代碼 "

 

    Public Sub New()

        MyBase.New()

 

        '該調(diào)用是 Windows 窗體設(shè)計(jì)器所必需的。

        InitializeComponent()

 

        ' InitializeComponent() 調(diào)用之后添加任何初始化

 

    End Sub

 

    'UserControl 重寫(xiě) 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 窗體設(shè)計(jì)器所必需的

    Private components As System.ComponentModel.IContainer


[1] [2] [3]  下一頁(yè)