<?xml version="1.0" encoding="utf-8" ?>
<rss version="2.0">
  <channel>
    <title><![CDATA[WenqiBlog - Web Form]]></title>
    <link>http://www.zhouwenqi.com/blog/Web Form.aspx</link>
    <description><![CDATA[WenqiBlog - Web Form]]></description>
    <language>en-us</language>
    <copyright><![CDATA[Copyright © 2005-2009 zhouwenqi.com]]></copyright>
    <pubDate>Wed,7 Jan 2009 12:00:00 G1T +08:00</pubDate>
    
    <item>
      <title><![CDATA[RowComm事件执行两次的解决方法]]></title>
      <author>zhouwenqi</author>
      <link>http://www.zhouwenqi.com/blog/68/board.aspx</link>
      
      <category><![CDATA[Web Form]]></category>
      <pubDate>Sun,26 Oct 2008 02:46:52 G10T +08:00</pubDate>
      <description><![CDATA[<P>　　今天在做一个后台的时候，我想偷下懒直接用RowCommand事件给GridView添加空行加上数据并编辑，结果发现，在每次执行RowCommand的时候要执行两次，我以为我自己搞错了，结果在网上一搜，发现有很多人有这个问题，据说是IE7还是IIS7(具体他们也没讲清楚）的问题，如果用Image作用按扭执行RowCommand就会执行两次，在IE5,IE6,FireFox下都是正常的，而且说微软也证实这个BUG！</P>
<P>　　我半信半疑的看了他们的解决方法，一种是在RowCommand事件中加上代码</P>
<P class=div1>if (Request["x"] == null &amp;&amp; Request["y"] == null)<BR>Response.End();</P>
<HR>

<P>　　另一种是微软的官方解决方案（我没有去证实）：“尽量不在gridview里面用imagebutton，而用link或者button”（居然有这种回答），如果一定要在GridView中使用ImageButton的话，把imagebuttong加入到TemplateField中，并且在事件中调用deleterow。</P>
<P class=div1>&lt;asp:GridView ID="GridView1" runat="server"&gt; <BR>&nbsp; &lt;Columns&gt; <BR>&nbsp;&nbsp;&nbsp; &lt;asp:TemplateField&gt; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;ItemTemplate&gt; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;asp:ImageButton runat=server id="ImageButton1" CommandName="Delete"<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ImageUrl="" commandargument='&lt;%# DataBinder.Eval(Container,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "RowIndex") %&gt;' OnCommand="ImageButton1_Command" /&gt; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/ItemTemplate&gt; <BR>&nbsp;&nbsp;&nbsp; &lt;/asp:TemplateField&gt; <BR>&nbsp; &lt;/Columns&gt; <BR>&lt;/asp:GridView&gt; </P>
<P class=div1>protected void ImageButton1_Command(object sender, CommandEventArgs e)<BR>{<BR>&nbsp;&nbsp;&nbsp; GridView1.DeleteRow(Int32.Parse(e.CommandArgument.ToString())); <BR>}</P>
<P>后面我自己试了一下，我将ImageButton换成一个Button，然后给他写了一个CSS，将图片作为他的背景就行了，至于Button的文字，不填就行了，这样的话和ImageButton没有区别了，反正这个办法我自己用的很起了，大家自己可以试一下....</P>
<P class=div2>.pictemplate input<BR>{<BR>&nbsp;background:url("../image/jpg/admin/textico/add.png") no-repeat center center;<BR>&nbsp;border:0px;<BR>&nbsp;width:20px;<BR>&nbsp;height:20px;<BR>&nbsp;cursor:pointer;<BR>} </P>]]></description>      
    </item>
    
    <item>
      <title><![CDATA[ASP.net条形图表显示控件]]></title>
      <author>zhouwenqi</author>
      <link>http://www.zhouwenqi.com/blog/56/board.aspx</link>
      
      <category><![CDATA[Web Form]]></category>
      <pubDate>Thu,26 Jun 2008 01:51:53 G6T +08:00</pubDate>
      <description><![CDATA[<P>　　本来想搞复杂一点的，我这个人有点懒，现在把他弄的功能很简单，而且只有一种显示状态，饼形和其它形状，以后在弄了，我现在想休息先睡觉以后再说了！我做成了三个文件，使用方法也很简单</P>
<DIV class=div1><B>使用方法</B><BR>1.将WQVote.dll添加到工具箱<BR>2.将App_Web_voteimageview.aspx.cdcab7d2.dll引用到你的项目中<BR>3.将VoteImageView.aspx添加到你的项目根目录下<BR>4.把控件从工具箱中拖出来即可 </DIV>
<HR>
<br />
<DIV class=div2><B>下面还有呢</B><BR>拖出来的控件名称应该为WQVote1,此时控件还没有数据，所以肯定显示不了，要向控件添加数据才行：<BR>protected void Page_Load(object sender, EventArgs e)<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WQVote1.Add("Windows XP", 520);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WQVote1.Add("Windows 2003", 370);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WQVote1.Add("Windows vista", 440);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WQVote1.Add("Unix", 120);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WQVote1.Add("OS", 370);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WQVote1.Add("Other", 90);<BR>}<BR>这样就可以显示出图表来了.... </DIV>
<br /><p>
<img src="http://www.zhouwenqi.com/upfile/2008626/200862613535754.png" alt="图表示图" />
</p><br />
<DIV class=div3><B>附件下载</B><BR><A class=loadFile href="http://www.zhouwenqi.com/upfile/2008626/200862613421196.rar" target=_blank>200862613421196.rar</A> <B></B></DIV>]]></description>      
    </item>
    
    <item>
      <title><![CDATA[C#动态生成静态页面]]></title>
      <author>zhouwenqi</author>
      <link>http://www.zhouwenqi.com/blog/55/board.aspx</link>
      
      <category><![CDATA[Web Form]]></category>
      <pubDate>Thu,19 Jun 2008 01:08:03 G6T +08:00</pubDate>
      <description><![CDATA[<P>　　.NET的WebRequest类提供了许多WEB请求功能，方便了Windows Form和Web Form对WEB的交互操作，加上Stream的操，可以很方便的通过URL将动态页面生成静态页面，并保存在本地或服务器上，因为是通过URL请求，所以不存在语言和编码的限制，同时，可以适用于Windows Form和Web Form，下面我写了一个简单的类，来完成一些基本操作。</P>
<DIV class=div2><B>StaticPage.cs</B><BR>using System;<BR>using System.Data;<BR>using System.Configuration;<BR>using System.Linq;<BR>using System.Web;<BR>using System.Web.Security;<BR>using System.Web.UI;<BR>using System.Web.UI.HtmlControls;<BR>using System.Web.UI.WebControls;<BR>using System.Web.UI.WebControls.WebParts;<BR>using System.Xml.Linq;<BR>using System.Net;<BR>using System.IO;<br />/// &lt;summary&gt;<BR>///URL动态保存静态页面<BR>/// &lt;/summary&gt;<BR>public class StaticPage<BR>{<BR>&nbsp;&nbsp;&nbsp; private string _url="";<BR>&nbsp;&nbsp;&nbsp; private WebRequest request;<BR>&nbsp;&nbsp;&nbsp; private WebResponse response;<BR>&nbsp;public StaticPage()<BR>&nbsp;{<BR>&nbsp;&nbsp;<BR>&nbsp;}<BR>&nbsp;&nbsp;&nbsp; public StaticPage(string url)<BR>&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; _url = url;<BR>&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp; public string Url<BR>&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; get<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return _url;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; set<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; _url = value;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp; public bool Save(string FilePath)<BR>&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bool _isOk = false;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(_url!="")<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; request = WebRequest.Create(_url);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; response=request.GetResponse();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(File.Exists(FilePath))<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; File.Delete(FilePath);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; StreamReader reader = new StreamReader(response.GetResponseStream(),System.Text.Encoding.Default);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; StreamWriter write = new StreamWriter(FilePath,false, System.Text.Encoding.Default);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; write.Write(reader.ReadToEnd());<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; write.Flush();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; write.Close();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; write = null;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; _isOk = true;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return _isOk;<BR>&nbsp;&nbsp;&nbsp; }<BR>}&nbsp;</DIV><BR>
<HR>

<DIV class=div1><B>cai.aspx</B><BR>&lt;%@ Page Language="C#" %&gt;<BR>&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "<A href="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd</A>"&gt;<BR>&lt;script runat="server"&gt;<BR>&nbsp;&nbsp;&nbsp; private void Page_Load(object sender, EventArgs e)<BR>&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp; private void saveBtn_click(object sender, EventArgs e)<BR>&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (path.Text.ToString() != "")<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; StaticPage page = new StaticPage();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; page.Url = path.Text.ToString();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string filePath = Server.MapPath("temp.html");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (page.Save(filePath))<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Response.Redirect("temp.html");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&lt;/script&gt;<br />&lt;html xmlns="<A href="http://www.w3.org/1999/xhtml">http://www.w3.org/1999/xhtml</A>"&gt;<BR>&lt;head runat="server"&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;title&gt;动态生成静态页面文件&lt;/title&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;style type="text/css"&gt;<BR>&nbsp;&nbsp;&nbsp; input<BR>&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; padding:4px;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; font-size:12px;<BR>&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp; &lt;/style&gt;<BR>&lt;/head&gt;<BR>&lt;body&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;form id="form1" runat="server"&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;div&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;asp:TextBox ID="path" runat="server" Width="300px"&gt;&lt;/asp:TextBox&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;asp:Button ID="saveBtn" runat="server" Text="生成静态文件" OnClick="saveBtn_click" /&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;/div&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;/form&gt;<BR>&lt;/body&gt;<BR>&lt;/html&gt;<BR>&nbsp;</DIV><BR>
<DIV class=div3><B>演示下载</B><BR><A href="http://www.zhouwenqi.com/upfile/20080603/200861913000451.aspx">演示文件</A><BR><A class=loadFile href="http://www.zhouwenqi.com/upfile/20080603/200861913002574.dll" target=_blank>下载200861913002574.dll文件</A> </DIV>]]></description>      
    </item>
    
    <item>
      <title><![CDATA[Asp.net2.0 RSS订阅类]]></title>
      <author>zhouwenqi</author>
      <link>http://www.zhouwenqi.com/blog/51/board.aspx</link>
      
      <category><![CDATA[Web Form]]></category>
      <pubDate>Tue,6 May 2008 04:59:39 G5T +08:00</pubDate>
      <description><![CDATA[<P>　　今天下午抽时间做了一个RSS订阅类，基本上可以完成RSS的订阅工作，后来忧化了一下，扩展成两个类，一个RSS类一个RSSitem类，两个类配合使用，效果更好！后来还把注释加上去了，我怕别人看不懂！</P>
<DIV class=div1>Rss myRss = new Rss("<A href="http://blog.douban.com/feed/">http://blog.douban.com/feed/</A>");<BR>if (myRss.feed())//如果订阅成功<BR>{<BR>&nbsp;&nbsp;&nbsp; DataSet myDataSet = new DataSet();<BR>&nbsp;&nbsp;&nbsp; DataTable myTable = myRss.getDataTable();<BR>&nbsp;&nbsp;&nbsp; myDataSet.Tables.Add(myTable);<BR>&nbsp;&nbsp;&nbsp; GridView1.DataSource = myDataSet;<BR>&nbsp;&nbsp;&nbsp; GridView1.DataBind();<BR>}</DIV>
<HR>
<BR>
<P>//上面这个例子是将RSS抓取返回DataTable并绑定到GridView中，当然这样同是抓取了很多不必要的节点，我多加了几个方法，其中一个方法返回一个XmlNodeList这样，可升缩性就大了，同时还可以配合我另外下的一个小类使用，效果更明显。</P>
<DIV class=div2>Rss myRss = new Rss();<BR>myRss.Url = "<A href="http://blog.douban.com/feed/">http://http://blog.douban.com/feed/</A>";<BR>if(myRss.feed())<BR>{<BR>　System.Xml.XmlNodeList myList = myRss.XmlNodeList;<BR>　foreach(System.Xml.XmlNode _list in myList)<BR>　&nbsp;{<BR>　　RssItem myItem = new RssItem(_list);<BR>　　&nbsp;Response.Write(myItem.KeyName("title") "<BR>");<BR>　}<BR>}</DIV><BR>
<DIV class=div2><SPAN>关于这两个类的说明：</SPAN><BR>Rss类抓取rss数据，并返回数据集<BR>==属性==<BR>Rss.Title //RSS频道名称<BR>Rss.Link //RSS频道网址<BR>Rss.Description //RSS频道描述<BR>Rss.Url //RSS订阅地址<BR><BR>Rss.XmlNodeList //item集合<BR>==方法==<BR>Rss.getDataTable() //返回DataTabel <BR></DIV><BR>
<DIV class=div2><BR>RssItem类，Rss中item标签的操作类<BR><BR>==属性==<BR>RssItem.Title //item标题<BR>RssItem.Link //itam链接<BR>RssItem.Description //item描述<BR><BR>==方法==<BR>RssItem.&nbsp;KeyName() //直接用节点名来返回该节点的值例如：RssItem.KeyName("comment");<BR></DIV>
<P><A href="http://www.zhouwenqi.com/upfile/200855/rssfeed.aspx" target=_blank>演示效果(这个是我用AJAX订阅)</A><BR><A class=loadFile href="http://www.zhouwenqi.com/upfile/200855/rss.dll" target=_blank>下载Dll文件</A></P>]]></description>      
    </item>
    
    <item>
      <title><![CDATA[Asp.Net输出RSS]]></title>
      <author>zhouwenqi</author>
      <link>http://www.zhouwenqi.com/blog/46/board.aspx</link>
      
      <category><![CDATA[Web Form]]></category>
      <pubDate>Sun,4 May 2008 01:16:03 G5T +08:00</pubDate>
      <description><![CDATA[<P>　　现在Mozilla Firefox和IE7都自带RSS订阅功能，以后使用RSS订阅的用户将巨增，而且有很多玩顾派他们甚至不使用任何浏览器，只接使用RSS订阅器取得信息，所以网站提供RSS订阅功能，将是必不可少的！RSS输出其实很简单，只要遵循RSS2.0标准就行了，输出格式最好用UTF-8，输出格式与文件格式一致。</P>
<DIV class=div3>Response.Charset = "utf-8";<BR>Response.ContentType = "text/xml";<BR></DIV><HR><BR>
<DIV class=div3>&lt;%@ Page Language="C#" ContentType="text/xml;charset=utf-8" %&gt;</DIV>
<P>加入css</P>
<DIV class=div2>&lt;?xml version="1.0" encoding="utf-8" ?&gt;<BR>&lt;?xml-stylesheet type="text/css" href="/css/rss.css" ?&gt;<BR>&lt;rss verstion="2.0"&gt;</DIV>]]></description>      
    </item>
    
    <item>
      <title><![CDATA[Asp.Net中Cookie乱码]]></title>
      <author>zhouwenqi</author>
      <link>http://www.zhouwenqi.com/blog/44/board.aspx</link>
      
      <category><![CDATA[Web Form]]></category>
      <pubDate>Sat,3 May 2008 01:40:09 G5T +08:00</pubDate>
      <description><![CDATA[<P>　　不管是哪里发生乱码问题，基本上都是由于编码引起的，大部分都是，输出编码与文件编码不一致造成的！现在所讲的是Cookie中出现的乱码的解决方法！造成这个问题的很多原因都是由于，为了让AJAX（或客户端）与服务端交互时让编码一致，手动修改了Web.config配置文件，当然，有时候这样也是必须的。</P>
<P>　　现在我们可以这样做，不管Cookie中有没有中文乱码，都用UrlEncode进行加密！用UrlDecode解密，这样我认为，更加严谨！</P>
<DIV class=div1>HttpCookie myCookie = new HttpCookie("user");<BR>myCookie.Value = Server.UrlEncode("zhouwenqi").ToString();<BR>Response.Cookies.Add(myCookie);</DIV>
<HR>
<br />
<DIV class=div1>if (Request.Cookies["user"] != null)<BR>{<BR>    string _cookie = Server.UrlDecode(Request.Cookies["user"].Value.ToString()).ToString();<BR>}</DIV>]]></description>      
    </item>
    
  </channel>
</rss>