﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>博客园-天空没有留下翅膀的痕迹，而我已然飞过……</title><link>http://www.cnblogs.com/thingsfly/</link><description>朝着我的IT梦想慢慢爬……</description><language>zh-cn</language><lastBuildDate>Sun, 07 Sep 2008 19:38:40 GMT</lastBuildDate><pubDate>Sun, 07 Sep 2008 19:38:40 GMT</pubDate><ttl>60</ttl><item><title>企业信息化，我该如何做？</title><link>http://www.cnblogs.com/thingsfly/archive/2006/07/10/446908.html</link><dc:creator>翔之天国</dc:creator><author>翔之天国</author><pubDate>Mon, 10 Jul 2006 00:54:00 GMT</pubDate><guid>http://www.cnblogs.com/thingsfly/archive/2006/07/10/446908.html</guid><wfw:comment>http://www.cnblogs.com/thingsfly/comments/446908.html</wfw:comment><comments>http://www.cnblogs.com/thingsfly/archive/2006/07/10/446908.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cnblogs.com/thingsfly/comments/commentRss/446908.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/thingsfly/services/trackbacks/446908.html</trackback:ping><description><![CDATA[<p>进入公司工作以来，一直想涉足企业信息化领域，希望有所发展。<br>然而面对实际的工作环境深感罔然&#8230;&#8230;<br>企业信息化，我该做些什么？如何做？如何进行整体规划？如何进行系统选型？如何选择突破口？</p>
<img src ="http://www.cnblogs.com/thingsfly/aggbug/446908.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42134/" target="_blank">[新闻]JavaScript将成Silverlight的最大对手?</a>]]></description></item><item><title>意大利夺得德国世界杯</title><link>http://www.cnblogs.com/thingsfly/archive/2006/07/10/446905.html</link><dc:creator>翔之天国</dc:creator><author>翔之天国</author><pubDate>Mon, 10 Jul 2006 00:46:00 GMT</pubDate><guid>http://www.cnblogs.com/thingsfly/archive/2006/07/10/446905.html</guid><wfw:comment>http://www.cnblogs.com/thingsfly/comments/446905.html</wfw:comment><comments>http://www.cnblogs.com/thingsfly/archive/2006/07/10/446905.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/thingsfly/comments/commentRss/446905.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/thingsfly/services/trackbacks/446905.html</trackback:ping><description><![CDATA[终于结束了。<br>夜猫子的生活也结束了。<br>一切又将恢复正常。<br>为阿根廷感到可惜！<br>为德国感到可惜！<br>为齐达内感到可惜！<br>从此世界杯再无大师&#8230;&#8230;
<img src ="http://www.cnblogs.com/thingsfly/aggbug/446905.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42134/" target="_blank">[新闻]JavaScript将成Silverlight的最大对手?</a>]]></description></item><item><title>c#.net常用函数和方法集</title><link>http://www.cnblogs.com/thingsfly/archive/2006/07/07/445371.html</link><dc:creator>翔之天国</dc:creator><author>翔之天国</author><pubDate>Fri, 07 Jul 2006 08:36:00 GMT</pubDate><guid>http://www.cnblogs.com/thingsfly/archive/2006/07/07/445371.html</guid><wfw:comment>http://www.cnblogs.com/thingsfly/comments/445371.html</wfw:comment><comments>http://www.cnblogs.com/thingsfly/archive/2006/07/07/445371.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/thingsfly/comments/commentRss/445371.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/thingsfly/services/trackbacks/445371.html</trackback:ping><description><![CDATA[<div align=center><font color=#778899 size=3><b>c#.net常用函数和方法集 </b></font></div>
<br>&nbsp;1、DateTime 数字型 <br>System.DateTime currentTime=new System.DateTime(); <br>1.1 取当前年月日时分秒 <br>currentTime=System.DateTime.Now; <br>1.2 取当前年 <br>int 年=currentTime.Year; <br>1.3 取当前月 <br>int 月=currentTime.Month; <br>1.4 取当前日 <br>int 日=currentTime.Day; <br>1.5 取当前时 <br>int 时=currentTime.Hour; <br>1.6 取当前分 <br>int 分=currentTime.Minute; <br>1.7 取当前秒 <br>int 秒=currentTime.Second; <br>1.8 取当前毫秒 <br>int 毫秒=currentTime.Millisecond; <br>（变量可用中文） <br>2、Int32.Parse(变量) Int32.Parse("常量") <br>字符型转换 转为32位数字型 <br><br>3、 变量.ToString() <br>字符型转换 转为字符串 <br>12345.ToString("n"); //生成 12,345.00 <br>12345.ToString("C"); //生成 ￥12,345.00 <br>12345.ToString("e"); //生成 1.234500e+004 <br>12345.ToString("f4"); //生成 12345.0000 <br>12345.ToString("x"); //生成 3039 (16进制) <br>12345.ToString("p"); //生成 1,234,500.00% <br><br><br>4、变量.Length 数字型 <br>取字串长度： <br>如： string str="中国"; <br>int Len = str.Length ; //Len是自定义变量， str是求测的字串的变量名 <br><br>5、System.Text.Encoding.Default.GetBytes(变量) <br>字码转换 转为比特码 <br>如：byte[] bytStr = System.Text.Encoding.Default.GetBytes(str); <br>然后可得到比特长度： <br>len = bytStr.Length; <br><br>6、System.Text.StringBuilder("") <br>字符串相加，（+号是不是也一样？） <br>如：System.Text.StringBuilder sb = new System.Text.StringBuilder(""); <br>sb.Append("中华"); <br>sb.Append("人民"); <br>sb.Append("共和国"); <br><br>7、变量.Substring(参数1,参数2); <br>截取字串的一部分，参数1为左起始位数，参数2为截取几位。 <br>如：string s1 = str.Substring(0,2); <br><br>8、String user_IP=Request.ServerVariables["REMOTE_ADDR"].ToString(); <br>取远程用户IP地址 <br><br>9、穿过代理服务器取远程用户真实IP地址： <br>if(Request.ServerVariables["HTTP_VIA"]!=null){ <br>string user_IP=Request.ServerVariables["HTTP_X_FORWARDED_FOR"].ToString(); <br>}else{ <br>string user_IP=Request.ServerVariables["REMOTE_ADDR"].ToString(); <br>} <br><br>10、 Session["变量"]; <br>存取Session值； <br>如，赋值： Session["username"]="小布什"; <br><br>取值： Object objName=Session["username"]; <br>String strName=objName.ToString(); <br>清空： Session.RemoveAll(); <br><br>11、String str=Request.QueryString["变量"]; <br>用超链接传送变量。 <br>如在任一页中建超链接:&lt;a href=Edit.aspx?fbid=23&gt;点击&lt;/a&gt; <br>在Edit.aspx页中取值：String str=Request.QueryString["fdid"]; <br><br>12、DOC对象.CreateElement("新建节点名"); <br>创建XML文档新节点 <br><br>13、父节点.AppendChild(子节点)； <br>将新建的子节点加到XML文档父节点下 <br><br>14、 父节点.RemoveChild(节点); <br>删除节点 <br><br>15、Response <br>Response.Write("字串")； <br>Response.Write(变量)； <br>向页面输出。 <br><br>Response.Redirect("URL地址"）； <br>跳转到URL指定的页面 <br><br>16、char.IsWhiteSpce(字串变量，位数)——逻辑型 <br>查指定位置是否空字符； <br>如： <br>string str="中国 人民"; <br>Response.Write(char.IsWhiteSpace(str,2)); //结果为：True, 第一个字符是0位，2是第三个字符。 <br><br>17、char.IsPunctuation('字符') --逻辑型 <br>查字符是否是标点符号 <br>如：Response.Write(char.IsPunctuation('A')); //返回：False <br><br>18、(int)'字符' <br>把字符转为数字，查代码点，注意是单引号。 <br>如： <br>Response.Write((int)'中'); //结果为中字的代码：20013 <br><br>19、(char)代码 <br>把数字转为字符，查代码代表的字符。 <br>如： <br>Response.Write((char)22269); //返回&#8220;国&#8221;字。 <br><br>20、 Trim() <br>清除字串前后空格 <br><br>21 、字串变量.Replace("子字串","替换为") <br>字串替换 <br>如： <br>string str="中国"; <br>str=str.Replace("国","央"); //将国字换为央字 <br>Response.Write(str); //输出结果为&#8220;中央&#8221; <br><br>再如：（这个非常实用） <br><br>string str="这是&lt;script&gt;脚本"; <br>str=str.Replace("&lt;","&lt;font&gt;&lt;&lt;/font&gt;"); //将左尖括号替换为&lt;font&gt; 与 &lt; 与 &lt;/font&gt; （或换为&lt;，但估计经XML存诸后，再提出仍会还原） <br>Response.Write(str); //显示为：&#8220;这是&lt;script&gt;脚本&#8221; <br><br>如果不替换，&lt;script&gt;将不显示，如果是一段脚本，将运行；而替换后，脚本将不运行。 <br>这段代码的价值在于：你可以让一个文本中的所有HTML标签失效，全部显示出来，保护你的具有交互性的站点。 <br>具体实现：将你的表单提交按钮脚本加上下面代码： <br>string strSubmit=label1.Text; //label1是你让用户提交数据的控件ID。 <br>strSubmit=strSubmit.Replace("&lt;","&lt;font&gt;&lt;&lt;/font&gt;"); <br>然后保存或输出strSubmit。 <br>用此方法还可以简单实现UBB代码。 <br><br>22、Math.Max(i,j) <br>取i与j中的最大值 <br>如 int x=Math.Max(5,10); // x将取值 10 <br><br>加一点吧 23、字串对比...... <br>加一点吧 <br><br>23、字串对比一般都用: if(str1==str2){ } , 但还有别的方法: <br><br>(1)、 <br>string str1; str2 <br>//语法: str1.EndsWith(str2); __检测字串str1是否以字串str2结尾,返回布尔值.如: <br>if(str1.EndsWith(str2)){ Response.Write("字串str1是以"+str2+"结束的"); } <br><br>(2)、 <br>//语法:str1.Equals(str2); __检测字串str1是否与字串str2相等,返回布尔值,用法同上. <br><br>(3)、 <br>//语法 Equals(str1,str2); __检测字串str1是否与字串str2相等,返回布尔值,用法同上. <br><br>24、IndexOf() 、LastIndexOf() <br>查找字串中指定字符或字串首次（最后一次）出现的位置,返回索引值，如： <br>str1.IndexOf("字")； //查找&#8220;字&#8221;在str1中的索引值（位置） <br>str1.IndexOf("字串")；//查找&#8220;字串&#8221;的第一个字符在str1中的索引值（位置） <br>str1.IndexOf("字串",3,2)；//从str1第4个字符起，查找2个字符，查找&#8220;字串&#8221;的第一个字符在str1中的索引值（位置） <br><br>25、Insert() <br>在字串中指定索引位插入指定字符。如： <br>str1.Insert(1,"字");在str1的第二个字符处插入&#8220;字&#8221;，如果str1="中国"，插入后为&#8220;中字国&#8221;； <br><br>26、PadLeft()、PadRight() <br>在字串左（或右）加空格或指定char字符，使字串达到指定长度，如： <br>&lt;% <br>string str1="中国人"; <br>str1=str1.PadLeft(10,'1'); //无第二参数为加空格 <br>Response.Write(str1); //结果为&#8220;1111111中国人&#8221; ， 字串长为10 <br>%&gt; <br><br>27、Remove() <br>从指定位置开始删除指定数的字符 <br>字串对比一般都用: if(str1==str2){ } , 但还有别的方法: <br><br>1、 <br>string str1; str2 <br>//语法: str1.EndsWith(str2); __检测字串str1是否以字串str2结尾,返回布尔值.如: <br>if(str1.EndsWith(str2)){ Response.Write("字串str1是以"+str2+"结束的"); } <br><br>2、 <br>//语法:str1.Equals(str2); __检测字串str1是否与字串str2相等,返回布尔值,用法同上. <br><br>3、 <br>//语法 Equals(str1,str2); __检测字串str1是否与字串str2相等,返回布尔值,用法同上. <br><br>IndexOf() <br>查找字串中指定字符或字串首次出现的位置,返首索引值，如： <br>str1.IndexOf("字")； //查找&#8220;字&#8221;在str1中的索引值（位置） <br>str1.IndexOf("字串")；//查找&#8220;字串&#8221;的第一个字符在str1中的索引值（位置） <br>str1.IndexOf("字串",3,2)；//从str1第4个字符起，查找2个字符，查找&#8220;字串&#8221;的第一个字符在str1中的索引值（位置） <br><br>1.9 取中文日期显示——年月日时分 <br>string strY=currentTime.ToString("f"); //不显示秒 <br><br>1.10 取中文日期显示_年月 <br>string strYM=currentTime.ToString("y"); <br><br>1.11 取中文日期显示_月日 <br>string strMD=currentTime.ToString("m"); <br><br>1.12 取当前年月日，格式为：2003-9-23 <br>string strYMD=currentTime.ToString("d"); <br><br>1.13 取当前时分，格式为：14：24 <br>string strT=currentTime.ToString("t"); <br>更新一下， 上面不能编辑： <br><br>c#.net函数和方法集(大家一起来加啊) <br><br><br>1、DateTime 数字型 <br>System.DateTime currentTime=new System.DateTime(); <br>1.1 取当前年月日时分秒 <br>currentTime=System.DateTime.Now; <br>1.2 取当前年 <br>int 年=currentTime.Year; <br>1.3 取当前月 <br>int 月=currentTime.Month; <br>1.4 取当前日 <br>int 日=currentTime.Day; <br>1.5 取当前时 <br>int 时=currentTime.Hour; <br>1.6 取当前分 <br>int 分=currentTime.Minute; <br>1.7 取当前秒 <br>int 秒=currentTime.Second; <br>1.8 取当前毫秒 <br>int 毫秒=currentTime.Millisecond; <br>（变量可用中文） <br><br>1.9 取中文日期显示——年月日时分 <br>string strY=currentTime.ToString("f"); //不显示秒 <br><br>1.10 取中文日期显示_年月 <br>string strYM=currentTime.ToString("y"); <br><br>1.11 取中文日期显示_月日 <br>string strMD=currentTime.ToString("m"); <br><br>1.12 取中文年月日 <br>string strYMD=currentTime.ToString("D"); <br><br>1.13 取当前时分，格式为：14：24 <br>string strT=currentTime.ToString("t"); <br><br>1.14 取当前时间，格式为：2003-09-23T14:46:48 <br>string strT=currentTime.ToString("s"); <br><br>1.15 取当前时间，格式为：2003-09-23 14:48:30Z <br>string strT=currentTime.ToString("u"); <br><br>1.16 取当前时间，格式为：2003-09-23 14:48 <br>string strT=currentTime.ToString("g"); <br><br>1.17 取当前时间，格式为：Tue, 23 Sep 2003 14:52:40 GMT <br>string strT=currentTime.ToString("r"); <br><br>1.18获得当前时间 n 天后的日期时间 <br>DateTime newDay = DateTime.Now.AddDays(100); <br><br>2、Int32.Parse(变量) Int32.Parse("常量") <br>字符型转换 转为32位数字型 <br><br>3、 变量.ToString() <br>字符型转换 转为字符串 <br>12345.ToString("n"); //生成 12,345.00 <br>12345.ToString("C"); //生成 ￥12,345.00 <br>12345.ToString("e"); //生成 1.234500e+004 <br>12345.ToString("f4"); //生成 12345.0000 <br>12345.ToString("x"); //生成 3039 (16进制) <br>12345.ToString("p"); //生成 1,234,500.00% <br><br><br>4、变量.Length 数字型 <br>取字串长度： <br>如： string str="中国"; <br>int Len = str.Length ; //Len是自定义变量， str是求测的字串的变量名 <br><br>5、System.Text.Encoding.Default.GetBytes(变量) <br>字码转换 转为比特码 <br>如：byte[] bytStr = System.Text.Encoding.Default.GetBytes(str); <br>然后可得到比特长度： <br>len = bytStr.Length; <br><br>6、System.Text.StringBuilder("") <br>字符串相加，（+号是不是也一样？） <br>如：System.Text.StringBuilder sb = new System.Text.StringBuilder(""); <br>sb.Append("中华"); <br>sb.Append("人民"); <br>sb.Append("共和国"); <br><br>7、变量.Substring(参数1,参数2); <br>截取字串的一部分，参数1为左起始位数，参数2为截取几位。 <br>如：string s1 = str.Substring(0,2); <br><br>8、String user_IP=Request.ServerVariables["REMOTE_ADDR"].ToString(); <br>取远程用户IP地址 <br><br>9、穿过代理服务器取远程用户真实IP地址： <br>if(Request.ServerVariables["HTTP_VIA"]!=null){ <br>string user_IP=Request.ServerVariables["HTTP_X_FORWARDED_FOR"].ToString(); <br>}else{ <br>string user_IP=Request.ServerVariables["REMOTE_ADDR"].ToString(); <br>} <br><br>10、 Session["变量"]; <br>存取Session值； <br>如，赋值： Session["username"]="小布什"; <br><br>取值： Object objName=Session["username"]; <br>String strName=objName.ToString(); <br>清空： Session.RemoveAll(); <br><br>11、String str=Request.QueryString["变量"]; <br>用超链接传送变量。 <br>如在任一页中建超链接:&lt;a href=Edit.aspx?fbid=23&gt;点击&lt;/a&gt; <br>在Edit.aspx页中取值：String str=Request.QueryString["fdid"]; <br><br>12、DOC对象.CreateElement("新建节点名"); <br>创建XML文档新节点 <br><br>13、父节点.AppendChild(子节点)； <br>将新建的子节点加到XML文档父节点下 <br><br>14、 父节点.RemoveChild(节点); <br>删除节点 <br><br>15、Response <br>Response.Write("字串")； <br>Response.Write(变量)； <br>向页面输出。 <br><br>Response.Redirect("URL地址"）； <br>跳转到URL指定的页面 <br><br>16、char.IsWhiteSpce(字串变量，位数)——逻辑型 <br>查指定位置是否空字符； <br>如： <br>string str="中国 人民"; <br>Response.Write(char.IsWhiteSpace(str,2)); //结果为：True, 第一个字符是0位，2是第三个字符。 <br><br>17、char.IsPunctuation('字符') --逻辑型 <br>查字符是否是标点符号 <br>如：Response.Write(char.IsPunctuation('A')); //返回：False <br><br>18、(int)'字符' <br>把字符转为数字，查代码点，注意是单引号。 <br>如： <br>Response.Write((int)'中'); //结果为中字的代码：20013 <br><br>19、(char)代码 <br>把数字转为字符，查代码代表的字符。 <br>如： <br>Response.Write((char)22269); //返回&#8220;国&#8221;字。 <br><br>20、 Trim() <br>清除字串前后空格 <br><br>21 、字串变量.Replace("子字串","替换为") <br>字串替换 <br>如： <br>string str="中国"; <br>str=str.Replace("国","央"); //将国字换为央字 <br>Response.Write(str); //输出结果为&#8220;中央&#8221; <br><br>再如：（这个非常实用） <br><br>string str="这是&lt;script&gt;脚本"; <br>str=str.Replace("&lt;","&lt;font&gt;&lt;&lt;/font&gt;"); //将左尖括号替换为&lt;font&gt; 与 &lt; 与 &lt;/font&gt; （或换为&lt;，但估计经XML存诸后，再提出仍会还原） <br>Response.Write(str); //显示为：&#8220;这是&lt;script&gt;脚本&#8221; <br><br>如果不替换，&lt;script&gt;将不显示，如果是一段脚本，将运行；而替换后，脚本将不运行。 <br>这段代码的价值在于：你可以让一个文本中的所有HTML标签失效，全部显示出来，保护你的具有交互性的站点。 <br>具体实现：将你的表单提交按钮脚本加上下面代码： <br>string strSubmit=label1.Text; //label1是你让用户提交数据的控件ID。 <br>strSubmit=strSubmit.Replace("&lt;","&lt;font&gt;&lt;&lt;/font&gt;"); <br>然后保存或输出strSubmit。 <br>用此方法还可以简单实现UBB代码。 <br><br>22、Math.Max(i,j) <br>取i与j中的最大值 <br>如 int x=Math.Max(5,10); // x将取值 10 <br><br>23、字串对比一般都用: if(str1==str2){ } , 但还有别的方法: <br><br>(1)、 <br>string str1; str2 <br>//语法: str1.EndsWith(str2); __检测字串str1是否以字串str2结尾,返回布尔值.如: <br>if(str1.EndsWith(str2)){ Response.Write("字串str1是以"+str2+"结束的"); } <br><br>(2)、 <br>//语法:str1.Equals(str2); __检测字串str1是否与字串str2相等,返回布尔值,用法同上. <br><br>(3)、 <br>//语法 Equals(str1,str2); __检测字串str1是否与字串str2相等,返回布尔值,用法同上. <br><br>24、IndexOf() 、LastIndexOf() <br>查找字串中指定字符或字串首次（最后一次）出现的位置,返回索引值，如： <br>str1.IndexOf("字")； //查找&#8220;字&#8221;在str1中的索引值（位置） <br>str1.IndexOf("字串")；//查找&#8220;字串&#8221;的第一个字符在str1中的索引值（位置） <br>str1.IndexOf("字串",3,2)；//从str1第4个字符起，查找2个字符，查找&#8220;字串&#8221;的第一个字符在str1中的索引值（位置） <br><br>25、Insert() <br>在字串中指定索引位插入指定字符。如： <br>str1.Insert(1,"字");在str1的第二个字符处插入&#8220;字&#8221;，如果str1="中国"，插入后为&#8220;中字国&#8221;； <br><br>26、PadLeft()、PadRight() <br>在字串左（或右）加空格或指定char字符，使字串达到指定长度，如： <br>&lt;% <br>string str1="中国人"; <br>str1=str1.PadLeft(10,'1'); //无第二参数为加空格 <br>Response.Write(str1); //结果为&#8220;1111111中国人&#8221; ， 字串长为10 <br>%&gt; <br><br>27、Remove() <br>从指定位置开始删除指定数的字符 <br>&lt;% <br>string str1="我是萨达姆的崇拜者之一"; <br>Response.Write(str1.Remove(5,4)); //结果为&#8220;我是萨达姆之一&#8221; <br>%&gt; <br>
<img src ="http://www.cnblogs.com/thingsfly/aggbug/445371.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42133/" target="_blank">[新闻]没有谷歌就活不下去的四个网站</a>]]></description></item><item><title>我的免费计数器代码</title><link>http://www.cnblogs.com/thingsfly/archive/2005/11/09/272522.html</link><dc:creator>翔之天国</dc:creator><author>翔之天国</author><pubDate>Wed, 09 Nov 2005 11:06:00 GMT</pubDate><guid>http://www.cnblogs.com/thingsfly/archive/2005/11/09/272522.html</guid><wfw:comment>http://www.cnblogs.com/thingsfly/comments/272522.html</wfw:comment><comments>http://www.cnblogs.com/thingsfly/archive/2005/11/09/272522.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.cnblogs.com/thingsfly/comments/commentRss/272522.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/thingsfly/services/trackbacks/272522.html</trackback:ping><description><![CDATA[&lt;center&gt;<BR>&lt;a href="<A href="http://www.rapidcounter.com/signup.php">http://www.rapidcounter.com/signup.php</A>" target="_top"&gt;&lt;img border="0" alt="访问统计" src="<A href="http://counter.rapidcounter.com/counter/1131533773/amini">http://counter.rapidcounter.com/counter/1131533773/amini</A>"; ALIGN="middle" HSPACE="4" VSPACE="2"&gt;&lt;/a&gt;&lt;script src=http://counter.rapidcounter.com/script/1131533773&gt;&lt;/script&gt;&lt;br&gt;&lt;a style="font-size:12" href="<A href="http://www.rapidcounter.com/">http://www.rapidcounter.com/</A>" target="_top"&gt;&lt;font style="font-size:12"color="#666666"&gt;访问统计&lt;/font&gt;&lt;/a&gt; &lt;/center&gt;<img src ="http://www.cnblogs.com/thingsfly/aggbug/272522.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42132/" target="_blank">[新闻]Google 10周岁生日</a>]]></description></item><item><title>数据联动查询界面设计之一</title><link>http://www.cnblogs.com/thingsfly/archive/2005/11/03/268113.html</link><dc:creator>翔之天国</dc:creator><author>翔之天国</author><pubDate>Thu, 03 Nov 2005 08:53:00 GMT</pubDate><guid>http://www.cnblogs.com/thingsfly/archive/2005/11/03/268113.html</guid><wfw:comment>http://www.cnblogs.com/thingsfly/comments/268113.html</wfw:comment><comments>http://www.cnblogs.com/thingsfly/archive/2005/11/03/268113.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cnblogs.com/thingsfly/comments/commentRss/268113.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/thingsfly/services/trackbacks/268113.html</trackback:ping><description><![CDATA[<P>今天抽空做了一下数据的联动查询界面。<BR><BR>1.list.aspx：<BR>放置4个Combobox控件，ID分别为：cb1,cb2,cb3,cb4<BR><IMG height=85 hspace=5 src="http://www.cnblogs.com/images/cnblogs_com/thingsfly/001.jpg" width=387 align=baseline><BR>2.list.aspx.cs:<BR>主要实现页面载入（Page_Load）、控件与数据库相应字段的绑定以及几个控件的联动（cb1_TextChanged,cb3_TextChanged）。后台代码如下：<BR><BR>//名称空间引用<BR>using System;<BR>using System.Data;<BR>using System.Data.OleDb;<BR>using System.Configuration;<BR>using System.Collections;<BR>using System.Web;<BR>using System.Web.Security;<BR>using System.Web.UI;<BR>using System.Web.UI.WebControls;<BR>using System.Web.UI.WebControls.WebParts;<BR>using System.Web.UI.HtmlControls;</P>
<P>public partial class list : System.Web.UI.Page<BR>{<BR>&nbsp;&nbsp;&nbsp; //页面载入事件<BR>&nbsp;&nbsp;&nbsp; //实现与数据库的联接、控件数据绑定初始化<BR>&nbsp;&nbsp;&nbsp; protected void Page_Load(object sender, EventArgs e)<BR>&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!IsPostBack)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //数据库连接字符串设置,其中MapPath()取得站点根目录所在路径.<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string strCon = "Provider=Microsoft.Jet.OleDb.4.0;";<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strCon += "Data Source=";<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strCon += MapPath("~/App_Data/db.mdb");</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OleDbConnection oleCon = new OleDbConnection(strCon);</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //设置四个控件对应的查询语句.<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string strSel = "select * from 省份";<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string strSel2 = "select * from 商业";<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string strSel3 = "select * from 地区";<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string strSel4 = "select * from 终端";</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OleDbCommand myCom = new OleDbCommand(strSel, oleCon);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OleDbCommand myCom2 = new OleDbCommand(strSel2, oleCon);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OleDbCommand myCom3 = new OleDbCommand(strSel3, oleCon);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OleDbCommand myCom4 = new OleDbCommand(strSel4, oleCon);</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; oleCon.Open();</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //为每个控件绑定相应数据.<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OleDbDataReader myDR = myCom.ExecuteReader();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cb1.DataSource = myDR;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cb1.DataTextField = "省份";<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cb1.DataBind();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; myDR.Close();</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OleDbDataReader myDR2 = myCom2.ExecuteReader();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cb2.DataSource = myDR2;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cb2.DataTextField = "商业名称";<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cb2.DataBind();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; myDR2.Close();</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OleDbDataReader myDR3 = myCom3.ExecuteReader();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cb3.DataSource = myDR3;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cb3.DataTextField = "地区名称";<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cb3.DataBind();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; myDR3.Close();</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OleDbDataReader myDR4 = myCom4.ExecuteReader();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cb4.DataSource = myDR4;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cb4.DataTextField = "终端名称";<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cb4.DataBind();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; myDR4.Close();</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; oleCon.Close();</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp; }</P>
<P>&nbsp;&nbsp;&nbsp; //"省份"下拉框的文本改变事件,当省份改变时"商业"、"地区"、"终端名称"相应进行改变<BR>&nbsp;&nbsp;&nbsp; protected void cb1_TextChanged(object sender, EventArgs e)<BR>&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //数据库连接字符串<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string strCon = "Provider=Microsoft.Jet.OleDb.4.0;";<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strCon += "Data Source=";<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strCon += MapPath("~/App_Data/db.mdb");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OleDbConnection oleCon = new OleDbConnection(strCon);</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //产生联动的控件的查询代码,注意加入了对"省份"控件的文本值的引用<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string strSel = "select * from 商业 where [省份] like '"+cb1.Text + "'";<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string strSel2 = "select * from 地区 where [省份] like '" + cb1.Text + "'";<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string strSel3 = "select * from 终端 where [省份] like '" + cb1.Text + "'";</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OleDbCommand myCom = new OleDbCommand(strSel, oleCon);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OleDbCommand myCom2 = new OleDbCommand(strSel2, oleCon);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OleDbCommand myCom3 = new OleDbCommand(strSel3, oleCon);</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; oleCon.Open();</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OleDbDataReader myDR = myCom.ExecuteReader();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cb2.DataSource = myDR;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cb2.DataTextField = "商业名称";<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cb2.DataBind();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; myDR.Close();</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OleDbDataReader myDR2 = myCom2.ExecuteReader();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cb3.DataSource = myDR2;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cb3.DataTextField = "地区名称";<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cb3.DataBind();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; myDR2.Close();</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OleDbDataReader myDR3 = myCom3.ExecuteReader();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cb4.DataSource = myDR3;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cb4.DataTextField = "终端名称";<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cb4.DataBind();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; myDR3.Close();</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; oleCon.Close();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; }</P>
<P>&nbsp;&nbsp;&nbsp; //"地区"控件的文本改变事件,引起"终端"控件改变.<BR>&nbsp;&nbsp;&nbsp; protected void cb3_TextChanged(object sender, EventArgs e)<BR>&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string strCon = "Provider=Microsoft.Jet.OleDb.4.0;";<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strCon += "Data Source=";<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strCon += MapPath("~/App_Data/db.mdb");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OleDbConnection oleCon = new OleDbConnection(strCon);</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string strSel = "select * from 终端 where [省份] like '" + cb1.Text + "' and [地区] like '" + cb3.Text +"'";<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OleDbCommand myCom = new OleDbCommand(strSel, oleCon);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; oleCon.Open();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OleDbDataReader myDR = myCom.ExecuteReader();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cb4.DataSource = myDR;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cb4.DataTextField = "终端名称";<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cb4.DataBind();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; myDR.Close();</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; oleCon.Close();</P>
<P>&nbsp;&nbsp;&nbsp; }<BR>}<BR><BR>注意问题:<BR>1.对名称空间的引用.<BR>2.连接字符串中数据库文件所在路径的表示.<BR>3.用同一连接对多个控件进行数据绑定时要注意DataReader的使用-前一个close之后才能创建第二个,否则会出错.<BR>4.在查询语句中引用控件文本值的方式.<BR><BR>这次主要的收获是成功连接数据库并实现联动,代码看起来好象有点冗长,没办法,编程经验尚少,希望大侠们能多多指正!!<BR><BR></P><img src ="http://www.cnblogs.com/thingsfly/aggbug/268113.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42131/" target="_blank">[新闻]祝Google 10周岁生日快乐</a>]]></description></item><item><title>数据录入界面的设计！！</title><link>http://www.cnblogs.com/thingsfly/archive/2005/10/31/265527.html</link><dc:creator>翔之天国</dc:creator><author>翔之天国</author><pubDate>Mon, 31 Oct 2005 06:21:00 GMT</pubDate><guid>http://www.cnblogs.com/thingsfly/archive/2005/10/31/265527.html</guid><wfw:comment>http://www.cnblogs.com/thingsfly/comments/265527.html</wfw:comment><comments>http://www.cnblogs.com/thingsfly/archive/2005/10/31/265527.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cnblogs.com/thingsfly/comments/commentRss/265527.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/thingsfly/services/trackbacks/265527.html</trackback:ping><description><![CDATA[<P align=left>最近设计了一个数据录入界面。在ACCESS中用VBA实现了，不知道在ASP.NET中应该如何实现？思路如下：<BR>1.根据相应的单据选择省份、商业单位，单击&#8220;开始录入&#8221;，激活下面的录入表格。<BR>2.在录入表格中选择地区、类别、商业名称、品名、规格后输入数量和发货日期。其中年份和月份、录入时间由系统自动生成。<BR>具体要求：<BR>1.省份、商业单位、地区等字段可以在组合框中选择，也可以直接输入，若输入的值在列表中存在，则自动显示该值，若不存在，控回车后提示&#8220;是否将该值加入列表&#8221;后选择&#8220;是&#8221;可以向相应数据库中添加新记录。<BR>2.省份、商业单位及地区、类别、商业名称等为多级联动选择。<BR>3.在下面的录入表格中点击相应字段所在单元格能出现该字段在数据库的查询列表的组合框，可以同时进行输入和选择，当输入值不在列表时能实现要求1的自动添加功能。<BR>4.不允许某些不能出现空值的字段出现空值。<BR>5.录入表格可横向录入也可以竖向录入，即表格激活后光标可左右移动也可上下移动。当向下移动或按回车时时能自动生成新行。<BR>6.所录入数据存放于临时表中，只有按下保存入库按钮数据才进入后台数据库中。<BR><BR><IMG height=261 hspace=0 src="http://www.cnblogs.com/images/cnblogs_com/thingsfly/录入界面.jpg" width=530 align=center><BR><BR>不知道高手们对以上界面有何意见，希望大家指点一二。特别是小弟初学ASP.NET，不知如何在WEB窗体中实现以上界面及相应的功能要求，有兴趣的朋友不妨讨论一下，非常感谢！</P><img src ="http://www.cnblogs.com/thingsfly/aggbug/265527.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42130/" target="_blank">[新闻]Google十年市值达1500亿美元 创造奇迹</a>]]></description></item><item><title>一个简单的用户控件例子</title><link>http://www.cnblogs.com/thingsfly/archive/2005/10/31/265306.html</link><dc:creator>翔之天国</dc:creator><author>翔之天国</author><pubDate>Mon, 31 Oct 2005 01:59:00 GMT</pubDate><guid>http://www.cnblogs.com/thingsfly/archive/2005/10/31/265306.html</guid><wfw:comment>http://www.cnblogs.com/thingsfly/comments/265306.html</wfw:comment><comments>http://www.cnblogs.com/thingsfly/archive/2005/10/31/265306.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/thingsfly/comments/commentRss/265306.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/thingsfly/services/trackbacks/265306.html</trackback:ping><description><![CDATA[<P>说明：<BR>&nbsp;&nbsp;&nbsp; 本例子旨在说明如何创建用户控件，可能会简单了些，但对于初学者来说应该有一定的帮助吧。<BR><BR>开发环境：Visual Web Developer 2005 Express Edition Beta 2（下面简称VWD）<BR><BR>开发步骤：<BR><BR>一、启动VWD，新建一网站。<BR>二、在&#8220;解决方案管理器&#8221;中&#8220;添加新项&#8221;，项目类型选&#8220;WEB用户控件&#8221;，名称为&#8220;myct1.ascx&#8221;，语言选&#8220;C＃&#8221;，并选择&#8220;将代码放在独立的文件中&#8221;。<BR>三、在&#8220;myct1.ascx&#8221;的设计界面中放置一Button,将其text属性值设置为&#8220;我的按钮&#8221;。<BR>四、在&#8220;解决方案管理器&#8221;中，添加新项，类型为web窗体，名称为&#8220;default.aspx&#8221;，语言选择&#8220;C＃&#8221;。<BR>五、在&#8220;default.aspx&#8221;的设计界面中，将&#8220;解决方案管理器&#8221;中的&#8220;myct1.ascx&#8221;拖放进来。<BR>六、双击&#8220;default.aspx&#8221;中的按钮控件，进入&#8220;myct1.ascx.cs&#8221;，在Button1_Click事件中添加代码&#8220;Button1.text = "我的控件测试"&#8221;。<BR>七、右键点击&#8220;default.aspx&#8221;，选择&#8220;在浏览器中查看&#8221;查看相应的效果。</P>
<P>补充：<BR>1.将控件拖进窗体中后，在窗体的源中会自动生成以下语句：<BR>&lt;%@ Register Src="myct1.ascx" TagName="myct1" TagPrefix="uc1" %&gt;<BR>该语句实现了对用户控件的引用。<BR>2.本例实现了对Button控件的简单扩展，如何对其作更复杂而更实用的扩展呢？后面的学习中要多注意这方面的技术。</P><img src ="http://www.cnblogs.com/thingsfly/aggbug/265306.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42130/" target="_blank">[新闻]Google十年市值达1500亿美元 创造奇迹</a>]]></description></item><item><title>CSDN中对Web自定义控件的讨论帖</title><link>http://www.cnblogs.com/thingsfly/archive/2005/10/27/262917.html</link><dc:creator>翔之天国</dc:creator><author>翔之天国</author><pubDate>Thu, 27 Oct 2005 02:33:00 GMT</pubDate><guid>http://www.cnblogs.com/thingsfly/archive/2005/10/27/262917.html</guid><wfw:comment>http://www.cnblogs.com/thingsfly/comments/262917.html</wfw:comment><comments>http://www.cnblogs.com/thingsfly/archive/2005/10/27/262917.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/thingsfly/comments/commentRss/262917.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/thingsfly/services/trackbacks/262917.html</trackback:ping><description><![CDATA[这是昨天在网上看到的非常不错的一个帖子，有很多高手都对WEB自定义控件做了很精辟的发言，值得研究。不过本人看过之后只是一知半解，就在这里收藏一下，留待以后参详吧，呵呵&#8230;&#8230;<BR><BR>本贴是对Web自定义控件的讨论<BR>包括<BR>1、自定义控件中添加子控件，以及保存子控件状态<BR>2、子控件事件处理<BR>3、自定义控件的事件处理<BR>4、自定义控件自身资源的处理，比如图片、CSS、脚本<BR>5、自定义控件的发布，比如加密、打包、外观<BR>6、不同格式的自定义控件，比如DropDownList那样，有&lt;asp:ListItem作为子控件<BR><BR>地址：<BR><A href="http://search.csdn.net/Expert/topic/1984/1984613.xml?temp=.3857233">http://search.csdn.net/Expert/topic/1984/1984613.xml?temp=.3857233</A> <img src ="http://www.cnblogs.com/thingsfly/aggbug/262917.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42129/" target="_blank">[新闻]GMail:回过头来支持IE6</a>]]></description></item><item><title>CSDN中一篇关于如何编写自已的控件的讨论帖。</title><link>http://www.cnblogs.com/thingsfly/archive/2005/10/27/262912.html</link><dc:creator>翔之天国</dc:creator><author>翔之天国</author><pubDate>Thu, 27 Oct 2005 02:29:00 GMT</pubDate><guid>http://www.cnblogs.com/thingsfly/archive/2005/10/27/262912.html</guid><wfw:comment>http://www.cnblogs.com/thingsfly/comments/262912.html</wfw:comment><comments>http://www.cnblogs.com/thingsfly/archive/2005/10/27/262912.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/thingsfly/comments/commentRss/262912.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/thingsfly/services/trackbacks/262912.html</trackback:ping><description><![CDATA[由于内容较多，这里只帖出该帖的地址，供学习参考。<BR><BR><A href="http://search.csdn.net/Expert/topic/1845/1845123.xml?temp=6.254214E-02">http://search.csdn.net/Expert/topic/1845/1845123.xml?temp=6.254214E-02</A> <img src ="http://www.cnblogs.com/thingsfly/aggbug/262912.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42129/" target="_blank">[新闻]GMail:回过头来支持IE6</a>]]></description></item><item><title>某网站项目需求</title><link>http://www.cnblogs.com/thingsfly/archive/2005/10/27/262905.html</link><dc:creator>翔之天国</dc:creator><author>翔之天国</author><pubDate>Thu, 27 Oct 2005 02:26:00 GMT</pubDate><guid>http://www.cnblogs.com/thingsfly/archive/2005/10/27/262905.html</guid><wfw:comment>http://www.cnblogs.com/thingsfly/comments/262905.html</wfw:comment><comments>http://www.cnblogs.com/thingsfly/archive/2005/10/27/262905.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/thingsfly/comments/commentRss/262905.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/thingsfly/services/trackbacks/262905.html</trackback:ping><description><![CDATA[<P><STRONG>说明：</STRONG><BR>这是一个非常详细而有点复杂的网站项目需求，希望能对自己的学习有所帮助。<BR>本网站项目需求来于因特网，本站仅作技术学习研究用，版权归原作者所有。<BR><BR><BR>1）会员管理 <BR>完成会员用户的申请注册、开户销户、登录认证，自动生成会员编码；会员登录后验证用户身份和检测访问权限，用户仅能操作权限内的内容。会员注册密码经 md5 加密后存入数据库。 会员级别划分：个人会员和代理商会员（多级）<BR>2）产品管理 <BR>对产品的基本资料进行维护和管理。可管理各种品牌类别、产品价格和积分，可设置产品的使用期限和产品到期查询等。 <BR>3）奖金计算 <BR>系统能将庞大的会员业务数据进行保存和处理，并按照奖金计算模型和设定条件， 完成直销业绩考核及工资的计算与打印， 将结果汇总并配合金融单位转帐作业。功能包括：会员积分计算、会员业绩计算、会员奖金计算、奖金计算参数设定、会员资格晋升管理、会员奖金明细单打印、部门业绩计算等。 <BR>4）业绩查询 <BR>经销商会员可灵活查询、查看相关的业绩信息，包括业绩组织查询和业绩信息查询。依据自定多重条件，查询所需信息，通过预览功能来列印所需报表。 </P>
<P>业绩组织查询：视觉化树状组织图，组织结构一目了然，可方便查看所属组织人员信息。 <BR>业绩信息查询：可查看 购货单信息、奖金取得来源、组织业绩、奖金总表、个人业绩、奖金资料明细表，并打印自己的奖金月结单。 <BR>5）财务管理 <BR>财务管理包括公司财务业绩管理、税务管理和发票管理。生成财务 报表导入 excel 。 <BR>公司财务业绩管理 ：管理公司整体销售业绩、产品的销售业绩、计算月末奖金、各种奖金的计算及分布统计、奖金的发放情况。并可对各种信息进行统计分析和查询。 <BR>税务管理 ：所得税管理、经销商扣缴税单、媒体转账服务等相关税务管理。 <BR>发票管理 ：统一发票 ( 三联式 ) 打印，媒体申报及相关报表打印。 <BR>6）分析统计图表 <BR>提供各种查询统计方式，多角度查询分析图表。包括： <BR>&amp;#8226; 全年度各月份经销商成长统计图表 <BR>&amp;#8226; 全年度各月份业绩成长统计图表 <BR>&amp;#8226; 指定月份各日经销商成长统计图表 <BR>&amp;#8226; 指定月份每日业绩成长统计图表 <BR>&amp;#8226; 经销商区域分布图表 <BR>&amp;#8226; 经销商年龄层分布图表 <BR>&amp;#8226; 各职级之当期晋升名单 <BR>7）进销存管理系统 <BR>进货管理系统 ：配合产品需求量及需求日期，决定进货产品、对象、数量及交货期而实 时发出订购单。 <BR>销货管理系统 ：产品之销货、退货、统一发票等作业处理。并产生库存异动、应收帐款 数据及各式销售状况报表。 <BR>库存管理系统 ：成品入库、出库、调整、盘点等作业处理，记录异常原因；提供成品仓库最新结存数量 及出入库明细表，供业务部门出货参考。 <BR>应收帐款管理系统 ：出货收款、冲帐、结帐及账单打印等作业处理。 <BR>应付帐款管理系统 ：采购付款、发票与验收、稽核及开票等作业处理。 <BR>8）中心店业绩查询 <BR>各地中心店可灵活查询、查看某段时间的奖金情况、销售报单情况，并可对其进行分类统计分析。 <BR>9）系统管理 <BR>主要包括系统设置、权限管理、日志管理、数据备份及恢复，在系统的安全性上起到重要作用。 <BR>系统设置 ： 公司基本资料设定、奖金参数制度设定等。 <BR>权限管理： 不同用户使用权限不同，对系统的操作范围也不同。 <BR>日志管理： 系统自动记录登录 IP地址、登录时间信息。如发现有异常问题自动弹出警告窗口。 <BR>数据备份、数据恢复功能： 系统定期自动备份数据库数据，若系统数据破坏，可用备份数据进行恢复，从而完善对数据的保护机制。 <BR>10）电子商务接口 <BR>该系统提供与电子商务系统的接口，开展网上业务，包括：网上购物、订单管理、计费结费管理、物流配送管理、网上支付管理和数据统计分析。可以充分利用网络资源，提高购物和交易效率，降低成本。</P><img src ="http://www.cnblogs.com/thingsfly/aggbug/262905.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42129/" target="_blank">[新闻]GMail:回过头来支持IE6</a>]]></description></item><item><title>把aspx文件编译成DLL文件</title><link>http://www.cnblogs.com/thingsfly/archive/2005/10/27/262892.html</link><dc:creator>翔之天国</dc:creator><author>翔之天国</author><pubDate>Thu, 27 Oct 2005 02:20:00 GMT</pubDate><guid>http://www.cnblogs.com/thingsfly/archive/2005/10/27/262892.html</guid><wfw:comment>http://www.cnblogs.com/thingsfly/comments/262892.html</wfw:comment><comments>http://www.cnblogs.com/thingsfly/archive/2005/10/27/262892.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cnblogs.com/thingsfly/comments/commentRss/262892.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/thingsfly/services/trackbacks/262892.html</trackback:ping><description><![CDATA[<STRONG>说明：</STRONG><BR>&nbsp;&nbsp;&nbsp; 这是一篇介绍如何将ASPX文件编译成DLL文件的文章，对于网页源程序的保护应该有一定的帮助吧。里面的例子我都调试通过。不过在ASP.NET2.0的环境中好象有点问题——第三步的例子中，在ASPX文件中加了&#8220;代码陷阱&#8221;之后，&#8220;编译错误&#8221;的页面中并没有&#8220;显示完整的编译源&#8221;这一链接，而在ASP.NET1.1中就没有这个问题。难道是MS意识到了这个问题特意将它屏蔽掉的？？这也太!%%%^&amp;&amp;&amp;***了吧？？？下面是原文全文摘录，本文仅作技术学习使用，版权归原作者所有。<BR><BR>
<H2><FONT color=#0f3ccd>把aspx文件编译成DLL文件</FONT></H2><BR><B>浙江省绍兴市解放北路148号交通大厦六楼 周杰忻</B><BR><BR>
<P class=a14><B>前言</B></P>
<P class=a14>Asp.net不是asp的简单升级，而是微软.Net计划中的一个重要组成部分，它依托.Net的多语言与强大的类库支持，引进了服务端HTML控件与WEB控件，自动处理控件的客户端与服务端的 交互，为开发人员提供了类似Windows下窗口编程的界面，为开发大型网络应用程序功能提供了良好的编程接口，也能够极大地提高开发人员的工作效率。</P>
<P class=a14></P>
<P class=a14>然而，&#8220;一次转换，两次编译&#8221;过程使得aspx文件在首次执行（或更新后首次运行）时显得略有不足，特别是在拥有大量aspx及codebehind的代码文件的应用环境中，把aspx文件编译成DLL（在.Net中，被称为应用程序集）后再发布，省去&#8220;一次转换、一次编译&#8221;的时间及CPU占用率，对提高WEB服务的整体性能会有较大的提升。当然，编译成DLL后，对源代码的保密性也有一定程度的提高。</P>
<P class=a14></P>
<P class=a14>本文通过对Asp.Net的基本处理流程及一个偶然发现的秘密的分析，介绍了在Asp.Net中如何建立aspx到DLL的映射，如何开发一个可以处理HTTP请求/响应的DLL，以及如何设置&#8220;陷阱&#8221;，把现成的单个aspx文件与codebehind的aspx文件编译成DLL的过程，文章最后，还介绍了一个在实际操作过程的小技巧。</P>
<P class=a14></P>
<P class=a14>由于本文要涉及Asp.Net应用程序、命令行编译、web.config配置文件等概念，为了使读者能更好地理解本文内容，也为了使本文看上去不显累赘，先就本文相对应的系统环境作一介绍：</P>
<P class=a14></P>
<P class=a14>系统环境：</P>
<P class=a14>Win2000（SP3）+ IIS5 + .Net Framework 1.0（中文版）。</P>
<P class=a14>服务器名称：</P>
<P class=a14>由于本文的例子均在本机上测试，服务器名称为localhost。</P>
<P class=a14>IIS设置：</P>
<P class=a14>建立虚拟目录dlltest（真实路径为w:\wwwroot\dlltest），并把它设为应用程序，在dlltest下建立bin目录。所有源文件将放在dlltest目录下，而所有dll文件将放在dlltest\bin目录下。</P>
<P class=a14>Asp.Net应用程序配置文件--web.config</P>
<P class=a14>在dlltest目录下建立一个web.config文件，初始时该文件内容如下：</P>
<P class=a14>&lt;?xml version="1.0"?&gt;</P>
<P class=a14>&lt;configuration&gt;</P>
<P class=a14>&lt;system.web /&gt;</P>
<P class=a14>&lt;/configuration&gt;</P>
<P class=a14>命令窗口（DOS窗口）</P>
<P class=a14>打开命令窗口，并用cd命令使当前目录为w:\wwwroot\dlltest。</P>
<P class=a14></P>
<P class=a14><B>一、建立aspx到dll的映射</B></P>
<P class=a14></P>
<P class=a14>首先让我们来看看一般情况下aspx文件是如何被Asp.Net处理的：</P>
<P class=a14>当一个HTTP请求（例如&#8220;http://webserver/webapp/webpage.aspx&#8221;）从客户端发送到IIS服务器时，IIS捕获并分析这个请求，当它分析到这个请求是一个aspx页面时，立即以&#8220;/webapp/webpage.aspx&#8221;为参数调用Asp.Net运行环境（aspnet_wp.exe）,Asp.Net环境启动后，检查&#8220;/webapp/webpage.aspx&#8221;是否存在，若不存在，则向客户端返回HTTP 404(File not found)错误，否则在Asp.Net 的临时目录中查找相应的dll文件，若不存在或者该dll比aspx源文件&#8220;旧&#8221;，则调用csc编译器（若aspx的服务端脚本语言是VB或JScript，则调用相应的vbc编译器, jsc编译器）把aspx文件编译成dll，然后Asp.Net再调用该dll来处理具体的客户请求，返回服务器响应。</P>
<P class=a14></P>
<P class=a14>从这个处理流程可以看出，一般情况下，Asp.Net运行环境会自动识别、检查、更新与aspx相对应的dll。那么有没有其它办法可以强制把对一个aspx文件的处理&#8220;路由&#8221;到一个已编译存在的DLL呢？方法就是在Asp.Net应用程序配置文件web.config的system.web节的httpHandlers节添加aspx到dll的映射项，语法如下：</P>
<P class=a14>&lt;add verb="*" path="aspx文件名" type="类名,dll文件" /&gt;</P>
<P class=a14>aspx文件：需要被&#8220;路由&#8221;的虚拟名称，扩展名必须是aspx，否则IIS会先于Asp.Net运行环境处理该文件。</P>
<P class=a14>dll文件： dll文件（应用程序集）的名称，不必输入&#8220;.dll&#8221;。ASP.NET 首先在应用程序的专用 \bin 目录中搜索程序集 DLL，然后在系统程序集缓存中搜索程序集 DLL。</P>
<P class=a14>类名： 由于一个dll可能会有多个名称空间或多个类，因此必须指明当dll调用时自动加载哪个类。</P>
<P class=a14></P>
<P class=a14>例如，某一Asp.Net应用程序的web.config文件如下：</P>
<P class=a14>&lt;?xml version="1.0"?&gt;</P>
<P class=a14>&lt;configuration&gt;</P>
<P class=a14>&lt;system.web&gt;</P>
<P class=a14>&lt;httpHandlers&gt;</P>
<P class=a14>&lt;add verb="*" path="index.aspx" type="BBS.IndexPage, bbs" /&gt;</P>
<P class=a14>&lt;/httpHandlers&gt;</P>
<P class=a14>&lt;/system.web&gt;</P>
<P class=a14>&lt;/configuration&gt;</P>
<P class=a14></P>
<P class=a14>该配置文件告诉Asp.Net，在客户端请求本应用程序的index.aspx文件时，直接调用应用程序bin目录下的bbs.dll，并自动加载其中的BBS.IndexPage类。</P>
<P class=a14></P>
<P class=a14><B>二、开发能处理HTML页面的DLL</B></P>
<P class=a14></P>
<P class=a14>应该指出的是，并不是所有的应用程序集DLL都能实现HTTP请求/响应模式。还是来看一下Microsoft Asp.Net快速入门教程(http://chs.gotdotnet.com/quickstart/aspplus/)中关于&#8220;Http 处理程序和工厂&#8221;的描述：</P>
<P class=a14></P>
<P class=a14>ASP.NET 提供低级别的请求/响应 API，使开发人员能够使用 .NET 框架类为传入的 HTTP 请求提供服务。为此，开发人员需创作支持 System.Web.IHTTPHandler 接口和实现 ProcessRequest() 方法的类。当处理 HTTP 请求不需要由高级别的页框架抽象化提供的服务时，处理程序通常很有用。处理程序的常用用途包括筛选器和类似 CGI 的应用程序，尤其是那些返回二进制数据的应用程序。 </P>
<P class=a14></P>
<P class=a14>ASP.NET 收到的每个传入 HTTP 请求最终由实现 IHTTPHandler 的类的特定实例来处理。IHttpHandlerFactory 提供了处理 IHttpHandler 实例 URL 请求的实际解析的结构。除了 ASP.NET 提供的默认 IHttpHandlerFactory 类外，开发人员还可以选择创建和注册工厂以支持大量的请求解析和激活方案。 </P>
<P class=a14></P>
<P class=a14>从这段文字可以看出，当aspx页面不涉及.net框架提供的高级界面技术（如数据缓存、状态保持、Web窗体控件引用等等）时，且向客户端输出的不是复杂的HTML文本，特别是只向客户端返回二进制数据（如图片，声音等）时，可以用一个.cs应用程序文件（本文使用c#语言，如果是用VB或JScript，...）来替代，而该应用程序必须有一个实现System.Web.IHTTPHandler 接口和并实现 ProcessRequest() 方法的类。一个简单的例子如下：</P>
<P class=a14></P>
<P class=a14>/* 源文件：ex1.cs 开始 */</P>
<P class=a14></P>
<P class=a14>using System.Web;</P>
<P class=a14></P>
<P class=a14>namespace DllTest</P>
<P class=a14>{</P>
<P class=a14>/*</P>
<P class=a14>类必须实现IHttpHandler接口。如果程序将访问会话状态（Session），则必须实现 IRequiresSessionState 接口（不包含任何方法的标记接口）。</P>
<P class=a14>*/</P>
<P class=a14>public class Ex1Page : IHttpHandler</P>
<P class=a14>{</P>
<P class=a14>/*</P>
<P class=a14>IsReusable属性告诉.Net框架，本程序是否可以被多个线程同时使用。</P>
<P class=a14>true对应是；false对应否。</P>
<P class=a14>*/</P>
<P class=a14>public bool IsReusable</P>
<P class=a14>{</P>
<P class=a14>get { return true; }</P>
<P class=a14>} </P>
<P class=a14></P>
<P class=a14>/*</P>
<P class=a14>实现ProcessRequest方法，向客户端返回响应数据。</P>
<P class=a14>本例中向客户端返回一个简单的HTML页面</P>
<P class=a14>*/</P>
<P class=a14>public void ProcessRequest(HttpContext context) </P>
<P class=a14>{</P>
<P class=a14>HttpResponse res = context.Response;</P>
<P class=a14></P>
<P class=a14>res.Write("&lt;html&gt;&lt;body&gt;");</P>
<P class=a14>res.Write("&lt;h1&gt;DllTest - Ex1（例1）&lt;/h1&gt;&lt;hr&gt;");</P>
<P class=a14>res.Write("本页面直接由DLL处理");</P>
<P class=a14>res.Write("&lt;/html&gt;&lt;/body&gt;");</P>
<P class=a14>}</P>
<P class=a14></P>
<P class=a14>}</P>
<P class=a14>}</P>
<P class=a14></P>
<P class=a14>/* 源文件：ex1.cs 结束 */</P>
<P class=a14></P>
<P class=a14></P>
<P class=a14>在命令行状态，用如下的编译命令把ex1.cs编译成ex1.dll，并把它存放在bin目录下。</P>
<P class=a14>csc /t:library /out:bin\ex1.dll ex1.cs</P>
<P class=a14></P>
<P class=a14>在配置文件web.config中添加aspx-&gt;dll映射，添加后，web.config应该是这样子的：</P>
<P class=a14>&lt;?xml version="1.0"?&gt;</P>
<P class=a14>&lt;configuration&gt;</P>
<P class=a14>&lt;system.web&gt;</P>
<P class=a14>&lt;httpHandlers&gt;</P>
<P class=a14>&lt;add verb="*" path="dlltest1.aspx" type="DllTest.Ex1Page, ex1" /&gt;</P>
<P class=a14>&lt;/httpHandlers&gt;</P>
<P class=a14>&lt;/system.web&gt;</P>
<P class=a14>&lt;/configuration&gt;</P>
<P class=a14></P>
<P class=a14>现在当浏览器访问http://localhost/dlltest/dlltest1.aspx时，实际上就是调用了ex1.dll中DllTest.Ex1Page类的ProcessRequest方法，在浏览中应该可以看到一个简单的页面。</P>
<P class=a14></P>
<P class=a14></P>
<P class=a14><B>三、把单个aspx文件编译成DLL</B></P>
<P class=a14></P>
<P class=a14>从上一节微软公开描述的&#8220;言外之意&#8221;来看，微软是不支持让开发人员直接把aspx文件编译成DLL的。然而，Asp.Net高级界面技术（服务端HTML控件，WEB控件等等）都是需要通过aspx文件才能展现出来的，如果为了DLL的运行效率而放弃aspx的高级特性，则显然是得不尝失的。</P>
<P class=a14></P>
<P class=a14>现在静下心来分析一下：</P>
<P class=a14>csc编译器只是一个c#语言的编译器，它只能对符合C#语言规范的文件进行编译，而aspx文件的格式显然不符合c#语言规范，所以csc编译器是无法对aspx源文件进行编译的。</P>
<P class=a14>因此，要想把aspx文件编译成dll文件，必然要先把aspx文件转化成csc编译器能识别的cs源文件。那么用什么工具来进行转换呢？虽然我深信这个工具一定是隐藏在.Net Framework里面，但在查阅了大量的Asp.Net及.Net的公开文档及参考手册，资料之后，仍找不到相关资料。</P>
<P class=a14></P>
<P class=a14>呵呵，天无绝人之路，一个偶然的机会，还是让我发现了这个秘密。</P>
<P class=a14></P>
<P class=a14>来看看源文件ex2.aspx:</P>
<P class=a14></P>
<P class=a14>/* 源文件：ex2.aspx 开始 */</P>
<P class=a14></P>
<P class=a14>&lt;%@ Page Language="c#" %&gt;</P>
<P class=a14></P>
<P class=a14>&lt;script runat="server"&gt;</P>
<P class=a14></P>
<P class=a14>/*</P>
<P class=a14>你没看错，下一行就是&#8220;abcdefg&#8221;，正是这一行，才让我有机会写出本篇文章^_^；</P>
<P class=a14>在文中，我把这一行称作&#8220;代码陷阱&#8221;</P>
<P class=a14>*/</P>
<P class=a14></P>
<P class=a14>abcdefg // 代码陷阱</P>
<P class=a14></P>
<P class=a14>void Page_Load(Object src, EventArgs args)</P>
<P class=a14>{</P>
<P class=a14>if( !IsPostBack ) NoteLabel.Text = "请输入您的姓名：";</P>
<P class=a14>}</P>
<P class=a14></P>
<P class=a14>void OnNameSubmit(Object src, EventArgs args)</P>
<P class=a14>{</P>
<P class=a14>string name = f_Name.Value;</P>
<P class=a14>NoteLabel.Text = (name=="") ? "姓名不能为空" : name +"，您好。欢迎光临！";</P>
<P class=a14>}</P>
<P class=a14>&lt;/script&gt;</P>
<P class=a14></P>
<P class=a14>&lt;html&gt;</P>
<P class=a14>&lt;body&gt;</P>
<P class=a14>&lt;form runat="server"&gt;</P>
<P class=a14>&lt;h1&gt;DllTest - Ex2（例2）&lt;/h1&gt;</P>
<P class=a14>&lt;hr&gt;</P>
<P class=a14>&lt;asp:label runat="server" id="NoteLabel" style="color:red; font-weight:bold" /&gt;</P>
<P class=a14>&lt;input runat="server" id="f_Name" size="8"&gt;</P>
<P class=a14>&lt;button runat="server" onserverclick="OnNameSubmit"&gt;确定&lt;/button&gt;</P>
<P class=a14>&lt;/form&gt;</P>
<P class=a14>&lt;/body&gt;</P>
<P class=a14>&lt;/html&gt;</P>
<P class=a14></P>
<P class=a14>/* 源文件：ex2.aspx 结束 */</P>
<P class=a14></P>
<P class=a14>如果把&#8220;代码陷阱&#8221;注释掉或删掉，那么ex2.aspx就是一个简单的Asp.Net文件，用IE浏览此页面可以发现它能正常工作。</P>
<P class=a14></P>
<P class=a14>现在让我们打开&#8220;陷阱&#8221;，来看看Asp.Net到底返回了什么？</P>
<P class=a14></P>
<P class=a14>返回的是一个&#8220;编译错误&#8221;的页面，报告源文件无法通过编译。让我们感兴趣的是该页面最下方的一个名为&#8220;显示完整的编译源&#8221;的超链接，点击些链接，就能看到这个由ex2.aspx转换而来的cs源文件（&#8220;完整的编译源&#8221;）的完整内容。把这部分&#8220;完整的编译源&#8221;去掉前面的行号信息和其它的一些编译开关（主要是#line编译命令），并关闭那个可爱的&#8220;代码陷阱&#8221;（用//把它注释掉或直接把它delete也行），整理后保存为ex2_aspx.cs：</P>
<P class=a14></P>
<P class=a14>/* 源文件：ex2_aspx.cs 开始 */</P>
<P class=a14></P>
<P class=a14>/*</P>
<P class=a14>从下面的说明可以看出，确实有一个未公开的工具来完成把aspx文件转化成cs源文件</P>
<P class=a14>*/</P>
<P class=a14>//------------------------------------------------------------------------------</P>
<P class=a14>// &lt;autogenerated&gt;</P>
<P class=a14>// This code was generated by a tool.</P>
<P class=a14>// Runtime Version:1.0.3705.0</P>
<P class=a14>//</P>
<P class=a14>// Changes to this file may cause incorrect behavior and will be lost if </P>
<P class=a14>// the code is regenerated.</P>
<P class=a14>// &lt;/autogenerated&gt;</P>
<P class=a14>//------------------------------------------------------------------------------</P>
<P class=a14></P>
<P class=a14>/* </P>
<P class=a14>奇怪的是：命名空间居然是ASP而不是ASPX </P>
<P class=a14>建议把该名称改成适合应用程序的名称，防止命名冲突，例如针对本文，可以改成DllTest</P>
<P class=a14>这里没改是为了让大家看清它的原貌</P>
<P class=a14>*/</P>
<P class=a14>namespace ASP {</P>
<P class=a14>using System;</P>
<P class=a14>using System.Collections;</P>
<P class=a14>using System.Collections.Specialized;</P>
<P class=a14>using System.Configuration;</P>
<P class=a14>using System.Text;</P>
<P class=a14>using System.Text.RegularExpressions;</P>
<P class=a14>using System.Web;</P>
<P class=a14>using System.Web.Caching;</P>
<P class=a14>using System.Web.SessionState;</P>
<P class=a14>using System.Web.Security;</P>
<P class=a14>using System.Web.UI;</P>
<P class=a14>using System.Web.UI.WebControls;</P>
<P class=a14>using System.Web.UI.HtmlControls;</P>
<P class=a14></P>
<P class=a14>/*</P>
<P class=a14>1、注意一下类名的构成，如果必要，可以把它改成有意义的名称，例如针对本文，可以改成Ex2Page</P>
<P class=a14>2、注意它的基类。Syste.Web.UI.Page实现了IHttpHandler接口，由于要访问Session，所以也实现了IRequiresSessionState接口。</P>
<P class=a14>*/ </P>
<P class=a14>public class ex2_aspx : System.Web.UI.Page, System.Web.SessionState.IRequiresSessionState {</P>
<P class=a14></P>
<P class=a14>private static int __autoHandlers;</P>
<P class=a14>protected System.Web.UI.WebControls.Label NoteLabel;</P>
<P class=a14>protected System.Web.UI.HtmlControls.HtmlInputText f_Name;</P>
<P class=a14>protected System.Web.UI.HtmlControls.HtmlButton __control3;</P>
<P class=a14>protected System.Web.UI.HtmlControls.HtmlForm __control2;</P>
<P class=a14>private static bool __intialized = false;</P>
<P class=a14>private static System.Collections.ArrayList __fileDependencies;</P>
<P class=a14></P>
<P class=a14>/* 现在可以关掉&#8220;陷阱&#8221;了 */</P>
<P class=a14>// abcdefg </P>
<P class=a14></P>
<P class=a14>void Page_Load(Object src, EventArgs args)</P>
<P class=a14>{</P>
<P class=a14>if( !IsPostBack ) NoteLabel.Text = "请输入您的姓名： ";</P>
<P class=a14>}</P>
<P class=a14></P>
<P class=a14>void OnNameSubmit(Object src, EventArgs args)</P>
<P class=a14>{</P>
<P class=a14>string name = f_Name.Value;</P>
<P class=a14></P>
<P class=a14>NoteLabel.Text = (name=="") ? "姓名不能为空" : name +"，您好。欢迎光临！";</P>
<P class=a14>}</P>
<P class=a14></P>
<P class=a14>/* 构造函数 */ </P>
<P class=a14>public ex2_aspx() {</P>
<P class=a14>System.Collections.ArrayList dependencies;</P>
<P class=a14>if ((ASP.ex2_aspx.__intialized == false)) {</P>
<P class=a14>dependencies = new System.Collections.ArrayList();</P>
<P class=a14></P>
<P class=a14>/* </P>
<P class=a14>应该把下面这行注释掉，让DLL成为一个无依赖的独立文件</P>
<P class=a14>防止在DLL运行时再次去查找、比较它的&#8220;依赖&#8221;文件的新旧</P>
<P class=a14>*/</P>
<P class=a14>//dependencies.Add("W:\\wwwroot\\dlltest\\ex2.aspx");</P>
<P class=a14>ASP.ex2_aspx.__fileDependencies = dependencies;</P>
<P class=a14>ASP.ex2_aspx.__intialized = true;</P>
<P class=a14>}</P>
<P class=a14>}</P>
<P class=a14></P>
<P class=a14>protected override int AutoHandlers {</P>
<P class=a14>get {</P>
<P class=a14>return ASP.ex2_aspx.__autoHandlers;</P>
<P class=a14>}</P>
<P class=a14>set {</P>
<P class=a14>ASP.ex2_aspx.__autoHandlers = value;</P>
<P class=a14>}</P>
<P class=a14>}</P>
<P class=a14></P>
<P class=a14>protected System.Web.HttpApplication ApplicationInstance {</P>
<P class=a14>get {</P>
<P class=a14>return ((System.Web.HttpApplication)(this.Context.ApplicationInstance));</P>
<P class=a14>}</P>
<P class=a14>}</P>
<P class=a14></P>
<P class=a14>public override string TemplateSourceDirectory {</P>
<P class=a14>get {</P>
<P class=a14>return "/dlltest";</P>
<P class=a14>}</P>
<P class=a14>}</P>
<P class=a14></P>
<P class=a14>private System.Web.UI.Control __BuildControlNoteLabel() {</P>
<P class=a14>System.Web.UI.WebControls.Label __ctrl;</P>
<P class=a14>__ctrl = new System.Web.UI.WebControls.Label();</P>
<P class=a14>this.NoteLabel = __ctrl;</P>
<P class=a14>__ctrl.ID = "NoteLabel";</P>
<P class=a14>((System.Web.UI.IAttributeAccessor)(__ctrl)).SetAttribute("style", "color:red; font-weight:bold");</P>
<P class=a14>return __ctrl;</P>
<P class=a14>}</P>
<P class=a14></P>
<P class=a14>private System.Web.UI.Control __BuildControlf_Name() {</P>
<P class=a14>System.Web.UI.HtmlControls.HtmlInputText __ctrl;</P>
<P class=a14>__ctrl = new System.Web.UI.HtmlControls.HtmlInputText();</P>
<P class=a14>this.f_Name = __ctrl;</P>
<P class=a14>__ctrl.ID = "f_Name";</P>
<P class=a14>__ctrl.Size = 8;</P>
<P class=a14>return __ctrl;</P>
<P class=a14>}</P>
<P class=a14></P>
<P class=a14>private System.Web.UI.Control __BuildControl__control3() {</P>
<P class=a14>System.Web.UI.HtmlControls.HtmlButton __ctrl;</P>
<P class=a14>__ctrl = new System.Web.UI.HtmlControls.HtmlButton();</P>
<P class=a14>this.__control3= __ctrl;</P>
<P class=a14>System.Web.UI.IParserAccessor __parser = ((System.Web.UI.IParserAccessor)(__ctrl));</P>
<P class=a14>__parser.AddParsedSubObject(new System.Web.UI.LiteralControl("确定"));</P>
<P class=a14>__ctrl.ServerClick += new System.EventHandler(this.OnNameSubmit);</P>
<P class=a14>return __ctrl;</P>
<P class=a14>}</P>
<P class=a14></P>
<P class=a14>private System.Web.UI.Control __BuildControl__control2() {</P>
<P class=a14>System.Web.UI.HtmlControls.HtmlForm __ctrl;</P>
<P class=a14>__ctrl = new System.Web.UI.HtmlControls.HtmlForm();</P>
<P class=a14>this.__control2= __ctrl;</P>
<P class=a14>System.Web.UI.IParserAccessor __parser = ((System.Web.UI.IParserAccessor)(__ctrl));</P>
<P class=a14>__parser.AddParsedSubObject(new System.Web.UI.LiteralControl("\r\n &lt;h1&gt;DllTest - Ex2（例2）&lt;/h1&gt;\r\n &lt;hr&gt;\r\n "));</P>
<P class=a14>this.__BuildControlNoteLabel();</P>
<P class=a14>__parser.AddParsedSubObject(this.NoteLabel);</P>
<P class=a14>__parser.AddParsedSubObject(new System.Web.UI.LiteralControl("\r\n "));</P>
<P class=a14>this.__BuildControlf_Name();</P>
<P class=a14>__parser.AddParsedSubObject(this.f_Name);</P>
<P class=a14>__parser.AddParsedSubObject(new System.Web.UI.LiteralControl("\r\n "));</P>
<P class=a14>this.__BuildControl__control3();</P>
<P class=a14>__parser.AddParsedSubObject(this.__control3);</P>
<P class=a14>__parser.AddParsedSubObject(new System.Web.UI.LiteralControl("\r\n "));</P>
<P class=a14>return __ctrl;</P>
<P class=a14>}</P>
<P class=a14></P>
<P class=a14>private void __BuildControlTree(System.Web.UI.Control __ctrl) {</P>
<P class=a14>System.Web.UI.IParserAccessor __parser = ((System.Web.UI.IParserAccessor)(__ctrl));</P>
<P class=a14>__parser.AddParsedSubObject(new System.Web.UI.LiteralControl("\r\n\r\n&lt;html&gt;\r\n&lt;body&gt;\r\n "));</P>
<P class=a14>this.__BuildControl__control2();</P>
<P class=a14>__parser.AddParsedSubObject(this.__control2);</P>
<P class=a14>__parser.AddParsedSubObject(new System.Web.UI.LiteralControl("\r\n&lt;/body&gt;\r\n&lt;/html&gt;\r\n"));</P>
<P class=a14>}</P>
<P class=a14></P>
<P class=a14>protected override void FrameworkInitialize() {</P>
<P class=a14>this.__BuildControlTree(this);</P>
<P class=a14>this.FileDependencies = ASP.ex2_aspx.__fileDependencies;</P>
<P class=a14>this.EnableViewStateMac = true;</P>
<P class=a14>}</P>
<P class=a14></P>
<P class=a14>public override int GetTypeHashCode() {</P>
<P class=a14>return -11574299;</P>
<P class=a14>}</P>
<P class=a14>}</P>
<P class=a14>}</P>
<P class=a14></P>
<P class=a14>/* 源文件：ex2_aspx.cs 结束 */</P>
<P class=a14></P>
<P class=a14>相信大家在分析了这个文件之后，会对Asp.Net运行原理有更进一步的认识（与本文无关，不详述）。</P>
<P class=a14></P>
<P class=a14>在命令行状态，用如下的编译命令把ex2_aspx.cs编译成ex2.dll，并把它存放在bin目录下。</P>
<P class=a14>csc /t:library /out:bin\ex2.dll ex2_aspx.cs</P>
<P class=a14></P>
<P class=a14>在配置文件web.config中添加aspx-&gt;dll映射，即在system.web节的httpHandlers添加下面一行：</P>
<P class=a14>&lt;add verb="*" path="dlltest2.aspx" type="ASP.ex2_aspx, ex2" /&gt;</P>
<P class=a14></P>
<P class=a14></P>
<P class=a14>现在当浏览器访问http://localhost/dlltest/dlltest2.aspx时，就如同访问ex2.aspx一样。当然，现在即使ex2.aspx不存在，或者已经更新过，也不会对页面访问有任何影响，除非重新生成bin\ex2.dll。</P>
<P class=a14></P>
<P class=a14></P>
<P class=a14><B>四、把codebehind的aspx文件编译成dll</B></P>
<P class=a14></P>
<P class=a14>对于把codebehind的aspx文件编译成dll，其中把aspx文件转化成cs源文件的原理同上，也是先设置一个&#8220;代码陷阱&#8221;，然后把&#8220;完整的编译源&#8221;进行适当整理，保存为cs源文件。区别是在编译成dll时的步骤：（为叙述方便，假设界面文件为ex3.aspx，codebehind文件为ex3.aspx.cs，ex3.aspx的&#8220;完整编译源&#8221;保存为ex3_aspx.cs）</P>
<P class=a14>第一步：先用如下命令把ex3.aspx.cs编译成bin\ex3.aspx.cs.dll</P>
<P class=a14>csc /t:library /out:bin\ex3.aspx.cs.dll ex3.aspx.cs</P>
<P class=a14>第二步：再用如下命令把ex3_aspx.cs编译成bin\ex3.dll</P>
<P class=a14>csc /t:library /r:bin\ex3.aspx.cs.dll /out:bin\ex3.dll ex3_aspx.cs</P>
<P class=a14></P>
<P class=a14>然后在配置文件web.config中添加aspx-&gt;dll映射，即在system.web节的httpHandlers添加下面一行：</P>
<P class=a14>&lt;add verb="*" path="dlltest3.aspx" type="ASP.ex3_aspx, ex3" /&gt;</P>
<P class=a14></P>
<P class=a14>现在打开浏览器，访问http://localhost/dlltest/dlltest3.aspx试试。</P>
<P class=a14></P>
<P class=a14><B>五、一点小技巧</B></P>
<P class=a14></P>
<P class=a14>在设置&#8220;陷阱&#8221;把aspx文件转化成cs源文件时，一般是使用copy、paste方法把&#8220;完整的编译源&#8221;保存在记事本或vs.net或其它asp.net开发环境，再进行整理后保存为cs源文件的。</P>
<P class=a14>整理，就是把paste进来的行号信息与&#8220;#line&#8221;编译指令去掉。如果是手动地删掉这些信息，则会太麻烦，即使是一个简单的如ex2.aspx的文件，也会产生约270行的&#8220;完整的编译源&#8221;。</P>
<P class=a14>我所使用的一个小技巧是：在记事本里，用替换的方法来快速整理。用"/* 行"来全部替换"行"，用"：*/"来全部替换"："，用"// #line 行"来全部替换"#line"，替换完成之后，再把&#8220;代码陷阱&#8221;注释掉，把主类构造函数里设置&#8220;依赖文件&#8221;的语句全部注释掉，这样就算整理完成了。</P><img src ="http://www.cnblogs.com/thingsfly/aggbug/262892.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42129/" target="_blank">[新闻]GMail:回过头来支持IE6</a>]]></description></item><item><title>好久没来，说说下面的学习计划吧！</title><link>http://www.cnblogs.com/thingsfly/archive/2005/10/26/262323.html</link><dc:creator>翔之天国</dc:creator><author>翔之天国</author><pubDate>Wed, 26 Oct 2005 03:53:00 GMT</pubDate><guid>http://www.cnblogs.com/thingsfly/archive/2005/10/26/262323.html</guid><wfw:comment>http://www.cnblogs.com/thingsfly/comments/262323.html</wfw:comment><comments>http://www.cnblogs.com/thingsfly/archive/2005/10/26/262323.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/thingsfly/comments/commentRss/262323.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/thingsfly/services/trackbacks/262323.html</trackback:ping><description><![CDATA[因为各种原因之前一直没来这里了，说来真是惭愧呀。<BR>就说说下面的学习计划吧。<BR><BR>1.项目说明：开发一个类似于ACCESS中的组合框的WEB控件。<BR><BR>2.思路：之前用ACCESS进行过一些简单的VBA开发，里面有一个组合框控件，感觉非常好用，既可以实现下拉选择，还可以实现输入，而且在输入的时候还可以根据输入的文字自动显示相应的内容，最可贵的是当输入的内容在列表中不存在里可以通过&#8220;NotInList&#8221;事件往列表中添加该内容。但在ASP.NET中只有一个DropDownList，只能选择不能输入更不用说添加内容了，不明白这么好的一个东东MS却将它排除在WEB控件之外？之前在网上找过一些第三方的Combobox控件，但是感觉始终没有在ACCESS中的组合框控件好用。不知道能不能通过对这些第三方控件进行重写，搞一个我自己的控件出来呢？<BR><BR>3.开发要求：<BR>（1）实现下拉列表功能；<BR>（2）实现输入并根据输入内容自动显示列表中存在的内容。<BR>（3）实现自动添加功能——当输入内容不在列表中时，能将该内容添加到列表中。<BR><BR>也许上面的计划对高手来说不值一提，但对于我来说这可是一个不小的挑战，到目前为止还不知道从何下手呢。且不管这些了，先到网上学习学习吧，希望高手看到能指点一二，在下感激不尽！<BR><BR>——天空没有留下翅膀的痕迹，而我已然飞过&#8230;&#8230; <img src ="http://www.cnblogs.com/thingsfly/aggbug/262323.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42128/" target="_blank">[新闻]Google十年大变样</a>]]></description></item><item><title>随笔01-博客堂注册成功！</title><link>http://www.cnblogs.com/thingsfly/archive/2005/10/02/248194.html</link><dc:creator>翔之天国</dc:creator><author>翔之天国</author><pubDate>Sun, 02 Oct 2005 12:54:00 GMT</pubDate><guid>http://www.cnblogs.com/thingsfly/archive/2005/10/02/248194.html</guid><wfw:comment>http://www.cnblogs.com/thingsfly/comments/248194.html</wfw:comment><comments>http://www.cnblogs.com/thingsfly/archive/2005/10/02/248194.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/thingsfly/comments/commentRss/248194.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/thingsfly/services/trackbacks/248194.html</trackback:ping><description><![CDATA[<P>正在国庆长假中，可能这几天还不能经常上来。不过度完假之后一定会常来的，希望这里能记录下自己的成长路程&#8230;&#8230;</P><img src ="http://www.cnblogs.com/thingsfly/aggbug/248194.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42127/" target="_blank">[新闻]谷歌十年创新路</a>]]></description></item></channel></rss>