我知道题目起的有点大,大侠们不要骂我。最近
sl操作数据库以及调用网站的其他逻辑必须通过公共的接口服务才能实现,具体实现可参照下面链接
http://www.silverlightchina.net/html/tips/2009/0723/88.html
问题一:我以petshop的结构创建好了网站的各个层,但是WCF在调用BLL层时出错。
解决方法:如果大家采用原始petshop的那种构架webconfig文件中一定有下面的代码
<appSettings>
<add key="DAL" value="SQLServerDAL"/>
</appSettings>
这段代码除了在web下的webconfig文件中需要写以外,还需要在wcf项目的webconfig中添加。当然还有数据库的链接字符串。因为在factory层都是使用ConfigurationManager.AppSettings["DAL"];来获取变量的,而该代码是使用本应用中的配置文件中的DAL节点的值。
问题二:SL项目中不能引用Model层,不能使用DataSet。
解决方案:有时候项目不用LINQ,从数据库取出来的数据还是保存在DataSet中,但是SL中是不认Dataset的。所以必须要将DataSet转换成List泛型传给SL。WCF中引用的Model层的类型在SL中是可以识别的,不用在SL工程中另外引用。
问题三:列表控件无法添加自定义列绑定的字段。
解决方案:首先要设置该属性 AutoGenerateColumns="False"。其次要添加一个自定义列格式如下图代码。添加的自定义列只能手工编辑xaml文件。
代码
<sdk:DataGrid Height="156" HorizontalAlignment="Left"
Margin="93,79,0,0" Name="dataGrid1" VerticalAlignment="Top" Width="223" AutoGenerateColumns="False" ItemsSource="{Binding}">
<sdk:DataGrid.Columns>
<sdk:DataGridTextColumn Width="SizeToHeader" Header="姓名" Binding="{Binding _name}" />
<sdk:DataGridTextColumn Width="SizeToHeader" Header="年龄" Binding="{Binding _age}" />
<sdk:DataGridTextColumn Width="SizeToHeader" Header="性别" Binding="{Binding _sex}"/>
</sdk:DataGrid.Columns>
</sdk:DataGrid>
这里有一点需要注意。 Binding="{Binding _name}"。我在model中定义如下:
private string _name;
/// <summary>
/// 姓名
/// </summary>
public string name
{
set {_name=value;}
get {return _name;}
}
在绑定自定义列的时候要绑定私有的属性,不能绑定公有属性。
开发环境VS2010+SL4