摘要: 信息系统大多会涉及到数据的统计,如数据的导出及生成统计对比图等,记得之前有一次要生成一个统计图在WEB页面上显示,那时也是在网上找了段Code,完全是一点点画横纵轴坐标上面的画出来的,而且出来的效果也一般。最近项目的需要又有类似的要求,当然也知道随VS08一起免费发布的绘图组件功能很强大,那绘图组件要下载安装,说是只支持.NET3.5(没试验过),不过园子里我看到了飛雪飄寒的一篇博客(http:/... 阅读全文
posted @ 2009-04-20 08:55 peace 阅读(5437) | 评论 (42)编辑
     摘要: 之前一直使用诺基亚的手机很好的,主要么就收发短信,打接电话了,用快三年了,打算让它退休告老还乡,08元旦拿天去买的时候,刚开始还是仍然打算买诺基亚的,结果转了好一会没看到中意的,正好转到买联想手机的柜台,MM听说我要买手机,极力推荐一款P630的,这款看起来长得也不错,看了下功能可以,本着支持国产的心,OK,就买这款了。直到前两周,发现这款的手机系统存在一个严重的潜在问题,君听我细细道来:  阅读全文
posted @ 2009-02-22 17:12 peace 阅读(242) | 评论 (3)编辑

   大家都知道新买的个人电脑,不管什么型号的,装XP系统,安装驱动很容易,但是有些搞开发的喜欢个人机装server2003的系统,我也是,可是每次装驱动那个头大啊(记得以前公司配的那个联想的朝阳K42系列的搞了两三天最终还是放弃了装Server2003,改装XP的了),要完全装好是件比较费力的事,每次都要在网上搜个遍(http://www.cnblogs.com/yuanbao/archive/2008/12/02/1345460.html 有两位的安装过的经历分享,我也参考过),有时搜出来的,看到能安装成功,但自己照着操作还是有个别问题,当然最终还是能在网上找到解决方法,下面我直接把T400安装server2003系统的备份好的所有驱动共享给大家,个别地方作下说明:

    首先可以下载一个驱动人生安装下,和驱动精灵类似的,安装后会自动检测要安装的驱动,并选择自动更新,当然比较难驱的是声卡,显卡,网卡了,驱动人生上基本上都可以驱动起来(个别不驱不起来也可以尝试下驱动精灵来驱动,有的驱动直接从联想服务网站下一般也可以直接安装),但是以太网卡驱动不了,无线网卡驱动在上面的参考网址中可以直接下载到,直接按装就可以了。以太网卡的安装刚开始我也是怎么也安装不了,看了上面的参考地址后说要手动安装,具体的安装截个图大致如下(参考上面yuanbao的博客里说的 手工安装>选择设备"网卡">再在厂商里选择"intel"〉然后选择"82567lm2"):

这里的文件复制来源,就是在联想网站上下载的以太网卡驱动的解压文件,浏览到指定文件点击确定即可。

驱动人生操作也截个图,如下:

可以到其官方网站去看下,随时下载最新的。

好了,我现在把我备份的所有驱动提供下载:驱动下载  驱动人生下载 (要是真能驱动人生就好,呵呵)

希望之后的兄弟们再安装类似的驱动时候能不头大些:)

 

 

posted @ 2009-02-20 00:59 peace 阅读(813) | 评论 (3)编辑

    文件上传,无刷新上传,文件批量上传,批量无刷新上传,这些词这年头好像非常多,不管那种上传能满足实际的需求就是好的,一般上传文件时,点文件浏览框,只能选择单个文件,如果要上传多个,浏览多次,然后点击批量上传就可以了,也很好的,也不刷新也有进度显示,完全不错的。网上也有关于上传文件的能够多选的例子,点浏览时可以按住ctrl键或者shift键选择多个,然后上传。但是好像这样的.NET版的不多,朋友发我一个整理过的Demo,之后我又稍微整理了下,觉得还好,可以分享给大家一下,好与不好就不说,因为没有完美的东西,能适用于大家的某些实际需求就行了。先说下这个方式上传的机制主要也是和一般的无刷新上传一样嵌了一个swf文件,同过js调用达到无刷新效果(测试Demo文章结束处下载)

(1)浏览上传文件框可以设置文件过滤格式:

if(form1.ddlFileType.value=="p")
                {
                    size_limit 
= "0"// 1M = 1048576;
                    types = "*.jpg; *.bmp; *.gif;";
                    types_description 
= "图像文件";
                }
                
else if(form1.ddlFileType.value=="a")
                {
                    size_limit 
= "0";
                    types 
= "*.mp3; *.wmv";
                    types_description 
= "音频文件";
                }
                
else if(form1.ddlFileType.value=="r")
                {
                    size_limit 
= "0";
                    types 
= "*.rm; *.avi; *.mpeg; *.rmvb;*.wmv; *.dat";
                    types_description 
= "视频文件";
                }
                
else
                {
                    size_limit 
= "0";
                    types 
= "*.*";
                    types_description 
= "所有文件";
                }        

 

 (2)点开选择文件按钮,弹出文件浏览框,选择文件双击鼠标或点右下角的打开按钮的同事就进行了相关操作,主要是把浏览的文件先以文件流的格式缓冲起来(简单的用session缓冲下),如下图:

     

   上面其实选择多个文件点点打开后js隐含执行了一个按钮的onclick事件。执行完成后各个文件会列出到列表中,如下图:

  

   完整的测试截图如下(比较简陋:))

  

   

