轉:Visual Basic.NET快速開發MIS系統(2)
2024-07-10 13:02:21
供稿:網友
窗體繼承及實現
所處理的物理表
有了上面的類,我們就可應用它來實現mis系統中關于物理表的操作功能。
例如我們有一個tinfo表、tuser表、tchange表、tsub表,表中都定義了主關鍵字字段fsystemid, 表結構如下:
tchange表
tsub表
生成窗體模板
我們要向tinfo表、tuser二個表里插入數據,刪除數據,更新數據,它們應該分別在二個form里完成。這里,我們可先定義一form模板,命名為frmmodule,在frmmodule上增加工具箱toolbar1,在toolbar1增加"增加"、"保存"按鈕 、"刪除"、"退出"等按鈕,增加數據網絡datagrid1,文本盒及下拉列表盒。布置好后如下圖:
把在繼承的form中可能會重新設置控件的控件對象的友元屬性改為公有屬性:
要使模板frmmodule中的控件能夠在繼承的窗體中能夠修改其所繼承的控件屬性,必須把其友元屬性改為公有屬性
public withevents label2 as system.windows.forms.label
public withevents txt4 as system.windows.forms.combobox
…
定義frmmodule類的全局變量
frmmodule直接調用cdata類的方法,完成所需功能。
public shared gcls as new cdata()
public gisupdate as boolean
定義frmmodule的方法
在frmmodule的load事件中連接數據庫,并填充網格數據,即:
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
當單擊datagrid1時,應把datagrid1的當前行寫入輸入控件中供用戶修改數據,取得當前行的標識,這里用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事件。由按鈕文本識別所單擊的對象.當時單擊"增加"時表示不能更新,當時單擊"保存"時要識別是更新還是插入數據。執行完后要重新填充網格, 即:
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 ("真的刪除該數據嗎?(y/n)") = 7 then
return
end if
gcls.delete()
case "退出"
me.close()
exit sub
end select
gcls.fillgrid(datagrid1)
end sub
'把輸入的數據用對象數組保存起來
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