欢迎光临
我们一直在努力

ASP+ 学习笔记 2-.NET教程,Asp.Net开发

建站超值云服务器,限时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-.NET教程,Asp.Net开发
分享到: 更多 (0)