config配置里,最大可以上传2G的文件,选择三个稍大点文件截个效果图,如下:

 

点击保存按钮后才是将文件上传至对应的文件夹和进行数据库写入操作。

   写完了我才发现,在我向博客里插入图片时,原来博客园上的插入图片上传等就是可以多选的了,呵呵,功能效果上和这非常相似。

  demo及源码下载 :多选文件上传(.NET版)   

  附加说明:选择文件类型时,必须要重新加载页面,也尝试过同过下拉的onchange事件来处理,让其不刷新页面,但是不可行,另外上传大文件过程中如要取消当前的文件,同时让其接着上传下一个文件,这点还没做处理,应该说是两个遗留问题吧。如果要运行程序,可能要安装一下aspnetajax,删除和请清空用的updatepanel,如果不安装要看效果,把页面的scriptmanager和updatepanel控件去条,config里注释掉同时把原有注释的放开就可以了。

   

posted @ 2009-01-16 17:04 peace 阅读(2728) | 评论 (20)编辑
     摘要: 利用httpModule进行整站输出过滤,原文的输出过滤主要是通过ReleaseRequestState这个事件来处理的,即执行完所有请求事件处理后发生,也就是请求处理全部结束后再进行过滤,这么一来截获的是整个page的html源文件了,然后对源文件内容进行特殊字符替换过滤处理(当然在替换前可以将原内容进行相关写入操作保存起来),捕获完成是以""为标志,因为最终在浏览器中呈现的html文件内容都是以""结尾的  阅读全文
posted @ 2009-01-09 11:05 peace 阅读(173) | 评论 (0)编辑

    先说一个要求,大家知道一个新闻的详细页里面,有很多的文字和图片,新闻信息一般都是采用文本编辑器录入发布的,比如插入图片就及时显示,但是插入图片显示出来的一般是<img src='xxx.jpg' border=0 width=xxx height=xxx /> 并没有超链接的,严格说来在详细页面再给图片加个超链接必要性不是很大,因为一般详细也显示的图片基本上就和原图一样了,不必非要能点下图片在弹出一个新窗口,新窗口里又显示一个一模一样的图片,有时候也可能由于详细页面显示的图片和原图的尺寸有些出入,弹出个新窗口显示其完全大小的图片也合理,更多的情况是新闻信息显示的图片和原图是一样的了,如果客户非要怎么搞呢,那就搞了。。。当然不是去修改编辑器,那看得头疼的。。。

     在新闻信息页面添加一段JS是可以做到的,先找到内容区域的所有IMG标签,然给标签添加事件,相当于仿了一个超链接,主要用到attachEvent方法为元素动态添加onclick事件,如下:

<script type="text/javascript">
var a = document.getElementsByTagName("IMG");//找出所有的IMG标签 测试
//
var s = document.getElementById("DivContent");
//
var a = s.getElementsByTagName("IMG");//找出DivContent区域内所有的IMG标签
  function addClick()
  {
      
for(i=0;i<a.length;i++)
      {   
          a[i].attachEvent(
"onclick"new Function("method("+i.toString()+");")); 
          a[i].style.cursor 
= "pointer"
          a[i].alt 
= "点我"
      }
  }
  
function method(p)
  { 
    window.open(a[p].src);  
  }
  addClick();
