龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > web编程 > asp.net编程 >

Silverlight实例教程7:Silverlight传递DataTable解决方案(2)

时间:2009-12-21 11:47来源:未知 作者:admin 点击:
分享到:
MetaData.cs 元数据定义 Code /// summary /// 元数据信息 /// /summary [DataContract] public class MetaData : XCenter.Framework.Public.Core.ICloneable { #region prop //字段列表 private List
  MetaData.cs 元数据定义
Code
/// <summary>
    /// 元数据信息
    /// </summary>
    [DataContract]
    public class MetaData : XCenter.Framework.Public.Core.ICloneable
    {
        #region prop         //字段列表
        private List<Field> fieldsList = new List<Field>();
        //名称-字段缓存
        private Dictionary<string, Field> fieldCache = null;
        private bool specialChar = false;
        private object lockObject = new object();         /// <summary>
        /// 字段列表
        /// </summary>
        [DataMember]
        public List<Field> Fields
        {
            get { return fieldsList; }
            set { fieldsList = value; }
        } ..
  DataSetData.cs 数据集定义
  Code
/// <summary>
    /// 数据集用于前后台传递数据
    /// </summary>
    [DataContract]
    public class DataSetData : XCenter.Framework.Public.Core.ICloneable
    {
        #region prop         private MetaData md;
        private List<List<object>> datas = new List<List<object>>();         /// <summary>
        /// 元数据信息
        /// </summary>
        [DataMember]
        public MetaData MetaData
        {
            get { return md; }
            set { md = value; }
        }
 Field对应于DataTable中的列信息。MetaData主要就是对Field进行封装,并实现一些公共的操作方法。DataSetData封装了MetaData并用List<List<object>>存放具体数据。
  这里要说明一下,由于从DataTable取出的实际数据都是基本类型(int,string,byte[]...)等WCF中可以直接传递的数据。所以这里用List<List<object>>传递数据不会有问题。如果List中有用户定义类型,不在ServiceKnownType中事先声明,那么Silverlight端反序列化时会报错。
  以IQEObjectStorage这个WCF服务接口的GetData方法可以看出具体的WCF声明:
          [OperationContract]
        DSDReturnDataVO GetData(QueryBaseVO qbd, ServiceContext context);
  这里的DSDReturnDataVO只是XCenter中为所有能返回DataSetData的服务定义的统一的返回值。读者可以直接返回DataSetData。这个服务其实就是手工Sql设计的取数方法。其内部处理逻辑是将查询模型解析成Sql送到数据库执行并取得DataTable组装DataSetData。这里的具体逻辑我们暂时不关心。
  下面看看SL端对传来的DataSetData的处理过程。我们可以看QueryMain.xaml.cs的service_GetDataCompleted方法,这个方法最初是由工具栏中的运行查询按钮触发。
精彩图集

赞助商链接