一起来打太极(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)