摘要: 要统计页面的数量,我们必须把用户的从哪个页面到哪个页面插入数据库中,再由存储过程计算出各个页面访问数量。我只说如何把来源页面和目的页面插入到数据库。一般情况下,来源页面是为 Page.Request.ServerVariables["HTTP_REFERER"],目的页面为Page.Request.ServerVariables["SCRIPT_NAME"],但有特殊情况下来源页面通过前面方法得不...阅读全文
posted @ 2009-06-10 10:41 潇潇息一去不复返 阅读(334) 评论(1) 编辑
摘要: 强类型dataset ,它根据事先定义的Data Schema生成数据集.强类型dataset是继承dataset.但他可以是创建强类型dataset比一般的dataset要开销大,但datadapter填充数据时首先要获取表的数据结构信息,再填充数据,此时强类型就节省一点时间。强类型在编译时,一定能检查字段写错与否,会自动报错,而一般的dataset只有在运行时才能检查得到。但强类型datase...阅读全文
posted @ 2009-06-03 10:05 潇潇息一去不复返 阅读(219) 评论(3) 编辑
摘要: div虽然是现在发展的趋势,但div和table各有优势的。div能够让代码简洁,结构清晰,支持搜索引擎比table要好,容易被css控制,且在ie浏览器中可以一部分以部分显示(firefox不可以),table布局就要所有加载完才可以显示出来。table布局兼容性好,对不同浏览器可自动的进行调节,开发速度要快点,css控制table要比div难点。好动样式table是自带的,或它的属性就可以表示...阅读全文
posted @ 2009-06-02 10:44 潇潇息一去不复返 阅读(451) 评论(1) 编辑

 这是我创建的第一个wpf例子

1。首先打开vs2008,,再文件-新建-项目-新建项目中,选择wpf应用程序。给项目命名

2。从工具箱中拖出一个button到设计窗口(window窗口包括设计窗口)放到任意位置,此时,window1.xaml中的源代码也跟着变。

3。点击button将有后台事件出现,你在里面添加代码就ok

4。在window窗口的属性行填写title的名字

即完成第一个wpf例子wpf第一个程序

posted @ 2010-06-17 17:16 潇潇息一去不复返 阅读(895) 评论(2) 编辑

偶尔听人说javascript闭包,让我联想起以前学编译原理和数字逻辑里讲的闭包,以前上课讲的闭包很难懂,而且含有递归的意思在里面,现在不想再查看里面的闭包概念。

但javascript我是经常要用,所以是要懂这里面的概念。

其实javascript里的闭包概念很简单,就是函数用到外部变量,不需要传参就可以获取。

举个例子:

 

<script>

 

var sMessage = "Hello world";   
  
function sayHello(){   
     alert(sMessage);   
}   
  
sayHello();  

addNumber(1,2);

 

var iBaseNum = 10;   
  
