摘要: Web应用程序是无状态的,每次从服务器请求网页时,都会创建一个网页类的新实例,那么在每次往返过程中都将会丢失所有与改页面及其控件关联的信息,为了克服这一固有的局限性,asp.net使用视图状态、控件状态用于保存往返过程中的页面和控件值。其中控件状态为asp.net 2.0特有。  阅读全文
posted @ 2008-05-19 22:41 sunfishlu 阅读(48) | 评论 (0)编辑
原文地址:http://www.codeproject.com/KB/webforms/GridViewExpandCollapse.aspx
代码下载:/Files/sunfishlu/GridViewExpandCollapse.rar
效果图:



介绍
      这篇文章介绍了使用JavaScript折叠/展开GridView行的功能,为了实现所希望的效果,我在GridView的表头放置了一张图片,当点击对应图片时,GridView将会折叠和展开行。

HTML代码
       在GridView中添加一个模板列,把图片放到模板列中的HeaderTemplate中,此GridView的HTML代码如下:
Code

GridView的表头图片绑定onclick事件
Code

JavaScript代码
         把下面的代码放到script标签中。    

Code

       在上面的代码中,全局参数是在window.onload事件中初始化的。有三个方法:toogle ToogleImage和ToggleRows。Toogle方法响应一个click事件,它先找到表头中的图片,然后通过调用ToogleImage和ToggleRows来实现我们的目的。注意在ToggleRows方法中,为了实现一些动态的效果,我们重复使用了setTimeout方法。
    为了在折叠展开中有一定的迟缓,每一次调用ToggleRows方法都设置了25毫秒,你可以根据需要改变TimeSpan的值。

总结
   在这篇文章中,我使用了setTimeout来达到流畅展开和折叠的效果。

posted @ 2008-05-19 01:05 sunfishlu 阅读(142) | 评论 (1)编辑
     摘要: 事件是当有动作发生或者状态改变时,类发出的信息或者通知。本文介绍了如何定义和创建自己的事件,如何定义适当的事件处理程序和自定义事件参数。  阅读全文
posted @ 2008-04-24 10:56 sunfishlu 阅读(40) | 评论 (0)编辑
     摘要: petshop是一个轻量级的开源项目,采用典型的三层架构,是学习asp.net 2.0很好的一个例子。  阅读全文
posted @ 2008-02-02 07:06 sunfishlu 阅读(117) | 评论 (0)编辑
B:写入xml数据
    .NET Framework也提供了一个以快速、非缓存、只向前的方式动态写入xml数据的类,即XmlWrite类。
    其重要属性如下:
   
    其重要方法如下:
   

   在利用各种Write方法写入xml数据的时候,XmlWriter对象通过在WriteState枚举中设定的值来展现它的状态,其枚举成员如下:

  

posted @ 2007-12-27 21:33 sunfishlu 阅读(37) | 评论 (0)编辑

A:读取xml 

       XmlReader允许您从流或者xml文档中访问xml数据。这个类提供了对xml数据快速、非缓存、只读、只向前的访问方式。可以使用XmlReader来判断各种因素,如xml文档中某一节点得深度、节点数否有属性、节点中属性的个数以及属性值。

       XmlReader类从文件的顶部开始读取数据,每次读取一个节点。

      使用XmlReader类的步骤如下:

      (1) 使用XmlReader类的Create()方法创建该类的一个实例,并将被读取的xml文件名称作为参数传入方法。

      (2) 建立一个反复调用Read()方法的循环。这个方法从文件的第一个节点开始,然后读取所有余下的节点,但是每次调用只读取一个节点。如果存在一个节点可被读取则返回true,而到文件最后时返回false。

      (3) 在循环中,检查XmlReader对象的属性和方法,以获得关于当前节点的信息。

处理xml中属性:

    xml中的属性由名称/值对组成并总是字符串数据。

其重要属性如下:


为支持特殊功能配置XmlReader对象
      XmlReaderSetting类用来验证XML数据的一个重要的类。其重要属性如下:
