Silverlight实例教程7:Silverlight传递DataTable解决方案
我们都知道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; }
}
我在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; }
}
精彩图集
精彩文章