编程过程中总会有些重复的东西,如果到处拷贝,既不容易维护,结构也很不清晰,这时候就可以把他们提取出来,根据其共性,架构属于自己的库,因为一直从事asp.net方面的开发,就结合实际情况,用vb.net举个例子。
asp.net方面的开发,就结合实际情况,用vb.net举个例子。
在做进销存等软件的时候,经常会用到仓库、部门、类别等基础资料,而且这些东西会反复用到,最常使用的是使用dropdownlist控件,如果还没有选定,就列出所有的信息,如果打开已有记录,就显示已选定的信息,功能很简单,就举个仓库的例子。
常用的代码如下,因为是个例子,异常处理就省略了:
(new store).getdata 返还的是个datatable,里面有主键”storeid”,名称”storename”字段
protected withevents dropstore as system.web.ui.webcontrols.dropdownlist
‘绑定仓库dropdownlist列表
‘如果storeid=0,则选择内容为“”,否则选定该仓库
private sub bindstore(optional byval storeid as integer = 0)
dropstore.datasource = (new store).getdata
dropstore.datavaluefield=”storeid”
dropstore.datatextfield =”storename”
dropstore.databind()
dim listitem as listitem = new listitem(“”, “0”)
dropclass.items.add(listitem)
if storeid=0 then
dropstore.selectedindex = dropstore.items.count – 1
else
dropstore.items.findbyvalue(storeid).selected = true
end if
end sub
imports system.componentmodel
imports system.web.ui
‘把webcontrol改为dropdownlist
<toolboxdata(“<{0}:storedropdownlist runat=server></{0}:storedropdownlist>”)> public class storedropdownlist
inherits system.web.ui.webcontrols.dropdownlist
dim _storeid as string
‘只读属性
<bindable(true), category(“appearance”), defaultvalue(“”)> readonly property storename() as string
get
return me.selecteditem.text
end get
end property
‘设置当前仓库的storeid,根据这个值控制dropdownlist显示
<bindable(true), category(“appearance”), defaultvalue(“”)> property storeid() as string
get
return _storeid
end get
set(byval value as string)
_storeid = value
me.clearselection()
me.items.findbyvalue(value).selected = true
end set
end property
protected overrides sub ondatabinding(byval e as system.eventargs)
if not page.ispostback then
dim dt as datatable = getstore()
ensurechildcontrols() 确定服务器控件是否包含子控件。如果不包含,则创建子控件
dim listitem as webcontrols.listitem
for each drow as datarow in dt.rows
listitem = new webcontrols.listitem(drow(“showname”), drow(“id”))
me.items.add(listitem)
next
me.items.insert(0, new webcontrols.listitem(“”, “0”))
mybase.ondatabinding(e)
end if
end sub
‘提供数据部分
private function getstore() as datatable
return (new store).getdata
end function
end class
编译后,会生成文件jxccontrols.dll,如果项目需要使用,就在工具箱添加storename控件,把它拖动到页面的相应位置,代码部分如下:
private sub page_load(byval sender as system.object, byval e as system.eventargs) handles mybase.load
if not ispostback then
……
storedropdownlist1.databind()
bindface()
end if
end sub
private sub bindface
……
‘如果已经选定仓库,为storeid,则只需要如下设置即可
storedropdownlist1.storeid=storeid
……
end sub
‘得到已经选定的仓库的名称
dim storename as string= storedropdownlist1.storename
‘获得已经选定的仓库的id
dim storeid as integer= storedropdownlist1.storeid
采用同样的方法,就可以逐步构建属于自己的基础库,比如机构,部门,类别等,编程需要时,在工具栏添加相应的控件,拖拉几下,简单设置几个属性,方便快捷。
为了得到更大的灵活性,采用这种方法需要注意数据的采集,在本例中就是(new store).getdata部分,最常用到的是与数据的连接采用单态模式,各种不同数据的采集使用虚拟工厂方法,这样做,才能够使你的类库逐步丰富强大。