大家都知道微软的Silverlight是个可以在Mac OS, windows和Linux等多个操作系统工作的浏览器插件。而且开发出来的web程序将会是更加安全。
软件配置:
1. Visual Studio 2008,
2. Silverlight 2.
3. SQL Server的Northwind数据库。
设计要求:
下图所示,包含一个button和两个textbox。第一个textbox能够显示了输入数据,第二个textbox只能够显示数据,button按钮用来触发弹出的搜索框的事件。
弹出的搜索框将会显示一个datagrid,同时包含搜索功能,如下图所示:
这里有两种方法来把datagrid的数据显示到原来页面的第二个textbox中:
下面我们一步一步来创建这个项目。
第一步: 创建一个Silverlight和WCF 项目。
1. 在Visual Studio 2008中, 新建一个Silverlight项目,起个名字叫做popformdemo,如下图所示:
2. 点击OK按钮后,会出现如下的提示:
然后在popformdemo项目下添加一个CusControl文件夹,如下图所示:
3. 在Cuscontrol文件夹下面,添加一个Slilverlight user control文件, 命名为’PopForm’如下图:
第二步:创建一个WCF service项目:
这里又很多方式让silverlight插件访问数据库,最常用的是web services和WCF。我在这个例子中将会使用WCF来实现。
1. 在解决方案下面,添加一个新的web应用程序起名字为’DaoWcf’,如下图:
2. 在新建的项目中添加一个WCFService并命名PopDataService如下图:
这时候就会新添加两个IpopDataService.cs和POpDataService.svc文件:
3. WCF Service项目的配置:
在DaoWcf项目中,右键属性, 设置local iis wev server:
然后修改web.config中的数据库连接:
再修改Service binding模式从wsHttpBinding为basicHttpBinding。
第三步: WCF Service项目所用到的代码:
在PopDataService.svc.cs文件,PopFormClass由一个ID和一个NAME属性
[DataContract()]
public class PopFormClass
{
[DataMember]
public string ID { get; set; }
[DataMember]
public string NAME { get; set; }
}
在IPopDataService.cs文件中,IPopDataService接口有3个方法。
[ServiceContract]
public interface IPopDataService
{
[OperationContract]
List<PopFormClass> GetSqlCustomersData();
[OperationContract]
List<PopFormClass> GetSqlEmployeesData();
[OperationContract]
List<PopFormClass> GetSqlProductsData();
}
在IPopDataService的后台文件中吧三个抽象函数具体话:
public class PopDataService : IPopDataService
{
private string SqlConString;
public PopDataService()
{
SqlConString = ConfigurationManager.ConnectionStrings["NorthWindDb"].ConnectionString;
}
public List<PopFormClass> GetSqlCustomersData()
{
List<PopFormClass> list = new List<PopFormClass>();
try
{
list = GetPopData("select CustomerID, CompanyName from Customers order by 1");
}
catch (Exception ex)
{
throw ex;
}
return list;
}
public List<PopFormClass> GetSqlProductsData()
{
List<PopFormClass> list = new List<PopFormClass>();
try
{
list = GetPopData("select ProductID, ProductName from Products order by 1");
}
catch (Exception ex)
{
throw ex;
}
return list;
}
public List<PopFormClass> GetSqlEmployeesData()
{
List<PopFormClass> list = new List<PopFormClass>();
try
{
list = GetPopData("select EmployeeID, LastName, FirstName from Employees order by 1");
}
catch (Exception ex)
{
throw ex;
}
return list;
}
GetPopData(string strSql)方法如下,它将会从数据库读取数据放到List<PopFormClass>:
private List<PopFormClass> GetPopData(string strSql)
{
List<PopFormClass> list = new List<PopFormClass>();
using (SqlConnection con = new SqlConnection(SqlConString))
{
con.Open();
SqlCommand com = new SqlCommand(strSql, con);
IDataReader dr = com.ExecuteReader();
while (dr.Read())
{
PopFormClass pf = new PopFormClass();
pf.ID = Convert.ToString(dr[0]);
pf.NAME = Convert.ToString(dr[1]);
list.Add(pf);
}
} return list;
}
最后是测试一下这个WCF项目是否正常工作: