在使用XPO开发过程中,发现很多很多问题,写下此文章希望能为后学者有所帮助,少走弯路,共勉。
1. a Persistent Object 持久化对象
实例中我们需要建立一个的 TitleType表 ,该表只有一个字段typename 类型名称 XPO 中需要建立的类如下
using DevExpress.Xpo;
namespace myXPO
{
public class TitleType : XPObject {
string _typeName;
[Size(50)]
public string typeName {
set { SetPropertyValue<string>("typeName", ref _typeName, value); }
get { return _typeName; }
}
public TitleType() : base() {
}
public TitleType(Session session)
: base(session)
{
}
public override void AfterConstruction() {
base.AfterConstruction();
}
}
}
从上面例子我们可以得出,该例子继承XPObject类
1.1 XPO 类比较
有四个类你可以在你的持久化类中进行继承,它们分别是XPBaseObject, XPObject, XPLiteObject and XPCustomObject. Class Name | Built-in OID key | ||
- | + | - | |
- | - | - | |
+ | + | - | |
+ | + | |
1.1 属性定义
默认设置 可读写
[Size(50)] //字段类型
public string typeName
{
set { SetPropertyValue<string>("typeName", ref _typeName, value); }
get { return _typeName; }
}
只读属性
[Persistent ]
DateTime _DateTime;
public DateTime date
{
get
{ _DateTime = DateTime.Now;
return _DateTime;
}
}
定义唯一字段
[Key(AutoGenerate = true)]
public int Oid {
get { return persistentID; }
set {
persistentID = value;
OnChanged("Oid");
}
}
1.3 生成持久性对象类
XPO为了提供为已存在的数据库生成持久性对象的功能,它提供一个可视化的向导允许你在同一时间在你的数据库中去生成一个或者多个表的持久性对象类. 它仅仅需要设置数据库连接设置,选择目标表和列,向导会自动帮你把选择的表生成持久性对象.
操作指南
1 在解决方案,选择 添加à新建项… 菜单选择如下:
2 选择 Persistent Classes 项目,然后点击添加
3 在向导中,你设置好连接的数据连接语句和选择目标表
4. 在下面步骤中,向导展示一系列的表供选择. 一个表中由多个列组成的关键字段是不支持XPO的,所有建表同时需要注意该问题
5. 点击完成后,生成的类如我们一开头展示类类似,这里不在贴上代码.
2. 数据库连接
2.1 Session
默认情况下,XPO使用MS Access OLEDB 连接引擎,创建的数据库名与你的项目名是一样,它放置于你的项目文件夹内. 如果数据库不存在,XPO会自动创建它. 你可以通过设置Session.DefaultSession.ConnectionString = "";
2.2 自定义的Session
或者你自己建立自己的Session来实现.建立一个Session 不会自动连接数据存储,为了连接特定的数据库,你需要覆盖默认方法,你需要指定连接的方法,Session.ConnectionString 或者 Session.Connection属性 . 例如:
DBSession.ConnectionString = sql; //连接字符串
DBSession.AutoCreateOption = evExpress.Xpo.DB.AutoCreateOption.SchemaOnly;
3. 数据展示
XPO 提供了大约有3个描述对象的组件,它们分别是XPOCollection ,XPDataView,XPView
3.1 XPOCollection
在XPO的应用中,XPOCollection 提供一个集合的对象,你可以把该集合对象从数据存储中获取并将其绑定于UI 控件.
XPCollection collection = new XPCollection(typeof(TitleType));
this.gridView1.DataSource = xpCollection1;
效果如下:
3.2 XPView
它规定只能使用于展示数据. 它可以从对象模型中去获取独立联合的数据计算和聚合数据
view.Properties.AddRange(new ViewProperty[] {
new ViewProperty("typeName ", SortDirection.None, "[typeName]", true, true)});
}.
XPView xpView = new XPView(Session.DefaultSession, typeof(TitleType));
InitViewColumns(xpView);
过滤
gridControl1.DataSource = xpView;
3.3 XPDataView
它故意仅仅去展示使用直接的SQL Queries 和stored procedures方式获得的数据. 与其他数据展示控件不同点式, 它可以不需要指定session .
xpDataView1.LoadData(resultSet);
//存储过程
SelectedData resultSet = session1ExecuteSproc(sprocName, OperandValue);
// sprocName 存储过程名称
// OperandValue 存储过程参数
XPDataView 过滤
XPDataView允许它的记录进行过滤展示给客户端,运行 XPDataView.Filter 或者XPDataView.FilterString 属性
下面的例子是过滤TypeName为abc的类别名称
排序
你可以针对XPDataView的列值去排序,应用XPdataView.Sorting属性去完成. 下面例中针对typeName列进行倒叙排序.
sortCollection.Add(new SortProperty("typeName", SortingDirection.Descending));
xpDataView1.Sorting = sortCollection;