欢迎光临
我们一直在努力

ASP+ 学习笔记 2

建站超值云服务器,限时71元/月

5).pagelet控件

自己做控件最简单的方法就是pagelet控件,后缀为.aspc,用register指令包含到webform中:

<%@ register tagprefix="acme" tagname="message" src="pagelet1.aspc" %>

tagprefix是pagelet的名称空间定义,tagname是给pagelet取的名字。src属性是虚拟目录。

pagelet的使用:

<acme:message runat="server"/>

。暴露pagelet的方法,像一个类一样定义属性,例:

<script language="c#" runat="server">

public string address{

get{

return txtaddress.value;

}

set{

txtaddress.value=value;

}

}

</script>

<input id="txtaddress" runat="server">

。封装事件



可以看出,pagelet可以取代include文件的作用。

。编程创建pagelet对象

可以用程序生成pagelet控件的实例,如:

control cl=loadcontrol("pagelet2.aspc");

((pagelet2_aspc)cl).category="business";

page.controls.add(cl);

注意,因为loadcontrol函数返回一个system.web.ui.control对象,因此需要造型。pagelet

的类型为文件名,点号换成下划线。

6).数据帮定控件

asp+中,不仅可以帮定到数据库,还可以帮定到简单的属性集合,甚至方法调用的结果,如:

customerid: <%# custid %>

<asp:listbox id="list1" datasource=<%# myarray %> runat="server">

<%# (customer.firstname + customer.lastname)%>

<%# getbalance(custid) %>

看起来跟asp中的<%=%>一样,但是asp是用response.write来替换的,而asp+则是在databind()

方法调用后才帮定的。数据帮定控件和page对象都有databind()方法。

注意,asp+是强类型的,所以:

<%# count.tostring() %>才对。

。databinder.eval()

一个静态方法,由asp+支持,允许后帮定的数据帮定表达式,而且还可选地转化为串,可以

用于模板。如不用eval,则像:

<%# string.format("{0:c}",((datarowview)container.dataitem)["someinteger"]) %>

可以用eval:

<%# databinder.eval(container.dataitem,"someinteger","{0:c}") %>

7).服务器方数据访问

。连接、命令和数据集(datasets)

ngws提供了一系列受管数据访问api,引入名称空间:

<%@ import namespace="system.data" %>

<%@ import namespace="system.data.sql" %>

a).生成sqlconnection

b).构造sqldatasetcommand

c).filldataset

如果是插入等操作,则用sqlcommand替换sqldatasetcommand.

记住:始终在用完连接后关闭连接!否则要等到页面被释放时才会被垃圾回收机制释放资源。

。帮定数据到datagrid,例:

….

dataset ds = new dataset();

mycommand.filldataset(ds,"authors");

mydatagrid.datasource = ds.tables["authors"].defaultview;

mydatagrid.databind();

。参数化查询

sqldatasetcommand支持参数,"@"作为参数前缀,例:

mycommand.selectcommand.parameters.add(new sqlparameter("@state",sqldatatype.varchar,2));

mycommand.selectcommand.parameters["@state"].value=newvalue;

注意,如果datagrid要在客户与服务器间轮转的话,一定要把maintainstate属性设置为false,

否则,性能受到影响,如:

<asp:datagrid id="mydatagrid" runat="server"

maintainstate="false"/>

。插入数据

应当保证不为null,可以使用try/catch块。

例:

string insertcmd = "insert into authors values(@id,@lname)"

sqlcommand myc = new sqlcommand(insertcmd,myconn);

myc.parameters["@id"].value=cu_id.value;

myc.parameters["@lname"].value=au_lname.value;

myc.activeconnection.open();

try{

myc.execute();

}catch(sqlexception e){

if (e.number==2627)

……//主键重复

}

myc.activeconnection.close();

。更新记录

datagrid提供了一些内在支持,有一个整型属性,edititemindex,表示哪一行可以编辑,一但设置,

该行的文本输入框显示,而不是却省的静态文本,如为-1则表示没有行可以编辑。

datagrid可以包含一个控件,editcommandcolumn,它将为datagrid引发三个事件,editcommand,

updatecommand,和cancelcommand。editcommandcolumn在属性中用columns定义,如:

<asp:datagrid id="mydatagrid" runat="server"

……

oneditcommand="mydatagrid_edit"

oncancelcommand="mydatagrid_cancel"

onupdatecommand="mydatagrid_update"

datakeyfield="au_id"

>

<property name="columns">

<asp:editcommandcolumns edittext="编辑" canceltext="取消" updatetext="更新"/>

</property>

</asp:datagrid>

edit事件中参数datagridcommandeventargs参数包含了用户选择的行,然后我们可以重新帮定,

以刷新显示。例:

public void mydatagrid_edit(object sender,datagridcommandeventargs e){

mydatagrid.edititemindex = (int)e.item.itemindex;

bindgrid();//调用另外的函数实现重新帮定

}

在cancel事件中,我们只需要把edititemindex设为-1就可以了。

在update事件中,我们需要更新数据。要知道当前行的主键值,这可以用刚才设的datakeyfield

来获得,我们可以获得行的主键值,如:

mycommand.parameters["@id"].value=mydatagrid.datakeys[(int)e.item.itemindex];

最后将edititemindex设为-1。

为了防止用户修改主键,可以单独定义一行中各列的表现,将其改为只读,如:

<asp:datagrid id="mydatagrid" runat="server"

……

datakeyfield="au_id"

autogeneratecolumns="false"

>

<property name="columns">

<asp:editcommandcolumn edittext="编辑" cancletext="取消" updatetext="更新"/>

<asp:boundcolumn headertext="au_id" sortfield="au_id" readonly="true" datafield="au_id"/>

<asp:boundcolumn headertext="电话" sortfield="phone" datafield="phone"/>

……

</property>

</asp:datagrid>

。删除记录

加一个buttoncolumn控件,command设为"delete",将引发deletecommand事件。

。排序

当用户点一列的header时,如果datagrid的allowsorting属性为true,则一个onsortcommand

事件产生,参数datagridsortcommandeventargs的sortfield传回来的是哪一个列被选中,如:

protected void mydatagrid_sort(object src,datagridsortcommandeventargs e){

dataview source=ds.tables["authors"].defautlview;

source.sort=e.sortfield;

mydatagrid.databind();

}

。表间关系

用一列做个连接,跳转到另一页去查看对应的详细资料,用控件hyperlinkcolumn,如:

<property name="columns">

<asp:hyperlinkcolunn

datanavigateurlfield="au_id"

datanavigateurlformatstring="a.aspx?id={0}"

text="详细情况"

/>

</property>

。访问基于xml的数据

dataset有一个方法叫readxml,用filestream作为参数,xml文件的格式为:

<documentelement>

<tablename>

<columnname1>comumn value</colunname1>

……

</tablename>

</documentelement>

每一个<tablename>段代表一行数据。

例:

dataset ds = new dataset();

filestream fs = new filestream(server.mappath("a.xml"),filemode.open,fileaccess.read);

streamreader reader = new streamreader(fs);

ds.readxml(reader);

dataview source = new dataview(ds.tables[0]);

myspan.innerhtml = source.table.tablename;

mydatagrid.datasource = source;

mydatagrid.databind();

还可以分别调用readxmlschema和readxmldata分开读取模式和数据。

赞(0)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » ASP+ 学习笔记 2
分享到: 更多 (0)