function addNumber(iNum1, iNum2) {   
    function doAddition() {   
        alert(iNum1 + iNum2 + iBaseNum);   
    }   
    return doAddition();   

 


function a(){
 var i=0;
 function b(){
 alert(++i);
 }
 return b;
}

var c = a();
c();
c();


</script>
第一个函数sayHello没有传参数,直接利用了sMessage变量,这个就叫做闭包。

第二个函数复杂点,里面有个doAddition也是闭包函数,他不需要参数,直接在执行环境中获取iNum1,iNum2,还有外部变量 iBaseNum。

 第三个函数 是能保护 i变量的访问,并且一直保存i在内存中,可以一直增加。(闭包的一个经典用法)

jquery中闭包也差不多,先给个例子

 

你也许会问(function($){
     $("div p").click(function(){alert("cssrain!")});
})(jQuery);            //一个闭包
这是什么写法啊?

别急,我也是请教了upc ,才稍微懂了点。

这里面的$只是形参,但jquery是全局变量,所以不需要调用该函数就会自动执行,或者分两步

就是转化成正常的函数,先写函数,后调用。

如下所示
其实:
(function($){
     $("div p").click(。。。);
})(jQuery);   
就是等于
function tempFunction($){  //创建一个以$为形参的函数
     $("div p").click(....);
}
TempFunction(jQuery);         //传入实参jQuery执行函数.

干脆直接这么写 ,算了

 


(function(cssrain){
     cssrain("div p").click(.... );
})(jQuery);            //一个闭包

 

闭包的基本写法:
(function(){do someting})();
//这个你就理解为定义一个匿名函数并立即执行
带参数的话就这样:
(function(形参){do someting})(实参);
另外
(function(){var upc="i am upc"})();
alert(upc);
会提示undefined。
因为闭包后,里面的变量就相当于局部了。

闭包的好处:
不增加额外的全局变量,
执行过程中所有变量都是在匿名函数内部。

上面的例子不是很好,跟javascript的闭包有点混淆,但这确实也是jquery中的一种闭包。只不过经过jquery的加工罢了。

如过有什么不对,大家互相讨论,我也是初学者,还有很多不懂得地方。

 

posted @ 2010-06-17 13:06 潇潇息一去不复返 阅读(1584) 评论(2) 编辑

在网上可以随处找到这段代码,但是没有任何人解释这段代码,只要自己研究好久。

 

代码
  1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2 <html xmlns="http://www.w3.org/1999/xhtml">
  3 <head>
  4 <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
  5 <title>无标题文档</title>
  6 <style type="text/css">
  7 ul,li{margin:0;padding:0}
  8 #scrollDiv{width:300px;height:100px;min-height:25px;line-height:25px;border:#ccc 1px solid;overflow:hidden}
  9 #scrollDiv li{height:25px;padding-left:10px;}
 10 </style>
 11 <script type="text/javascript" src="jquery-1.1.3.pack.js"></script>
 12 <script type="text/javascript">
 13 (function($){
 14 $.fn.extend({
 15         Scroll:function(opt,callback){
 16                 //参数初始化
 17                 if(!opt) var opt={};
 18                 var _btnUp = $("#"+ opt.up);//Shawphy:向上按钮
 19                 var _btnDown = $("#"+ opt.down);//Shawphy:向下按钮
 20                 var timerID;
 21                 var _this=this.eq(0).find("ul:first");
 22                 var     lineH=_this.find("li:first").height(), //获取行高
 23         
 24                         line=opt.line?parseInt(opt.line,10):parseInt(this.height()/lineH,10), //每次滚动的行数,默认为一屏,
 25 
 26 即父容器高度
 27                         speed=opt.speed?parseInt(opt.speed,10):500//卷动速度,数值越大,速度越慢(毫秒)
 28                         timer=opt.timer //?parseInt(opt.timer,10):3000; //滚动的时间间隔(毫秒)
 29 
 30                 if(line==0) line=1;
 31                 var upHeight=0-line*lineH;
 32 
 33                 //滚动函数
 34                 var scrollUp=function(){
 35                         _btnUp.unbind("click",scrollUp); //Shawphy:取消向上按钮的函数绑定
 36                         _this.animate({
 37                                 marginTop:upHeight
 38                         },speed,function(){
 39                                 for(i=1;i<=line;i++){
 40                                         _this.find("li:first").appendTo(_this);
 41                                 }
 42                                 _this.css({marginTop:0});
 43                                 _btnUp.bind("click",scrollUp); //Shawphy:绑定向上按钮的点击事件
 44                         });
 45 
 46                 }
 47                 //Shawphy:向下翻页函数
 48                 var scrollDown=function(){
 49        
 50                         _btnDown.unbind("click",scrollDown);
 51                         for(i=1;i<=line;i++){
 52                                 _this.find("li:last").show().prependTo(_this);
 53                         }
 54                         _this.css({marginTop:upHeight});
 55                         _this.animate({
 56                                 marginTop:0
 57                         },speed,function(){
 58                                 _btnDown.bind("click",scrollDown);
 59                         });
 60                 }
 61                //Shawphy:自动播放
 62                 var autoPlay = function(){
 63                         if(timer)timerID = window.setInterval(scrollUp,timer);
 64                 };
 65                 var autoStop = function(){
 66                         if(timer)window.clearInterval(timerID);
 67                 };
 68                  //鼠标事件绑定
 69                 _this.hover(autoStop,autoPlay).mouseout();
 70                 _btnUp.css("cursor","pointer").click( scrollUp ).hover(autoStop,autoPlay);//Shawphy:向上向下鼠标事件绑定
 71                 _btnDown.css("cursor","pointer").click( scrollDown ).hover(autoStop,autoPlay);
 72 
 73         }       
 74 })
 75 })(jQuery);
 76 
 77 $(document).ready(function(){
 78         $("#scrollDiv").Scroll({line:4,speed:500,timer:3000,up:"btn2",down:"btn1"});
 79 });
 80 </script>
 81 </head>
 82 
 83 <body>
 84 <p>多行滚动演示:</p>
 85 <div id="scrollDiv">
 86   <ul>
 87     <li>这是公告标题的第一行</li>
 88     <li>这是公告标题的第二行</li>
 89     <li>这是公告标题的第三行</li>
 90     <li>这是公告标题的第四行</li>
 91     <li>这是公告标题的第五行</li>
 92     <li>这是公告标题的第六行</li>
 93     <li>这是公告标题的第七行</li>
 94     <li>这是公告标题的第八行</li>
 95   </ul>
 96 </div>
 97 
 98 <span id="btn1">down</span>
 99 <br/>
100 <span id="btn2">up</span>
101 102 
103 
104 </body>
105 </html>

 

这段代码只是多行滚动。

1。首先一个<div id="scrollDiv">高度限制是100px,而每行是25px,总共只能显示4行,但div中有八行。那怎么显示呢?

scrollDiv属性中有个overflow:hidden表示不能显示的则隐藏。

2。第二个问题是 哪四行显示在<div id="scrollDiv">中,由于_this.find("li:first").appendTo(_this);将前面的四行剪切插入到后面,并且设置高度是从0开始,这样就只能显示前四行。_this.find("li:last").show().prependTo(_this);同理将后面四行插入到前面去。

3。第三个问题是animate,它是jquery的一个函数,起到动画效应。但_btnDown.unbind("click",scrollDown);为何绑定了又要解开呢。这是因为当点击down时,将执行scrollDown函数,当执行到里面去时要解开绑定,以免此时再点击down时又执行scrollDown函数,导致混乱,只有执行完滚动后再绑定。

4。当不点击时,也会自动滚动。那时因为有个_this.hover(autoStop,autoPlay).mouseout();

jQuery中的hover方法是个非常常用的方法,接受二个参数,第一个参数为鼠标移入对象时触发的事件,第二个参数为鼠标移出对象时触发的事
5。$("#scrollDiv").Scroll({line:4,speed:500,timer:3000,up:"btn2",down:"btn1"});调用了Scroll 执行了:function(opt,callback),这里面却只传了opt,这里面没有callback函数。而且传参数也非常奇怪。不过就当它能这样传,相当于一个object,传过来也。

希望懂得更多的拍砖。

posted @ 2010-06-16 22:11 潇潇息一去不复返 阅读(470) 评论(0) 编辑

1。为什么要学习wpf:

sliverlight是wpf的一个子集,可支持跨域浏览器。现在sliverlight有一定应用了。所以学习了wpf再看silverlight就简单多了。还有wpf可以用用在桌面上开发,虽然不多,相信以后会有的。

2。wpf的优点

wpf主要是用来开发界面的,但界面漂亮。

因为它利用到了微软的directx技术,以前的basic,delphi,c++都是利用windows的user32,gdi来开发的。

他具有几项功能优点:

1)基于矢量绘图技术,可以将图形任意无限放大缩小。