CheckCharacters: 允许您获得或者设置用于指示是否执行字符检查的值
ConformanceLevel:获得或者设置XmlReader对象的符合要求
IgnoreComments:允许获得设置用于指示是否忽略注释的值
IgnoreProcessingInstructions:指定是否忽略处理指令
IgnoreWhitespace:指定是否忽略无意义空格
ProhibitDtd:指定是否允许DTD处理
Schemas:指定在执行验证时使用的XmlSchemaSet
ValidationFlags:获得或者设置用于指定模式验证设置的值
ValidationType:获得或者设置用于指定所执行的验证类型的值
XmlResolver:设置用于访问外部文档的XmlResolver

posted @ 2007-12-26 21:06 sunfishlu 阅读(101) | 评论 (0)编辑
     摘要: TreeView无限级绑定数据库。  阅读全文
posted @ 2007-11-21 09:34 sunfishlu 阅读(122) | 评论 (0)编辑
      冒泡法的实现,使用Control基类中专门用于事件上传的两个方法:OnBubbleEvent和RaiseBubbleEvent。核心是使用ASP.NET 2.0框架提供的事件上传机制。这种机制允许子控件将事件沿其包容层次结构向上传播到合适的位置引发,并且允许将事件处理程序附加到原始控件以及公开冒泡的事件的控件上。
      OnBubbleEvent方法用于确定子控件的事件是否沿复合控件层次结构向上传递。在该方法中,参数source表示事件源,参数args表示包含事件数据的EventArgs对象。如果子控件的事件向上传递,则为true;否则为false。默认值为false。RaiseBubbleEvent方法用于将所有事件源及其信息分配给控件的父级,并且不能被重写。尽管无法重写此方法,但创作的控件可以通过重写 OnBubbleEvent 方法处理或引发冒泡事件。
      复合控件的事件冒泡主要存在以下两种情况:
      情况一:控件停止事件冒泡并引发和/或处理该事件。引发事件需要调用将事件调度给侦听器的方法。若要引发冒泡的事件,控件必须重写OnBubbleEvent以调用引发此冒泡的事件的OnEventName方法。引发冒泡的事件的控件通常将冒泡的事件公开为顶级事件。以下代码引发一个冒泡的事件。
 1protected override bool OnBubbleEvent(object sender,EventArgs e){
 2 bool handled = false
 3 if(e is CommandEventArgs) {
 4  CommandEventArgs ce = (CommandEventArgs)e; 
 5  if(ce.CommandName == "ButtonClick"
 6   OnButtonClick(EventArgs.Empty);
 7   handled =true;
 8  }

 9 }

10 return handled;
11}
情况二:控件进行一些处理并继续使事件冒泡。若要实现这一点,控件必须重写OnBubbleEvent,并从OnBubbleEvent调用RaiseBubbleEvent。以下代码在检查事件参数的类型后使事件冒泡。
1protected override bool OnBubbleEvent(object sender,EventArgs e)
2 if(e is CommandEventArgs) {
3  CommandEventArgs ce = (CommandEventArgs)e;
4  RaiseBubbleEvent(this,ce);
5  return true
6 }

7 return false;
8}
posted @ 2007-10-11 15:35 sunfishlu 阅读(249) | 评论 (1)编辑
     委托主要用于保存一个方法的引用,定义一个委托的过程实际上就是创建了一个新类,那么就可以通过new来创建一个委托的实例。示例程序:
 1using System;
 2using System.Collections.Generic;
 3using System.Text;
 4
 5namespace ConsoleApplication1
 6{
 7    public delegate int DelegateClass(string info);
 8    public class Program
 9    {
10        public static void Main()
11        {
12            DelegateClass obj = new DelegateClass(MethodA);
13            DelegateClass obj2 = MethodA;
14            obj("1");
15            obj.Invoke("2");
16            obj = null;
17            obj2 = null;
18        }

19        public static int MethodA(string info)
20        {
21            Console.WriteLine("MethodA开始工作");
22            return int.Parse(info);
23        }

24    }

25}
      委托就是事件与事件处理的连接机制,在连接事件和其处理程序之前,需要定义一个其他对象关心的事件。并且事件是委托类型的变量。事件处理的方法和委托同样的签名,参数可以不同名,但类型和排放顺序一定要一样。
posted @ 2007-10-10 17:13 sunfishlu 阅读(27) | 评论 (0)编辑