动网论坛,站长建站首选,国内使用量最多的论坛软件 动网论坛官方技术讨论区 站长工具 申请属于您自己的免费论坛
首页 | 新闻资讯 | 网站运营 | 网络编程 | 数据库 | 服务器 | 网页设计 | 图像媒体 | 网络应用 | 搜索优化 | 资源下载 | 动网主机 | DVBOX
    本站内  互联网 ASP论坛  ASP.Net论坛  PHP论坛
  
   .Net → 阅读文章

 XML、DataSet、DataGrid结合写成广告管理程序

作者来源: 
阅读 1315 人次 , 2006-3-29 4:33:00 

  本文介绍一下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>

 本文TagsTag  tag  
 收藏本文  打印本文  论坛讨论  关闭窗口
· 上一篇:用C#编写发手机中文短信息Windows服务
· 下一篇:ASP.NET的实时天气及24小时天气预报(C#)
· 写 bean 类的准则
· 细细品味ASP.NET (二)
· asp.net高级教程(二)-转换编程思维
· 提取HTML代码中文字的C#函数
· C#中的域(field)和属性(property)


关于本站 | 联系我们 | 业务合作 | 客户案例 | 诚聘英才 | 广告合作 | 收藏本站
海口动网先锋网络科技有限公司版权所有
Copyright © 2000 - 2006 Cndw.Com
中华人民共和国电信与信息服务业务经营许可证编号 琼 ICP 020077