2)显示图像与设备单位无关:就是在不同的分辨率下,显示同样的图像。

3)显示界面适应不同的显示设备。

4)支持多媒体,动画

5)有样式,模板特性(这不算什么优点,其他界面也有)

3。wpf架构(三层)

第一层 托管代码wpf api :presentationFramework.dll prsesentationCore.dll,windowsBase.dll

第二层是 milcore.dll,windowsCodes.dll   多媒体整合

第三层:direct3d,user32(操作系统底层的东西)

 

4。wpf类层次结构

System。Threading。DispacherObject 这个对象主要是用来整理消息:将键盘输入,鼠标移动等框架处理整理到用户界面线程。用户界面线程是一个单一的线程。

System。windows。DependencyObject 继承DispacherObject 。通过属性来与界面元素交互,相当我们在后台写属性后前台的界面就会发生一定变化。

System。Windows.Media.Visual 继承DependencyObject 可视化对象 继承visual的对象都有能力呈现在窗口上

System。Windows。UIElement继承Visual ,wpf的核心子系统。包括布局,输入,事件,焦点。

System。windows。FrameworkElement实现了很多UIElement仅定义的成员。如设置些属性HorizontalAlignment和Margin。同时还支持两个关键:数据绑定和样式

System.Windows.Shapes.Shape 继承FrameworkElement:如Rectangle,polygon,Ellipse,Line,Path