</script>

 

要注意的是attachEvent里的方法如果带有参数的话,不能这样a[i].attachEvent("onclick", function(){method(i.toString());}) 或 a[i].attachEvent("onclick", method(i.toString())) 

 

 

 

posted @ 2008-12-30 10:11 peace 阅读(323) | 评论 (0)编辑

     有时候在搜索文本框中输入内容,回车最好要求可以直接跳到搜索页面,也就是说在文本框输入内容回车时焦点要在搜索按钮上才行,在WEB FORM里,拉一个普通的服务器按钮button默认是有焦点的,如果搜索页就一个按钮,输入点在搜索框上也可以清晰看到焦点落到了搜索按钮button上了,但是用服务器的imagebutton或linkbutton是没有的,点搜索文本框输入可以发现焦点并不聚焦在她们身上,但是可以在页面加载的时候让其为默认焦点,在form里加标记,如下

<form id="form1" runat="server" defaultbutton="imgbutSearch">//将按钮ID给她

但是有一点不太好,也看到网上也提到的就是设置默认焦点时会在按钮周围产生一个虚框,确实有点影响雅观。有没有方法除掉这个影响雅观的东西呢?答案是肯定的:)  之所有要让焦点落到按钮上,无非就是要让在回车的时候可以执行按钮里的事件,既然这样,我们可以在点enter键的时候来进行处理

 

 

<script type="text/javascript"> 
     
function check()
     {
        
if(trim(document.getElementById("teSearch").value) == "")
        {
            alert(
"请先输入搜索关键字");
            form1.teSearch.focus();
            
return false;
        }
      }
        
function document.onkeydown() 
       { 
          
//var e = event.srcElement;
          if(event.keyCode==13
          { 
             document.getElementById(
"btnSearch").focus();
          } 
       }
function trim(str)
{
     
return str.replace(/(^\s*)|(\s*$)/g,"");
}
</script>

像上面那样,然后服务器段给btnSearch加个属性,在page_load里加上btnSearch.Attributes.Add("onclick","return check();");

这样只要在按下回车键的时候 就会执行按钮事件,相当于执行了你想要聚集的按钮事件,避免了加载时默认聚集的虚线边框或者鼠标在搜索文本框上时出现虚线边框

另外如果是链接href标签点击的时候如果想去掉虚线框可以加一句 onfocus=this.blur()  这个很早网上别人是这么做的,如下面

<A onfocus=this.blur() href="xxx.html" target=_blank><IMG height=115 src="/imgFace/postImg/fate.jpg" width=106 border=0></A>

 

 

 

 

posted @ 2008-12-25 13:40 peace 阅读(222) | 评论 (0)编辑
     摘要: 大家应该比较熟悉outlook里的日程安排,点进去就是一个日历版面,选择某日即可添加当天的日程安排,还有偶尔玩下开心网的兄弟们应该也知道有个日程组件,其实和outlook有点兄弟关系,只不过比outlook做的要漂亮些:) 从VS03到VS08里,ASP.NET一直带有个Calendar日历控件,我不知道历经三代岁月沧桑的交替,这个控件发生了多少变化,不是很清楚,因为从来就没在项目中用过,最近的一个项目倒是提到了这方面的需求,要求用户登录点“会议日程”能显示当前月的日期和相应具体日期有哪些事情等......  阅读全文
posted @ 2008-12-24 08:55 peace 阅读(2459) | 评论 (21)编辑

记得以前某个包含页面要定时刷新一般都会写一个onload方法,如

window.onload = function()
   {
      setTimeout("Refresh()",1000);//Refresh方法里比如是 window.location.href="xxx.aspx"

   }

上面那段放到head标签内就可以了

殊不知html的meta 标签里有自带的属性就可以了(地球人都知道,我现在才知道:)),如下面这句就行了

<meta http-equiv="refresh" content="1"; url=xxx.aspx"> // 1表示1秒相当于上面的1000毫秒

 

 

<html><head><title>测试</title>
<meta http-equiv=content-type content="text/html; charset=gb2312">
<meta http-equiv="refresh" content="2; url=http://www.cnblogs.com/">

</head>
<body>
<h1>正在转入地址......</h1>
</body></html>

顺便贴出其它的一些头文件属性

 

