これは、v2010の新機能ではないのですが、v2009 vol.3にてXPOに以下のクラスが追加されています。
DevExpress.Xpo.DB.InMemoryDataStore
名前が示す通り、インメモリで利用できるデータストアです。
今までは、DataSetDataStoreと呼ばれていたみたいです。
通常、Xpoではデータベースに接続して処理を行う事がほとんどですが
たまに、インメモリのデータストアがあれば便利な時があります。
そのような時に手軽に利用出来るデータストアとなります。
使い方は、簡単で以下のようにして設定します。
XpoDefault.DataLayer = new SimpleDataLayer(new InMemoryDataStore());
DevExpressのサイトのオンラインドキュメント上は、InMemoryDataStoreのコンストラクタに
DataSetを渡すような記述がありますが、v2010 vol1の版ではそのようなコンストラクタは定義されてません。
そのまま、デフォルトコンストラクタを呼んでしまうのが一番簡単です。
後は、通常のXpoと同じように利用出来ます。
以下のサンプルでは、WinFormのフォームがありその中にGridControlとボタンとMemoEditが
予め配置されています。ボタンが押下されるとデータストアの内容をXMLに一旦出力し、
その後MemoEditに反映させています。
これを見る事で、InMemoryDataStoreの内部にちゃんとデータが登録されていることが分かります。
using System; using System.Drawing; using System.IO; using System.Windows.Forms; using System.Xml; using DevExpress.LookAndFeel; using DevExpress.Skins; using DevExpress.Utils; using DevExpress.Xpo; using DevExpress.Xpo.DB; using DevExpress.XtraEditors; namespace InMemoryDataStoreSample { public partial class XtraForm1 : XtraForm { static InMemoryDataStore _dataStore; public XtraForm1() { InitializeComponent(); } private void XtraForm1_Load(object sender, EventArgs e) { for (int i = 0; i < 1000; i++) { Session.DefaultSession.Save(new MyData{ Id = i.ToString(), Name = i.ToString(), Age = i }); } gridView1.OptionsBehavior.AutoPopulateColumns = true; gridControl1.DataSource = new XPCollection<MyData>(); } [STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); // // アプリ全体の初期設定. // UserLookAndFeel.Default.SkinName = "Black"; SkinManager.EnableFormSkinsIfNotVista(); AppearanceObject.DefaultFont = new Font("Meiryo UI", 9.75f); // // InMemoryDataStoreをセットアップ. // _dataStore = new InMemoryDataStore(); XpoDefault.DataLayer = new SimpleDataLayer(_dataStore); Application.Run(new XtraForm1()); } private void simpleButton1_Click(object sender, EventArgs e) { // // 現在のXPOデータレイヤーでのデータをXMLに出力. // using (StringWriter writer = new StringWriter()) { using (XmlWriter xmlWriter = XmlWriter.Create(writer, new XmlWriterSettings{ Indent = true })) { _dataStore.WriteXml(xmlWriter); } memoEdit1.EditValue = writer.ToString(); } } } class MyData : XPLiteObject { [Key] public string Id { get; set; } public string Name { get; set; } public int Age { get; set; } } }