窗體繼承及實現(xiàn)
所處理的物理表
有了上面的類,我們就可應(yīng)用它來實現(xiàn)MIS系統(tǒng)中關(guān)于物理表的操作功能。
例如我們有一個tInfo表、tUser表、tChange表、tSub表,表中都定義了主關(guān)鍵字字段FSYSTEMID, 表結(jié)構(gòu)如下:
tChange表 tSub表
生成窗體模板
我們要向tInfo表、tUser二個表里插入數(shù)據(jù),刪除數(shù)據(jù),更新數(shù)據(jù),它們應(yīng)該分別在二個Form里完成。這里,我們可先定義一Form模板,命名為FrmModule,在FrmModule上增加工具箱ToolBar1,在ToolBar1增加"增加"、"保存"按鈕 、"刪除"、"退出"等按鈕,增加數(shù)據(jù)網(wǎng)絡(luò)DataGrid1,文本盒及下拉列表盒。布置好后如下圖:
把在繼承的Form中可能會重新設(shè)置控件的控件對象的友元屬性改為公有屬性:
要使模板FrmModule中的控件能夠在繼承的窗體中能夠修改其所繼承的控件屬性,必須把其友元屬性改為公有屬性
Public WithEvents Label2 As System.Windows.Forms.Label Public WithEvents txt4 As System.Windows.Forms.ComboBox …
定義FrmModule類的全局變量
FrmModule直接調(diào)用CData類的方法,完成所需功能。
Public Shared gCls As New CData() Public gIsUpdate as Boolean
定義FrmModule的方法
在FrmModule的Load事件中連接數(shù)據(jù)庫,并填充網(wǎng)格數(shù)據(jù),即:
Public Shadows Sub FrmModel_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load gCls.DB.ConnOracle("GDZC", "liyu", "123") gCls.FillGrid(Me.DataGrid1) End Sub
當(dāng)單擊DataGrid1時,應(yīng)把DataGrid1的當(dāng)前行寫入輸入控件中供用戶修改數(shù)據(jù),取得當(dāng)前行的標(biāo)識,這里用SystemID記錄,同時表示可以更新。這個過程在DataGrid1的_CurrentCellChanged事件中完成, 即:
Private Sub DataGrid1_CurrentCellChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles DataGrid1.CurrentCellChanged Dim RowIndex As Int16 RowIndex = DataGrid1.CurrentRowIndex gCls.DataGridToText(Me) gCls.SystemID = DataGrid1.Item(RowIndex, 0) gIsUpdate = True End Sub
編寫ToolBar1的ButtonClick事件。由按鈕文本識別所單擊的對象.當(dāng)時單擊"增加"時表示不能更新,當(dāng)時單擊"保存"時要識別是更新還是插入數(shù)據(jù)。執(zhí)行完后要重新填充網(wǎng)格, 即:
Private Sub ToolBar1_ButtonClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.ToolBarButtonClickEventArgs) Handles ToolBar1.ButtonClick Select Case e.Button.Text Case "增加" gIsUpdate = False Case "保存" WriteDateToArray() If gIsUpdate Then gCls.Update() Exit Select Else gCls.Insert() End If Case "刪除" If MsgBox ("真的刪除該數(shù)據(jù)嗎?(Y/N)") = 7 Then Return End If gCls.Delete() Case "退出" Me.Close() Exit Sub End Select gCls.FillGrid(DataGrid1) End Sub
'把輸入的數(shù)據(jù)用對象數(shù)組保存起來 Public Overridable Sub WriteDateToArray() Dim i As Int16 Dim obj As Control For i = 1 To gCls.FieldCount - 1 For Each obj In Me.Controls If obj.TabIndex = i Then gCls.ObjFields(i) = obj.Text Exit For End If Next Next gCls.ObjFields(0) = gCls.DB.GetMaxID(gCls.UpdateTable, "FSYSTEMID") + 1 End Sub
|