首页 > 编程 > .NET > 正文

转: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  



发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表