System。Windows.Controls.Control 继承FrameworkElement :如textbox,Button,ListBox,等。

system.WINDOWS.Controls.ContentControl继承Control :是其他控件继承他,用来呈现单块内容。

System.windows.Controls.ItemControl继承Control:是集合项控件的基类。

System。windows。Controls。panel 继承Control:布局容器面板的基类

 

 

 

 

posted @ 2010-06-16 16:13 潇潇息一去不复返 阅读(348) 评论(0) 编辑

今天是2010年4月9日,我学习了四天终于把一个excel做好,虽然花了好多时间,但是以后不会的。

以后会越做越熟。

以前我做过用reportingservice画excel页面,但现在却画excel。现在画的excel却有很多公式。所以导致画法不一样。

以前用reportingservice画excel就想画html一样,从前面到最后,不会受后面影响。

但现在画excel是用excel.dll画的, 而且是做模板上套用公式画的,要瞻前顾后的。所以拿到模板就要想好该怎么样操作。

最近做了个excel有点经验放在上面。

1. 当模板上有sum公式的话,模板上至少要两个数,否则当你复制这个sum公式时sum公式会失效。.

2.插入一行数据或一列都是从指定下一条插入,这时才插入到上面去了。插入行一定要选中一行,再插入。或者复制一行在选中一行进行插入。

3.拖动操作时,选择一个片段,然后再选择一个范围,然后拖动,不能是整行整列。

4.复制一行再粘贴到另外指定的行

5.当模板上的公式上指定了某行,某列时,一旦删除了这指定的行列时,这个模板公式就失效,就必须要重新给公式赋值。

6.公式可以一个sheet然后公式获取另外一个sheet值,所有要注意第五条的规则。

posted @ 2010-04-09 22:38 潇潇息一去不复返 阅读(375) 评论(1) 编辑

public interface Iterator
{
    MenuItem [] items;
    int positions = 0;
    
    publci DinerMenuIterator (MenuItem[] items)
    {
        this.items= items;
    }
    
    public Object next()
    {
        MenuItem menuItem = items[positions];
        position = position  + 1;
        return menuItem ;
    }
    
    public boolean hasNext()
    {
        if(position >=items.length || items[position]==null)
        {
            return false;
        }
        else
        {
            return ture;
        }
        
    }


}




public class DinerMenu
{
    static final int MAX_ITEMS = 6;
    INT numberOfItems = 0;
    MenuItem[] menuItems;    
    
    public Iterator createIterator()
    {
       return new DinerMenuIterator(menuItems);
    }
}

public calss DinerMenuIterator
{
    
}

public calss PancakeHouseIterator
{
    
}

public class PancakeHouseMenu
{
    static final int MAX_ITEMS = 6;
    INT numberOfItems = 0;
    MenuItem[] menuItems;    

    public Iterator createIterator()
    {
       return new PancakeHouseIterator(menuItems);
    }
}


public class Waitress
{
    PancakeHouseMenu pancakeHouseMenu;
    DinerMenu dinerMenu;

