ComponentOne Information

ComponentOne Studio/Wijmo/Xuniの最新情報を公開中

ナレッジベース更新情報(2017/11/13~11/17)

以下の7文書を追加・更新しました。

不具合登録情報(2017/11/13~11/17)

Wijmo 5
Studio for ASP.NET MVC
Studio for WPF
Studio for ASP.NET Web Forms
Studio for WinForms

Realm Databaseを使用してCRUDアプリを作成(前編)

Realm Databaseを使ってCRUDを実装したシンプルなXamarin.Formsアプリを作ってみます。今回は前編としてCRUDのデータの作成(CREATE)と表示(READ)に該当する部分を作成します。データの表示にはComponentOne Studio for Xamarin(以下、C1 Xamarin)のFlexGridを使用します。

Realm Databaseとは?

Realm DatabaseはSQLiteと同じくローカルデータベースです。このデータベースは近年モバイルアプリをはじめてとして様々なアプリケーションで採用が進んでいます。Realm Databaseを使うメリットについてはオープンソース&クロスプラットフォームである、SQLiteより処理が高速である、使い始めるのが簡単など色々と挙げられます。詳細については公式サイトをご覧ください。

realm.io

以下に作成手順を解説します。

続きを読む

技術カンファレンスの舞台裏を公開

2017年10月に開催した技術カンファレンス「ECHO Tokyo 2017」(以下、ECHO)には、多くの方にご来場いただきました。
今回のテーマにした「XAML」は広く利用される技術です。参加できなかった皆さんも含め、内容はレポート記事でご確認いただけると幸いです。

レポート記事はメインテーマに沿ってご講演いただいた各セッションを取り上げた内容ですが、これとは違った角度からの記事がこのたび公開となりました。gihyo.jpにて、テーマを「XAML」に設定した背景を、仕掛け人たちへのインタビューを交えて紹介しています。ECHOの舞台裏ともいえる内容です。

ECHOのメッセージは Using <XAML>

ECHOはXAML技術を利用するエンジニアを増やすことが目的でした。それに賛同してくださる人々を集め、開催することができたのは、その考え方が正しい方向だったことへの証明でもあります。 私たちの考えを含めてXAMLの魅力を感じていただき、それがより多くの方に伝わることを願っています。

f:id:ComponentOne_JP:20171114160600j:plain
Using XAML

ナレッジベース更新情報(2017/11/6~11/10)

以下の8文書を追加・更新しました。

Wijmo 5

Studio for WinForms

不具合登録情報(2017/11/6~11/10)

Wijmo 5
Studio for WinForms



ComponentOne製品のナレッジベースは随時更新中です。
≫ ナレッジベースはこちら

「HTML5 Enterpirse Application Conference 2017」を開催

f:id:ComponentOne_JP:20171109095917j:plain

HTML5 Enterpirse Application Conference 2017
〜HTML5で実現する業務アプリケーションのモダン化&マルチデバイス化〜

HTML5を使用した業務アプリケーション開発の最先端にいる各社が協力し、HTML5によるモダナイゼーションやマルチデバイス対応に関する最新動向や開発事例をご紹介するカンファレンスを開催します。

カンファレンスではグレープシティも登壇し、最新のJavaScriptライブラリ「Wijmo」と「SpreadJS」の導入事例を参考としながら、昨今に見られるシステム開発の動向と開発スタイルについてご紹介する予定です。

当日は、基調講演でお話いただく「日経コンピュータ」元編集長の谷島 宣之様の著書プレゼントもございますので、 ぜひご来場ください!

会期 2017年12月6日(水)14:00~17:00 (受付開始 13:40)
共催 アシアル株式会社、グレープシティ株式会社、新日鉄住金ソリューションズ株式会社、株式会社スタイルズ
会場 秋葉原UDX
費用 無料(事前登録制)
定員 100名

≫イベントの詳細・お申し込みはこちら≪

FlexGridで複数行テキストのコピー&貼り付けを考慮する

ComponentOne Studio for WPF の C1FlexGrid コントロールでは、クリップボードへのコピーやクリップボードからの貼り付けがサポートされています。セル範囲を選択し、[CTRL+C] キーを押下すると、選択されたセル範囲内のデータ値がクリップボード内にコピーされます。このとき、列の区切りは Tab(0x09) 、行の区切りは CrLf(0x0d、0x0a) の各制御文字に置き換わります。

このときに問題になるのが、セル内に複数行テキストが含まれている場合です。複数行テキストが含まれるセルの値をコピーし、別のセルに貼り付けようとすると、テキスト内の改行がセル範囲の行区切りとみなされてしまうため、複数行テキスト内の改行が正しく反映されません。

f:id:ComponentOne_JP:20171107111532p:plain
単一セル内の複数行テキストは複数のセルに展開されて貼り付けられます

複数行テキストを含むセルのコピー&貼り付けを考慮する場合は、クリップボード操作をコーディング上で処理する必要があります。

実装方法

実装は簡単です。C1FlexGrid コントロールの PreviewKeyDown イベントにて [CTRL+C]、[CTRL+V] キーの押下を検出し、既定のクリップボード処理に代わるカスタマイズされた方法によるテキストのコピーおよび貼り付け処理を行うようにします。

実際にサンプルを作成して確認してみましょう。以下は、検証用の C# プロジェクトの作成手順です。

1.新規プロジェクトを作成し、Xamlデザイナー上で MainWindow.xaml のウィンドウ上に C1FlexGrid コントロールを配置したら、以下のように設定します。

<c1:C1FlexGrid x:Name="fg" Margin="10"
  AutoGenerateColumns="False"
  ClipboardCopyMode="ExcludeHeader"
  ClipboardPasteMode="ExcludeHeader"
  Loaded="fg_Loaded"
  PreviewKeyDown="fg_PreviewKeyDown"/>