1、<meta http-equiv= "Content-Type"contect="text/html";charset=gb_2312-80">和 <meta http-equiv="Content-Language" contect="zh-CN">用以说明主页制作所使用的文字以及语言;又如英文是ISO-8859-1字符集,还有BIG5、utf-8、shift-Jis、Euc、Koi8-2等字符集;

2、<meta http-equiv="Refresh" content="n; url=  http://yourlink/";;>
  定时让网页在指定的时间n秒内,跳转到页面http://yourlink/

3、<meta http-equiv="Expires" contect="Mon,12 May 2001 00:20:00 GMT">可以用于设定网页的到期时间,一旦过期则必须到服务器上重新调用。需要注意的是必须使用GMT时间格式;

4、<meta http-equiv="Pragma" contect="no-cache">是用于设定禁止浏览器从本地机的缓存中调阅页面内容,设定后一旦离开网页就无法从Cache中再调出;

5、<meta http-equiv="set-cookie" contect="Mon,12 May 2004 00:20:00 GMT">cookie设定,如果网页过期,存盘的cookie将被删除。需要注意的也是必须使用GMT时间格式;

6、<meta http-equiv="Pics-label" contect="">网页等级评定,在IE的internet选项中有一项内容设置,可以防止浏览一些受限制的网站,而网站的限制级别就是通过meta属性来设置的;

7、<meta http-equiv="windows-Target" contect="_top">强制页面在当前窗口中以独立页面显示,可以防止自己的网页被别人当作一个frame页调用;

来源: 参考来源

 

 

 

 

posted @ 2008-12-22 13:50 peace 阅读(266) | 评论 (2)编辑

   标题不过是搞笑 呵呵

   最近时间稍微空一点,每天任务不是很重,在园子里翻来看去,学习学习:),也想看看jquery,之前一直用的prototype,prototype.js的开发文档也从来没看过,用得最多的就是$("id")这个东西和异步调用玩下,前天在园子里看到一个prototype.js1.4.0的开发手册,从头到尾看了一下,有些很方便的东西可以直接用,尤其有些常用方法,直接调用就好了,也不用再单独写了,下了一个prototype.js1.6.0的,之前一直用的是prototype.js1.4.0(被改写过,主要配合httprequest.js方便异步的调用)看了文档里提到的异步调用,和我以前用的方式也不太一样,最终原理当然是一样的了,下面主要说下文档里Ajax.Updater的调用。

在web里实现异步效果,一般都加了一个中转页面,当前页面后台没有什么事件之类的

  var myAjax = new Ajax.Updater(
            'msg',//如果不需要标签,保留两个个单引号即可
            //{success: 'msg'}, //与onFailure配用
            url,
            {
                method: 'post',
                parameters: pars,
                onLoading : loading,
                onComplete : complete//不与onFailure并用
                //onFailure : reportError
               
            });

prototype.js 1.4.0版本里实现局部刷新,上面那么调用就可以了(prototype.js 1.6.0同样适用),上面的msg是一个div标签,异步调用后Respose.Write()输出的结果就会显示在此div标签里,如果不想传入标签(可以传一个空串,即一对引号),想在异步调用完后再赋值也是可以的,下面这样

  function complete(request)
                {
                    $('msg').innerHTML = request.responseText;
                    $('tip').innerHTML = "<img border=\"0\" src=\"images/ajaxico_confirm.gif\">统计完成......";
                }

很多时候用异步效果,都喜欢在加载(loading)时,能有个齿轮图片在转动,其实我也喜欢,呵呵,单一的一个中转页面的调用,可以提示正在加载数据。。。,加载完成两种状态,本身prototype.js里面页面请求的状态定了有好几种,具体可以看下源码,比较常用的一般是onLoading(加载时),onComplete(加载完成,执行成功),onFailure(加载失败,程序出现异常),就提示效果而言onComplete和onFailure在异步调用时不会同时提示,如果调用时程序发生异常,提示的还是onComplete里的消息,如下面

 var myAjax = new Ajax.Updater(
            'msg',//如果不需要标签,保留两个个单引号即可
            //{success: 'msg'}, //与onFailure配用
            url,
            {
                method: 'post',
                parameters: pars,
                onLoading : loading,

                onFailure : reportError,
                onComplete : complete//不与onFailure并用
                
                
            });
 

