在实际的应用中经常会遇到根据其它列计算某一新列的结果,实现这样的功能有两种办法:一个直接使用sql语句;另外就是在绑定时进行动态添加。第一种方法以前已经介绍过。下面就是第二种方法的具体实现:
adddatasetcolumn.aspx
inherits=”aspxweb.adddatasetcolumn”%>
adddatasetcolumn.aspx.vb
public class adddatasetcolumn
inherits system.web.ui.page
#region ” web 窗体设计器生成的代码 ”
该调用是 web 窗体设计器所必需的。
end sub
protected withevents datagrid1 as system.web.ui.webcontrols.datagrid
注意: 以下占位符声明是 web 窗体设计器所必需的。
不要删除或移动它。
private designerplaceholderdeclaration as system.object
private sub page_init(byval sender as system.object, byval e as system.eventargs) handles mybase.init
codegen: 此方法调用是 web 窗体设计器所必需的
不要使用代码编辑器修改它。
initializecomponent()
end sub
#end region
private sub page_load(byval sender as system.object, byval e as system.eventargs) handles mybase.load
dim strcnn as string = “data source=.\netsdk; initial catalog=northwind;user id=sa;password=;”
dim ocn as new system.data.sqlclient.sqlconnection(strcnn)
dim strsql as system.string = “select * from [order details]”
dim ds as system.data.dataset = new system.data.dataset
ocn.open()
dim da as system.data.sqlclient.sqldataadapter = new system.data.sqlclient.sqldataadapter(strsql, ocn)
可以直接使用sql语句实现,这个方法可以直接绑定,不需要用模板即可
cmd.commandtext = “select *,unitprice * quantity *(1- discount) as total from [order details]”
我们使用另外一种方法,在datagrid绑定之前为dataset添加一个列
da.fill(ds, “ds”)
dim dvwgrid as dataview = ds.tables(0).defaultview
datagrid1.datasource = dvwgrid
datagrid1.databind()
ocn.close()
ocn.dispose()
end sub
private sub datagrid1_itemdatabound(byval sender as object, byval e as datagriditemeventargs) _
handles datagrid1.itemdatabound
dim elemtype as listitemtype = e.item.itemtype
if (elemtype = listitemtype.item or elemtype = listitemtype.alternatingitem) then
把dataitem转换回datarowview对象
dim mydatarowview as datarowview = ctype(e.item.dataitem, datarowview)
dim mydatarow as datarow = mydatarowview.row
ctype(e.item.cells(0).findcontrol(“orderid”), label).text = mydatarow(“orderid”)
ctype(e.item.cells(1).findcontrol(“productid”), label).text = mydatarow(“productid”)
ctype(e.item.cells(2).findcontrol(“unitprice”), label).text = mydatarow(“unitprice”)
ctype(e.item.cells(3).findcontrol(“quantity”), label).text = mydatarow(“quantity”)
ctype(e.item.cells(4).findcontrol(“discount”), label).text = mydatarow(“discount”)
dim dblprice as double = double.parse(mydatarow(“unitprice”))
dim intquantity as integer = int32.parse(mydatarow(“quantity”))
dim intdiscount as double = double.parse(mydatarow(“discount”))
dim ntotal as string = string.format(“{0:c}”, dblprice * (1 – intdiscount) * intquantity)
ctype(e.item.cells(5).findcontrol(“lbltotal”), label).text = ntotal
end if
end sub
end class