在前面的Silverlight实战示例7(兼集合属性的妙用)系列中,我们模拟了一个复杂实体的处理,这个复杂实体类似于aspnet的Datatable,但不是很完全,这里我们增加一些代码,使得这种模拟更纯粹:
1、在DynamicDataField里增加public DynamicDataRow Row { get; set; }属性,保持对所在行的引用
2、在DynamicDataRow中增加public DynamicDataTable Table { get; set; }属性,保持对表的引用
3、在DynamicDataTable里增加public eventPropertyChangedEventHandler PropertyChanged;(可根据自己需要定义自己的委托与事件)
4、在DynamicDataField.Shared.cs里,修改成如下:
public partial class DynamicDataField
{
public object Value
{
get
{
if (this.DataType == "datatime")
{
return this.DTValue;
}
if (this.DataType == "byte[]")
{
return this.ByteArrayValue;
}
//在这里可以做参照处理接口.
return this.StrValue;
}
set
{
if (this.DataType == "datatime")
{
DTValue = (DateTime) value;
}
if (this.DataType == "byte[]")
{
this.ByteArrayValue =(byte[])value;
}
this.StrValue = value.ToString();
//注意这里调用表的事件.
if (this.Row.Table.PropertyChanged != null)
{
this.Row.Table.PropertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(this.FieldName));
}
}
}
}
5、构造表的时候注意将实体关系赋值。
6、客户端获取数据时将事件关联上
/// <summary>
/// 数据加载.
/// </summary>
private void LoadData()
{
theS.GetDynamicDataTable("select * from EmployeeInfo ", op =>
{
if (op.HasError == false)
{
DataSource = op.Value.Rows;
DataTable = op.Value;
//关联事件
DataTable.PropertyChanged += new PropertyChangedEventHandler(DataFieldChanged);
}
else
{
MessageBox.Show(op.ErrorMsg);
}
}, null);
}
private void DataFieldChanged(object sender, PropertyChangedEventArgs e)
{
//...................事件处理
}
这样我们的DynamicDataTable就是一个简单的类似DataTable的东西。增加事件的好处就是可以免除很多UI事件的处理,从而使得MVVM模式更加容易.
分享到:
相关推荐
在展现表格时,期待单元格的宽度能适应行记录中的最长值,此方法解决获取Datatable内各字段在行记录中的最长值的问题,用于设置列宽,从而放弃浏览器的自适应宽度的鸡肋方法。
解决 datatable 不按字段顺序 绑定 datagridview的问题
完美的数据报表reportViewer动态绑定DataTable数据, 1.创建窗体form1 2.拖入reportViewer1 3.解决方案中添加-数据-数据集(dataset1)-工具栏中拖入DataTable到xsd界面-添加列 DataColumn1-DataColumn4 4.解决方案...
对DataTable分页获取数据
彻底告别手动写SQL语句,一劳永逸解决数据库字段变更后...根据DataTable中数据行记录改变的状态,动态生成SQL语句, 如果一个表中字段上百个,在只改了其中两三个字段时,则生成的SQL语句就只会含有这修改内容的字段
个人宝贵经验总结:修改DataTable的某一行某一列的值
动态创建datatable动态创建datatable动态创建datatable动态创建datatable动态创建datatable
DataTable缓存数据操作 DataTable 缓存数据操作
主要介绍了C# DataTable中查询指定字段名称的数据,本文直接给出实例代码,简单易懂,需要的朋友可以参考下
举例讲解了数据控件DataTable的数据记录操作,当还没有做datatable.acceptChangs()操作之前对数据行发生增删改时,可取得修改前后的值。具体可看文档中的距离代码。可以直接新建Windows控制项目进行代码运行。
DataTable动态行转列类,设置需要装置的列名和数据列后,可以动态将DataTable的列进行转置。
} } //对应数据库表: //User //字段:ID、Name 那么你也许需要编写将DataTable 转换为实体对象的方法,便利DataTable.Rows 获得并填充。。 下面是我写的一个通用方法,分享+记录,便于日后直接Copy ~ 代码如下:...
datatable数据导出excel,datatable数据导出excel
根据DataTable中数据行记录改变的状态,动态生成SQL语句, 如果一个表中字段上百个,在只改了其中两三个字段时,则生成的SQL语句就只会含有这修改内容的字段, 有了这一个函数,从此彻底告别手动写SQL语句更新到...
使用 DataTable就需要了解以下组件 DataColumn,描述数据表中的列。 DataRow,包含数据表中行的数据。 DataCell,包含数据表中单个单元格的数据。 PaginatedDataTable,它显示数据表中的部分数据,并提供对...
从Excel_导入数据到DataTable
到附属点附属点到附属点发送到附属点发送到撒旦发啊
快速动态构建DataTable代码,不需要编写过多的代码来实现的。
函数JoinDataTable主要功能是,将两个DataTable变量通过联结的字段进行 Inner Join 或 Left Join 的联结,如果2个变量的联结字段相同,则删除其中1个字段,如果不同则保留。