如果程序抛出异常,并不会执行reportError方法,仍然是执行complete方法,也就是说加了success属性后只与onFailure配用,现在说下所谓的嵌套调用,之所有想用“异步嵌套”,有时候是想多几部提示效果,点一个按钮,从数据库里抽取数据进行统计,统计完后还要生成报表文件下载(可能需要提示正在查询数据。。。,正在读写文件。。。,读写完成等提示最后弹出文件下载提示框),整个过程要想达到无刷新的效果,这么来个嵌套还是可以的,像下面调用

建一个default.aspx页面

 

 

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    
<title>无标题页</title>
    
<script type="text/javascript" src="js/prototype.js"></script>
    
<script type="text/javascript">
        function getHTML()
        {
            var url 
= 'WebForm1.aspx';
            var pars 
= 'name=peace';

            var myAjax 
= new Ajax.Updater(
            
'msg',//如果不需要标签,保留两个个单引号即可
            
//{success: 'msg'}, //与onFailure配用
            url,
            {
                method: 
'post',
                parameters: pars,
                onLoading : loading,
                onComplete : complete
                
//onFailure : reportError
                
            });
            
            function loading(request)
            {
                $(
'msg').innerHTML = "";
                $(
'tip').innerHTML = "<img border=\"0\" src=\"images/ajaxloading.gif\">正在抽取";    
            }
             function complete(request)
            {
                
//alert(request.responseText);也可以通过返回值进行判断加载出差或完成
                $('msg').innerHTML = request.responseText;// 如果updater方法中不想传入标签时,这里也可以给标签赋值
                
                
//$('tip').innerHTML = "抽取完成";
                
//setTimeOut("Delay()",2000); 
                     var url = 'WebForm2.aspx';
                     
//var pars = 'name=peace';
                     var myinnerAjax = new Ajax.Updater(
                    
'',
                    url,
                    {
                        method: 
'post',
                        parameters: 
null,//pars,如果没有参数,可以给一个空值
                        onLoading : loading2,
                        onComplete : complete2 
                });
                
                
                 function loading2(request)
                {
                    $(
'tip').innerHTML = "<img border=\"0\" src=\"images/zoho-busy.gif\">正在统计";
                }
                 function complete2(request)
                {
                    $(
'msg').innerHTML = request.responseText;
                    $(
'tip').innerHTML = "<img border=\"0\" src=\"images/ajaxico_confirm.gif\">统计完成";
                }
             
            }
            function success(request)
            {
                $(
'msg').innerHTML = "成功执行";
            }
            function reportError(request)
            {
                $(
'tip').innerHTML = "<img border=\"0\" src=\"images/ajaxico_error.gif\">抽取数据发生错误";
            }
            

        }

</script>

</head>
<body>
    
<form id="form1" runat="server">
    
<input type="button" value="测试" onclick="getHTML()" />
    
<div id="msg">
    
    
</div>
     
<div id="tip">
    
    
</div>
    
</form>
</body>
</html>

 prototype.js1.4--1.6的都可以

webForm1.aspx.cs 里是这样的

 public partial class WebForm1 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            System.Threading.Thread.Sleep(2000);
            if (Request["name"] == "peace")
            {
                Response.Write("peace");
                Response.End();
            }
            else
            {
                Response.Write("hello");
                Response.End();
            }
        }
    }

webForm2.aspx.cs里是这样的

 public partial class WebForm2 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            System.Threading.Thread.Sleep(2000);
            Response.Write("peaceli");
            Response.End();
        }
    }

上面的两个页面相当于加了一个延时时间,当然实际的应用中可以不用,时间执行多长时间就是多长时间,点击测试按钮的效果如下

 

 

 

上面就是整个无刷新的提示过程,但是还是有一点不尽如人意,上面贴出的有两句被注释掉了,就是在第一次异步调用完成后的complete方法里

$('tip').innerHTML = "抽取完成......";
setTimeOut("Delay()",2000);

原本想有四个提示的,写了个空的Delay()方法 主要是想在此停顿2秒,再提示下面两个,可惜不行,主要是因为异步调用相当与线程调用一样,并不会像想象的那样去顺序执行顺序提示,不过我之前的有写过一篇随笔,那里面是可以有四个提示的,那里面我调用的方法不一样,并不只用了prototype.js一个文件,想看的可去看下,那里有下载的demo,地址是 文章链接,完了,放到新手区忽悠下,上面只是个人看法。

 

该小demo下载地址 

 

 

posted @ 2008-12-09 16:55 peace 阅读(251) | 评论 (0)编辑