    public Waitress(PancakeHouseMenu PancakeHOuseMenu,DinerMenu dinerMenu)
    {
        this.pancakeHouseMenu = pancakeHouseMenu;
        this.dinerMenu = dinerMenu;
    }
    
public void PrintMenu()
{
    Iterator pancakeIterator = PancakeHouseMenu.createIterator();
    Iterator dinerIterator = dinerMenu.createIterator();
    System.out.println("MENU\n ----\n BREAKFAST");
    printMenu(pancakeIterator);
    System.out.println("\nLUNCH");
    PrintMenu(dinerIterator);
}


private void PrintMenu(Iterator iterator)
{
    while(iteraor.hasNext())
    {
        MenuItem menuItem = (MenuItem)iterator.next();
        System.out.println(MenuItem.getName() + ", ");
        System.out.println(MenuItem.getPrice() + ", ");
        System.out.println(MenuItem.getDescription());
    }
}

}
posted @ 2010-02-02 15:52 潇潇息一去不复返 阅读(85) 评论(0) 编辑



public abstract class caffeineBeverageWithHook
{
    
    void prepareRecipe()
    {
        boilWater();
        brew();
        pourIncup();
        if(customerWantsCondiments())
        {
            addCondiments();
        }
    }

    abstract void brew();
    abstract void addCondiments();

    VOid boilWater()
    {
        System.out.printLn("Boiling water");
    }
    
    void pourInCup()
    {
        system.out.println("Pouring into cup");
    }
    
    boolean customerWantsCondiments()
    {
        return true;
    }
}

posted @ 2010-02-02 13:30 潇潇息一去不复返 阅读(98) 评论(0) 编辑

原型模式的应用

  原型模式的优点

    ◇性能优良

  原型模式是在内存二进制流的拷贝,要比直接new一个对象性能好很多,特别是要在一个循环体内产生大量的对象时,原型模式可以更好的体现其优点。

    ◇逃避构造函数的约束

  这既是它的优点也是缺点,直接在内存中拷贝,构造函数是不会执行的(见“原型模式的注意事项”),优点就是减少了约束,缺点也是减少了约束,双刃剑,需要大家在实际应用时考虑。

  原型模式的使用场景

    ◇资源优化场景

  类初始化需要消化非常多的资源,这个资源包括数据、硬件资源等。

    ◇性能和安全要求的场景

  通过new产生一个对象需要非常繁琐的数据准备或访问权限,则可以使用原型模式。

    ◇一个对象多个修改者的场景

  一个对象需要提供给其他对象访问,而且各个调用者可能都需要修改其值时,可以考虑使用原型模式拷贝多个对象供调用者使用。

  在实际项目中,原型模式很少单独出现,一般是和工厂方法模式一起出现,通过clone的方法创建一个对象,然后由工厂方法提供给调用者
posted @ 2010-01-29 13:19 潇潇息一去不复返 阅读(114) 评论(0) 编辑
摘要: 工厂模式 是举了个做pizza的例子有pizzastore抽象类里边有个pizza对象变量,orderPizza中里面有个方法叫做createpizza,同时外面定义了一个createpizza抽象方法, 然后实现里面有个方法叫做createpizza,此方法更具不同的参数new不同的对象,如NYStyleChneesepizza,NystyleClampizza等,但NYStyleChneese...阅读全文
posted @ 2010-01-28 16:16 潇潇息一去不复返 阅读(69) 评论(0) 编辑
摘要: 此书借助的例子是 星巴兹加菲当用户需要houseblend 再加调料蒸奶,豆浆,摩卡,等调料。那此时不可能每个houseblend加一个调料变成一个对象吧。如果是这样就麻烦了,当主料有10种,调料有10种,则有100个对象,况且当多添加一种主料又要多加10个对象,那样肯定是不可能的。那我们采取的做法是建立10个主料对象,再建10个调料对象来装饰10个主料对象的超对象,这样当你需要一杯主料加调料也至...阅读全文
posted @ 2010-01-26 16:23 潇潇息一去不复返 阅读(53) 评论(0) 编辑
努力才能前进,勤耕博客才能看远