一起来打太极(4)

2003-12-01 by 开心就好
![.](/static/joy/414/t_taiji.jpg) 遇到麻烦了! 嗯,让我先来整理一下思路,如何讲清楚这个问题。好的,就让我们这样来说吧,首先我们创建两个Project,第一个Project是Class Library,即类库的,里面有一个实体类及一个控制类,假设实体类如何下: public class User {     public User()     {     }    private string name;    private int age;    private DateTime birthDay;    public string Name   {       get{return this.name;}       set{this.name=value;}   }   public int Age   {        get{return this.age;}        set{this.age=value;}   }   public DateTime BirthDay   {      get{ return this.birthDay;}      set{ this.birthDay=value;}   } } 然后再做一个控制类,里面就一个方法,这个方法返回一个User\[\]的数组。 public User\[\] GetUser(){...} OK,第二个Project是一个ASP.NET的Web应用程序,并且引用上面的这个Class Library,在其默认ASP.NET页面上放一个DataGrid,然后这个DataGrid的数据源指定为上面那个项目中的控制类的方法,即将DataGrid1绑定到一个User\[\]数组上,大家可以试一下,这是可以成功的。因为DataSource的数据源可以为实现了System.Collections.IEnumerable接口的对象,而数组类型是继承自System.Array的,System.Array实现了System.Collections.IEnumerable接口。 但是接下来,我们引入Web Service,即先解除ASP.NET的Web应用对于Class Library的引用关系,然后Web Service引用Class Library,而ASP.NET通过**Web引用**建立与Web Service项目的联系。如下图所示 ``{=html}ASP.NET\_\_*[WEB引用]{.underline}*\_\_Web Service\_\_\_[*引用*]{.underline}\_\_\_\_Class Library``{=html} 在Web Service项目当中,建立一个Web Method对Class Library进行一下Wrap: \[WebMethod\] public User\[\] GetUser() {    //直接调用Class Library中的GetUser方法,并且返回其结果; } 然后在ASP.NET的默认ASP.NET页面中调用此Web方法,进行数据绑定,现在再查看,肯定会得到一个异常,说无法绑定。 我追踪了一下午,基本上发现了问题所在: - 当加入Web Service的时候,ASP.NET将User类进行了一个包装,注意,这时候的User不是Class Library中定义的User类了,而是Web Service Client端由VS.NET自己定义的一个User类; - Web Service中的这个User类所创建的数组无法进行数据绑定,甚至无法将这个类的数组通过强制类型转换转换为Class Library中声明的那个User类的数组。 问题就是这样,但解决方案尚未出来,希望哪位大侠不吝赐教! 需求又出来新版本了,数据库设计也基本上出来了。不过今天晚上他们又要去需求方汇报,不知道需求是不是还会改? 周末拜见了岳父岳母大人,已经正式取得合法的恋爱执照了![尴尬的笑脸](http://messenger.china.msn.com/Resource/emoticons/red_smile.gif)

Comments