これにより、既定のクリップボード操作が許可されます。また、fg_Loadedfg_PreviewKeyDown が自動生成されます。

2.MainWindow.xaml.cs を開き、コピーするデータを一時的に退避するための変数を定義します。

/// <summary>
/// MainWindow.xaml の相互作用ロジック
/// </summary>
public partial class MainWindow : Window
{
  List<List<string>> copyData = null; // この行を追加

3.fg_Loaded 内に、以下のコードを追加します。これは、グリッドの行・列を初期化し、テストデータを各セルに登録するための処理となります。

for (int colIndex = 0; colIndex < 4; colIndex++)
  fg.Columns.Add(new Column());

for (int rowIndex = 0; rowIndex < 10; rowIndex++)
{
  fg.Rows.Add(new Row());
  for (int colIndex = 0; colIndex < 2; colIndex++)
    fg[rowIndex, colIndex] = 
      string.Format("複数行\rテキスト\r[{0}, {1}]", rowIndex, colIndex);
}

fg.AutoSizeRows(0, fg.Rows.Count - 1, 0);

4.fg_PreviewKeyDown 内に、以下のコードを追加します。これは、指定されたセル範囲のデータを一時的に copyData 変数に退避するための処理となります。

if (e.Key == Key.C && Keyboard.Modifiers == ModifierKeys.Control)
{
  if (copyData == null)
  copyData = new List<List<string>>();

  copyData.Clear();
  for (int rowIndex = fg.Selection.TopRow;
    rowIndex <= fg.Selection.BottomRow;
    rowIndex++)
  {
    copyData.Add(new List<string>());
    for (int colIndex = fg.Selection.LeftColumn;
      colIndex <= fg.Selection.RightColumn; colIndex++)
      copyData[rowIndex - fg.Selection.TopRow].Add(
        fg[rowIndex, colIndex].ToString());
  }
}

この処理により、選択された範囲のデータが copyData に退避されます。

なおこのとき、e.Handled 引数は False のままなので、既定のクリップボードへのコピー処理はキャンセルされずに実行されます。そのため、メモ帳などの外部アプリに対するクリップボードからの貼り付け処理は引き続き利用できます。

5.続けて、以下のコードを追加します。これは、現在のセル位置を開始位置として、退避されたデータセル範囲に設定するための処理となります。

else if (e.Key == Key.V && Keyboard.Modifiers == ModifierKeys.Control)
{
  if (copyData == null)
    return;

  e.Handled = true;
  for (int rowIndex = 0;
    rowIndex < copyData.Count && fg.Selection.Row + rowIndex < fg.Rows.Count;
    rowIndex++)
  {
    for (int colIndex = 0;
      colIndex < copyData[rowIndex].Count &&
        fg.Selection.Column + colIndex < fg.Columns.Count;
      colIndex++)
    {
      fg[fg.Selection.Row + rowIndex, fg.Selection.Column + colIndex] = 
        copyData[rowIndex][colIndex];
    }
  }
}

これにより、copyData に退避されていたデータが各セルに設定されます。

なおこのとき、e.Handled 引数が True に設定されるため、既定のクリップボードからの貼り付け処理はキャンセルされる点にご注意ください。

実行してみる

では、プロジェクトを実行して動作を確認してみましょう。プロジェクトを起動したら、セル範囲を選択して [CTRL+C] キーを押下します。それから別のセルを選択し、[CTRL+V] キーを押下してみてください。正しく処理されていれば、データ内の改行を考慮してセルの値の貼り付けが行われます。

f:id:ComponentOne_JP:20171107115853p:plain
データ内の改行を考慮して貼り付けが行われます

上記で作成したサンプルは以下で公開しています。ご利用にあたっては、ComponentOne Studio for WPFの製品版もしくはトライアル版が必要です。

≫ ダウンロード(zipファイル:12KB)
≫ トライアル版はこちらから

「グレープシティ Web TECH FORUM 2017 in 大阪」開催のお知らせ

f:id:ComponentOne_JP:20171107113642p:plain

グレープシティ、エス・ビー・エスが最新のWeb開発について語ります

我々が普段利用している、メールやマップといったWebサービスは、ユーザーが意識をしなくても、常にバージョンアップが繰り返されています。

多くのユーザーに対しバージョンアップをインストール不要で適用できるのは、Webシステム最大のメリットと言えます。

エンタープライズシステムにおいてもビジネスの変化に常に対応していくことが求められており、Webシステムへの注目度は高まってきています。

昨今のWebシステムは、従来のデスクトップアプリと比べても遜色のない操作性が実現できており、それを実現するために欠かせない技術が「JavaScript」です。

今回のセミナーでは、このJavaScript技術についてお話します。
メインスピーカーは、グレープシティの開発支援ツールを使いこなしているパートナー企業、エス・ビー・エス株式会社の開発エキスパート。JavaScriptのフレームワークやライブラリがここまで重要度を増してきた背景を分析しつつ、今Webシステムを開発するべき理由、現行システムの移行方法、そしてJavaScriptライブラリの必要性について、考え方から実践まで、現場での経験を元に徹底解説します。

クライアントアプリの移行先に迷われている方だけでなく、Webアプリを新規で開発予定の方にもおすすめのセミナーです。ぜひご参加ください。

 

≫申込みはこちら≪

 

会期 :2017年11月22日(水) 13:30~17:00

主催 :グレープシティ株式会社

会場 :TSURUYAホール 本館8F 第1会議室

<アクセス>
大阪市営地下鉄 御堂筋線・中央線 本町駅下車 7番出口すぐ

費用 :無料(事前登録制)

ComponentOne