微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

silverlight获取ado.net数据源

现在做一个项目,在数据库和表名以及列名都不确定的情况下,返回查询的数据集。这在ASP.NET或者C/S模式很容易实现。但是在现有的SL+WCF技术下是不能实现的,首先返回值就不好确定,WCF的返回值类型必须是确定的。比较返回值为Object类型就不可以。而且返回DataTable和DataSet又不可以。在客户接收不到数据,返回的数据类型为Object。那么我们可以通过普通的方式取得数据集,然后把数据集转换为XML格式的字符串,然后在客户端把字符串解析为类型DataSet数据集。

  其实把DataSet数据集转化为XML格式的字符串以及把XML格式的字符串解析为DataSet数据集的工作,已经有加拿大的同行把业务逻辑封装好了,我们只要调用其中的方法就可以了,你也可以反编译看看老外的代码,老外的原文地址:http://silverlightdataset.net/silverlightdataset/Default.aspx,其中用到的组件为Silverlight.DataSetConnector.dll(服务端使用)和Silverlight.DataSet.dll(用于客户端)

 

我们使用原生态的ADO.NET进行数据访问,你也可以替代成你自己的数据Provider.

   1:      [EnableClientAccess()]
   2:      public class CustomerDomainService : DomainService
   3:      {
   4:          public List<Item> GetItemsFromDatabase()
   5:          {
   6:              sqlConnection sqlConnection = new sqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["MainDb"].ToString());
   7:              DataSet objSet = new DataSet();
   8:              sqlCommand sqlCommand = new sqlCommand();
   9:              sqlCommand.Connection = sqlConnection;
  10:              sqlCommand.CommandText = "Select * FROM tblItem";
  11:              sqlDataAdapter sqlDataAdapter = new sqlDataAdapter();
  12:              sqlDataAdapter.SelectCommand = sqlCommand;
  13:              sqlDataAdapter.Fill(objSet);
  14:   
  15:              List<Item> lstResult = new List<Item>();
  16:              Item objEmployee;
  17:   
  18:              if (objSet.Tables.Count > 0)
  19:              {
  20:                  foreach (DaTarow dr in objSet.Tables[0].Rows)
  21:                  {
  22:                      objEmployee = new Item();
  23:                      objEmployee.Quantity = Convert.ToInt32(dr["Quantity"]);
  24:                      objEmployee.ItemDescription = dr["ItemDescription"].ToString();
  25:                      objEmployee.ItemNumber = Convert.ToInt32(dr["ItemNumber"]);
  26:                      lstResult.Add(objEmployee);
  27:                  }
  28:              }
  29:              return lstResult;
  30:          }
  31:      }

 

 

 但是SL的DataGrid不接受DATASET或者DataTable类型的数据源的,他接受的是实休集合。所以我们就需要扩展SL的DataGrid,使其变为像ASP.NET中的DataView那样,有DataSource属性,有DataBind方法。这个有源代码可以下载,你可以根据自己的需要再来扩展。下载地址为:http://slbindabledatagrid.codeplex.com/,其实这个方法的核心还是要把数据集转化为List类型的集合,然后这个结果再赋值给DataGrid

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