Help us understand the problem. What is going on with this article?

Project SienaでCollectionを扱う

More than 5 years have passed since last update.

さて、引き続きProject Sienaをいじってみている高見知英です。
今回はCollectionというものを使ってみました。Project Sienaのコレクションはアプリケーション内で自由にレコードの追加・削除が可能なリストのこと。これを使うことで、任意のデータを追加・削除することが出来るカタログアプリが作成出来ます。

とりあえずサクッと作成方法。自分もあちこち迷いながら作ったので余計なアクションがあるかもしれない。

元ネタ

以下、実装方法

コレクションの元になるExcelファイルを用意する

まずは、作成したいコレクションの列名と同じ列を定義したExcelファイルを用意します。このExcelファイルをデータソースとして読み込ませ、それを元にコレクションテーブルを作る といった感じのようです。

たとえば、名前・ジャンル・詳細 という三つの列を持ったコレクションを作成させたい場合、下のような形のExcelファイルを作る必要がある
Excelファイルのイメージ
Excelファイル自体はコレクションの定義に用いるだけなので、データは空っぽで問題なし。
なお、表自体はProject Sienaで扱うため、「テーブル」として定義しておきます。

データソースとしてExcelファイルを読み込む

データソースとしてExcelファイルを読み込みます。ここでは特に何の工夫も必要ありません。
データソースとしてExcelファイルを読み込む

データソースに値を入力する画面を作る

データソースに値を入力するためのエディタ画面を作ります。
ここで、データソースを保存するボタンなどのイベントハンドラに、Collect()メソッドを挿入します。
Collectメソッドを追加
次に出る画面で、Collection1の元データとして、テーブル1(Excelファイルのデータ)を指定します
Excelファイルを元に、コレクションを作る
すると、コレクションができあがります。Collect()メソッドをCollect(Collection1, {名前:書き込みたい文字列,ジャンル:書き込みたい文字列,詳細,書き込みたい文字列})と言う風に書き換えて、画面に書いた文字列がコレクション内に書き込まれるようにします。
Collectメソッドの書き換え
これでコレクションに値が保存されます。

コレクションの表示

試しにギャラリーを一つおいた画面を配置し、そこにCollection1を表示させてみましょう。
Collection1を表示するギャラリーを作る
するとコレクションの中身が正常に表示されるのが確認できます。

コレクションの値の削除

コレクションの値を削除するには、削除したいレコードを指定してRemove()メソッドを呼び出します。ギャラリーでコレクションを表示している場合、Remove(Collection1, ThisItem)と書けます。
Remove()メソッドを呼び出す

コレクションの保存と読み出し

コレクションの中身は、セッション限りのデータです。そのため、アプリケーションを終了させるとデータが消滅してしまいます。それが嫌な場合、SaveData()およびLoadData()メソッドを使ってデータを読み書きします。

保存は、SaveData(Collection1, "lockseeds")のような感じで、読み込みはCollect(Collection1, LoadData("lockseeds"))のような感じでいけます。

保存の場合

こちらは普通に、メソッドを呼び出すだけ。
SaveData()

保存されたデータは、「C:\Users(ユーザー名)\AppData\Local\Packages(アプリケーション名)\LocalState」
に保存されます。Project Sienaで作成したアプリケーションのアプリケーション名は、「Publishしたときの名称ランダムな文字列」になるようです(Project Siena上から実行した場合は、「C:\Users(ユーザー名)\AppData\Local\Packages\Microsoft.MicrosoftProjectSiena(ランダムな文字列)\LocalState」)

読み込みの場合

次に読み込み。こちらはLoadData()ではコレクションのデータを取り出すだけなので、それをCollect()メソッドでコレクションに書き込んであげます。
また、読み込み時には読み込み直前のデータも残っていますので、いったんClear()メソッドでコレクションを空にしておくと良いでしょう。
LoadData()
とりあえずこんな感じのようです。

ひとまず、これを実際に実装してみた例が以下の通りです。興味がある方はご覧ください。
* Collect.siena

TakamiChie
NPO法人 まちづくりエージェント SIDE BEACH CITY.理事。フリーランスのプログラマ。横浜・横須賀でIT勉強会の主催などをやってます。
https://onpu-tamago.net/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした