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

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

时间:2009-12-21 11:47来源:未知 作者:admin 点击:
分享到:
我们都知道Silverlight端不能直接使用DataTable,DataSet等数据存储。但某些情况下实体类的传递方式根本无法满足我们的需求。举个例子,在进行查询建模时我们根本不知道用户从哪张表选择
  我们都知道Silverlight端不能直接使用DataTable,DataSet等数据存储。但某些情况下实体类的传递方式根本无法满足我们的需求。举个例子,在进行查询建模时我们根本不知道用户从哪张表选择字段,更有甚者我们还可能不知道用户从哪个数据源选择表(这个问题我通过SmartDAL的特性加以支持)。这种情况下我们无法建立实体类定义。这也是我使用C#,Java这些静态语言感觉最不爽的地方。动态语言中这种处理相当简单。
  我在XCenter中的实现思想就是Server端(WCF实现端)将SmartDAL取出的DataTable分为数据和元数据两部分存储并通过WCF端进行传递。在Silverlight端根据元数据信息动态生成并编译出动态实体类实例。并填充真实的待绑定集合。由于在Silverlight端动态生成并编译实体类的过程比较耗时所以在Silverlight端建立了缓存。并用元数据中的唯一Id进行标识。
  元数据定义在XCenter.Framework.Public.DataSetData命名空间。主要结构就是3个类。
  Field.cs 字段信息(部分定义)
Silverlight实现查询建模(八) 传递DataTable解决方案   我们都知道Silverlight端不能直接使用DataTable,DataSet等数据存储。但某些情况下实体类的传递方式根本无法满足我们的需求。举个例子,在进行查询建模时我们根本不知道用户从哪张表选择字段,更有甚者我们还可能不知道用户从哪个数据源选择表(这个问题我通过SmartDAL的特性加以支持)。这种情况下我们无法建立实体类定义。这也是我使用C#,Java这些静态语言感觉最不爽的地方。动态语言中这种处理相当简单。
  我在XCenter中的实现思想就是Server端(WCF实现端)将SmartDAL取出的DataTable分为数据和元数据两部分存储并通过WCF端进行传递。在Silverlight端根据元数据信息动态生成并编译出动态实体类实例。并填充真实的待绑定集合。由于在Silverlight端动态生成并编译实体类的过程比较耗时所以在Silverlight端建立了缓存。并用元数据中的唯一Id进行标识。
  元数据定义在XCenter.Framework.Public.DataSetData命名空间。主要结构就是3个类。
  Field.cs 字段信息(部分定义)
Code
/// <summary>
    /// 字段信息
    /// </summary>
    [DataContract]
    public class Field:XCenter.Framework.Public.Core.ICloneable
    {         public Field()
        {
        }         #region props         private string dataType;
        private string caption;
        private string fieldName;
        //private string note;
        private string expression;
        //private int precision;
        //private int scale;
        private int maxLength;
        private bool isRequire;
        private bool isKey;
        private bool isReadOnly;         /// <summary>
        /// 数据类型
        /// </summary>
        [DataMember]
        public string DataType
        {
            get { return dataType; }
            set { dataType = value; }
        }         /// <summary>
        /// 显示名称
        /// </summary>
        [DataMember]
        public string Caption
        {
            get { return caption; }
            set { caption = value; }
        }
精彩图集

赞助商链接