本文介绍一下asp.net中对xml的用法,这里只是展现了xml与dataset相结合的用法。其实asp.net对xml的操作的方法与对象是很多的,比如xmldatadocument,xmltextreader等,这些对象功能很全,也很实用。
本文以adrotator控件使用的xml为例(新手可以先看一下adrotator控件的用法),写出了一个广告管理程序。这个程序,飞刀用到的控件主要是datagrid,可以说已经用到了datagrid几乎全部功能,大家在关注xml的同时,可以同时学到datagrid使用方法。
先将本例中使用的一些方法对大家说明一下:
dataset主要是使用的readxml与writexml方法。它们的功能看名字就知道了,飞刀也不罗嗦了。 datagrid中使用的了很多的方法和对象。比如分页使用allowpaging属性,排序使用allowsorting属性,本例中使用了所有datagrid中的事件,比如onitemcommand,oneditcommand,oncancelcommand,onupdatecommand等。
大家认真查看这些事件的处理。
另外大家在看程序时,再想想,如果这个程序使用asp来写需要多少页,呵呵,用asp.net只需要一页,而且无限次使用,这就是asp.net的优点。
程序中飞刀我做了些简单的注释,最重要的还是大家的理解。
呵呵,最近我们工作室的人是忙得一踏糊涂,所以就请大家原谅啦。飞刀这些日子不是不写程序,只是写的程序都需要发表在书上,(比如和追捕软件一样功能的web网页啦,真的可以实现与追捕一样的功能,绝无虚假)不能贴在网上啦。这样会被骂的:)
先看看我们操作的xml文件的内容: <?xml version="1.0" standalone="yes"?>
<advertisements>
<xsd:schema id="advertisements" targetnamespace="" xmlns=""
xmlns:xsd="http://www.w3.org/1999/xmlschema"
xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:element name="ad">
<xsd:complextype content="elementonly">
<xsd:all>
<xsd:element name="imageurl" minoccurs="0" type="xsd:string"/>
<xsd:element name="navigateurl" minoccurs="0" type="xsd:string"/>
<xsd:element name="alternatetext" minoccurs="0" type="xsd:string"/>
<xsd:element name="keyword" minoccurs="0" type="xsd:string"/>
<xsd:element name="impressions" minoccurs="0" type="xsd:string"/>
</xsd:all>
</xsd:complextype>
</xsd:element>
<xsd:element name="advertisements" msdata:isdataset="true">
<xsd:complextype>
<xsd:choice maxoccurs="unbounded">
<xsd:element ref="ad"/>
</xsd:choice>
</xsd:complextype>
</xsd:element>
</xsd:schema>
<ad>
<imageurl>aspcn_bbs1.gifc</imageurl>
<navigateurl>http://www.aspcn.com/bbs</navigateurl>
<alternatetext>http://www.aspcn.com/bbs</navigateurl>
<alternatetext>http://www.aspcn.com/bbs</navigateurl>
<alternatetext>www.knowsky.com</alternatetext>
<keyword>bbs2</keyword>
<impressions>50</impressions>
</ad>
<ad>
<imageurl>http://www.aspcn.com</navigateurl>
<alternatetext>www.knowsky.com</alternatetext>
<keyword>涓浗浜?/keyword>
<impressions>80</impressions>
</ad>
<ad>
<imageurl>http://www.aspcn.com</navigateurl>
<alternatetext>www.knowsky.com</alternatetext>
<keyword>www.knowsky.com/keyword>
<impressions>80</impressions>
</ad>
<ad>
<imageurl>http://www.aspcn.com</navigateurl>
<alternatetext>www.knowsky.com</alternatetext>
<keyword>www.knowsky.com/keyword>
<impressions>80</impressions>
</ad>
<ad>
<imageurl>http://www.aspcn.com</navigateurl>
<alternatetext>www.knowsky.com</alternatetext>
<keyword>www.knowsky.com/keyword>
<impressions>80</impressions>
</ad>
<ad>
<imageurl>http://www.aspcn.com</navigateurl>
<alternatetext>www.knowsky.com</alternatetext>
<keyword>www.knowsky.com/keyword>
<impressions>80</impressions>
</ad>
<ad>
<imageurl>http://www.aspcn.com</navigateurl>
<alternatetext>www.knowsky.com</alternatetext>
<keyword>www.knowsky.com/keyword>
<impressions>80</impressions>
</ad>
<ad>
<imageurl>http://www.aspcn.com</navigateurl>
<alternatetext>www.knowsky.com</alternatetext>
<keyword>www.knowsky.com/keyword>
<impressions>80</impressions>
</ad>
<ad>
<imageurl>http://www.aspcn.com</navigateurl>
<alternatetext>www.knowsky.com</alternatetext>
<keyword>www.knowsky.com/keyword>
<impressions>80</impressions>
</ad>
<ad>
<imageurl>http://www.aspcn.com</navigateurl>
<alternatetext>www.knowsky.com</alternatetext>
<keyword>www.knowsky.com/keyword>
<impressions>80</impressions>
</ad>
<ad>
<imageurl>http://www.aspcn.com</navigateurl>
<alternatetext>www.knowsky.com</alternatetext>
<keyword>www.knowsky.com</keyword>
<impressions>98090</impressions>
</ad>
<ad>
<imageurl>www.knowsky.com</alternatetext>
<keyword>www.knowsky.com</keyword>
<impressions>98090</impressions>
</ad>
<ad>
<imageurl>http://wwwaspcn.com</imageurl>
<navigateurl>http://</navigateurl>
<alternatetext></alternatetext>
<keyword></keyword>
<impressions></impressions>
</ad>
</advertisements>
中文有点问题,但是在下面的程序中可以正常显示的,因为用了国际化技术,哈哈,这个例子用的东东可不少哟:)
这是adrotator控件引用的标准格式xml。
我们先来看看程序的最后的显示结果是什么
源代码如下:
<% @ page language="c#" responseencoding="gb2312" %>
<% @ import namespace="system.data" %>
<% @ import namespace="system.xml" %>
<% @ import namespace="system.io" %>
<script language="c#" runat="server">
dataset ds; //定义公用的dataset
dataview dv; //定义公用的dataview
string sortfield;
string spath;
public void page_load(object src,eventargs e)
{
if(state["adxml"]==null)
{
spath = server.mappath(".") + "\\adbanners\\ad_gb.xml";
ds = new dataset();
ds.readxml(spath);
state["adxml"] = ds;
}
else
{
ds = (dataset)state["adxml"];
}
dv = ds.tables[0].defaultview;
dv.sort = "imageurl";
if(!page.ispostback)
{
createtable();
}
}
//捆绑binder
public void createtable()
{
dgxml.datasource = dv;
dgxml.databind();
}
//翻页时
public void dgxml_changed(object sender,datagridpagechangedeventargs e)
{
createtable();
}
//删除
public void delitem(object sender,datagridcommandeventargs e)
{
if(((linkbutton)e.commandsource).commandname == "del")
{
//首先取得当前更新页的行数与currentpageindex
int cpi = (int)dgxml.currentpageindex;
int eii = (int)e.item.itemindex;
int row = cpi*5+eii;
lb.text = row.tostring();
//删除
dv.delete(row);
dgxml.edititemindex = -1;
ds.writexml(spath);
createtable();
}
}
//取消
public void dgxml_cancel(object sender,datagridcommandeventargs e)
{
dgxml.edititemindex = -1;
createtable();
}
//编辑
public void dgxml_edit(object sender,datagridcommandeventargs e)
{
dgxml.edititemindex = (int)e.item.itemindex;
createtable();
}
//更新
public void dgxml_update(object sender, datagridcommandeventargs e)
{
try
{
//首先取得当前更新页的行数与currentpageindex
int cpi = (int)dgxml.currentpageindex;
int eii = (int)e.item.itemindex;
int row = cpi*5+eii;
//lb.text = row.tostring();
//取得各项值
string imageurl = ((textbox)e.item.cells[2].controls[0]).text;
string navigateurl = ((textbox)e.item.cells[3].controls[0]).text;
string alternatetext = ((textbox)e.item.cells[4].controls[0]).text;
string keyword = ((textbox)e.item.cells[5].controls[0]).text;
string impressions = ((textbox)e.item.cells[6].controls[0]).text;
dv.delete(row);
datarow dr = ds.tables[0].newrow();
dr[0] = imageurl;
dr[1] = navigateurl;
dr[2] = alternatetext;
dr[3] = keyword;
dr[4] = impressions;
ds.tables[0].rows.add(dr);
ds.writexml(spath);
}
catch(exception ee)
{
lb.text = ee.tostring();
}
dgxml.edititemindex = -1;
createtable();
}
public void panelshow(object sender,eventargs e)
{
additem.visible = true;
}
public void additem_click(object sender,eventargs e)
{
datarow dr = ds.tables[0].newrow();
dr[0] = murl.text;
dr[1] = aurl.text;
dr[2] = mtext.text;
dr[3] = akey.text;
dr[4] = atime.text;
ds.tables[0].rows.add(dr);
ds.writexml(spath);
createtable();
additem.visible=false;
}
</script>
<html>
<head>
<title></title>
</head>
<body>
<form id="form1" runat="server">
<asp:datagrid id="dgxml" runat="server"
allowpaging="true"
pagesize="10"
bordercolor="black"
borderwidth="1"
cellpadding="3"
font-name="verdana"
font-size="8pt"
headerstyle-backcolor="#aaaadd"
pagerstyle-mode="numericpages"
pagerstyle-horizontalalign="right"
pagerstyle-prevpagetext="前页"
pagerstyle-nextpagetext="后页"
onpageindexchanged="dgxml_changed"
oneditcommand="dgxml_edit"
oncancelcommand="dgxml_cancel"
onupdatecommand="dgxml_update"
onitemcommand="delitem"
autogeneratecolumns="false"
>
<property name="columns">
<asp:buttoncolumn headertext="删除" text="删除" commandname="del" />
。糰sp:editcommandcolumn edittext="修改" canceltext="取消" updatetext="更新" itemstyle-wrap="false" headertext="操作区" headerstyle-wrap="false" />
<asp:boundcolumn headertext="图片地址(相对)" sortfield="imageurl" datafield="imageurl" />
<asp:boundcolumn headertext="链接url" sortfield="navigateurl" datafield="navigateurl" />
<asp:boundcolumn headertext="图片说明" sortfield="alternatetext" datafield="alternatetext" />
<asp:boundcolumn headertext="类别" sortfield="keyword" datafield="keyword" />
<asp:boundcolumn headertext="显示时间" sortfield="impressions" datafield="impressions" />
</property>
</asp:datagrid>
<hr>
<asp:button id="vi" text="添加新项" onclick="panelshow" runat="server"/>
<br>
<asp:panel id="additem" runat="server" visible="false">
<table>
<tr bgcolor="#aaaadd"><td colspan=2>添加新的广告页面</td></tr>
<tr>
<td>广告图片url:</td>
<td><asp:textbox id="murl" runat="server" text="http://" /></td>
</tr>
<tr>
<td>广告链接地址:</td>
<td><asp:textbox id="aurl" runat="server" text="http://" /></td>
</tr>
<tr>
<td>图片说明:</td>
<td><asp:textbox id="mtext" runat="server" /></td>
</tr>
<tr>
<td>广告所属类别:</td>
<td><asp:textbox id="akey" runat="server" /></td>
</tr>
<tr>
<td>显示时间</td>
<td><asp:textbox id="atime" runat="server" /></td>
</tr>
<tr><td>
<asp:button id="submit" text="提交" onclick="additem_click" runat="server" /></td></tr>
</table>
</asp:panel>
<asp:label id="lb" runat="server" />
</form>
</body>
</html>