FlexGrid for WPF/Silverlight

Size: px
Start display at page:

Download "FlexGrid for WPF/Silverlight"

Transcription

1 FlexGrid for WPF 更 新 グレープシティ 株 式 会 社

2 1 目 次 1. 目 次 1-4 製 品 の 概 要 5 ComponentOne Studio for WPF/Silverlight のヘルプ 5 XAML クイックレファレンス 6 C1FlexGrid の 追 加 7 グリッドへの 挿 入 8-9 アンバウンドモード 基 本 操 作 12 列 12 列 のデータ 型 を 設 定 する 列 の 書 式 を 設 定 する 列 幅 を 設 定 する 列 幅 の 変 更 を 許 可 する 列 幅 をデータにあわせて 調 整 する 16 列 幅 の 最 小 値 / 最 大 値 を 設 定 する 列 ヘッダを 設 定 する 列 の 移 動 を 許 可 する 列 を 固 定 する 非 連 結 列 を 追 加 する 行 23 行 を 追 加 する 行 を 削 除 する 新 規 追 加 行 を 表 示 する 行 の 高 さを 設 定 する 行 ヘッダを 設 定 する 行 番 号 を 表 示 する 行 を 固 定 する セル 33 セルの 値 を 設 定 する セル( 範 囲 )の 値 をクリアする チェックボックスを 表 示 する Copyright GrapeCity inc. All rights reserved.

3 セルに 画 像 を 表 示 する セルのユーザーデータをツールチップに 表 示 コンテキストメニューを 表 示 する 複 数 セルの 行 および 列 ヘッダ 選 択 47 選 択 範 囲 と 選 択 モード 選 択 範 囲 の 取 得 コードを 使 用 したセルおよびオブジェクトの 選 択 選 択 範 囲 の 表 示 のカスタマイズ 選 択 モードを 設 定 する セルを 選 択 する セルを 選 択 する 57 Enterキーで 次 のセルを 選 択 する クリックされたセルを 取 得 する 右 クリックでセルを 選 択 する 編 集 機 能 60 編 集 を 許 可 する エディタをカスタマイズする 編 集 データをチェックする セル 編 集 時 の 改 行 を 許 可 する IMEモードを 切 り 替 える Enterキーで 編 集 を 開 始 する 矢 印 キーで 編 集 を 終 了 させない ダブルクリック 時 にテキストを 選 択 状 態 にする 常 時 入 力 モードにする オートコンプリートとマップされた 列 データマップされた 列 74 カスタムエディタの 使 用 エディタの 設 定 75 スタイル 75 セルのスタイルを 設 定 する 条 件 付 き 書 式 を 設 定 する ボタン 77 2 Copyright GrapeCity inc. All rights reserved.

4 ボタンを 表 示 する 編 集 ボタンを 表 示 する 削 除 ボタンを 表 示 する グループ 化 グループ 化 を 実 行 する 82 データのグループ 化 (ICollectionView を 使 用 ) C1FlexGridGroupPanel を 使 用 してグループ 領 域 を 表 示 する 85 C1FlexGridGroupPanel コントロールの 使 い 方 C1FlexGridGroupPanel の 実 装 について グループ 集 計 マージ 90 セルのマージ 同 じ 値 を 持 つセルをマージする 同 じ 値 を 持 つセルをマージする( 制 限 付 き) 任 意 のセルをマージする スクロール 96 スクロールバーを 表 示 する スクロール 位 置 を 設 定 する 98 スクロールチップを 表 示 する ソート 100 ソートを 許 可 する ソートを 実 行 する 複 数 列 のソートを 実 行 する 103 ソートを 解 除 する フィルタリング 104 フィルタリングを 許 可 する フィルタリングを 適 用 する(C1FlexGridFilter を 使 用 ) フィルタリングを 適 用 する(ICollectionView を 使 用 ) グリッド 111 パフォーマンスを 改 善 する レイアウトを 復 元 する エクスポート 115 Excelファイルを 保 存 する Copyright GrapeCity inc. All rights reserved.

5 PDFファイルを 保 存 する CSVファイルを 保 存 する カスタムセル 135 コードでのカスタムセル:CellFactory クラス XAML でのカスタムセル:CellTemplate および CellEditingTemplate 136 印 刷 のサポート 137 基 本 的 な 印 刷 137 高 度 な 印 刷 レイアウトおよび 外 観 141 ComponentOne ClearStyle 技 術 141 ClearStyle の 仕 組 み 141 ClearStyle プロパティ FlexGrid for WPF と Windows フォームの 違 い 143 オブジェクトモデルの 比 較 メソッド イベント 146 ミュージックライブラリサンプル 147 グリッドの 作 成 データの 読 み 込 み グループ 化 検 索 とフィルタ 処 理 カスタムセル 株 価 情 報 サンプル 158 データの 生 成 検 索 とフィルタ 処 理 カスタムセル Copyright GrapeCity inc. All rights reserved.

6 製 品 の 概 要 FlexGrid for WPF/Silverlight ( 以 下 C1FlexGrid)は 連 結 データおよび 非 連 結 データを 表 形 式 で 表 示 したり 編 集 したり できる WPF 用 データグリッドコンポーネントです データソースと 連 結 せずにコントロール 内 でデータを 管 理 できるアンバウンド モード 複 数 行 ヘッダと 複 数 列 ヘッダ 固 定 列 と 固 定 行 行 や 列 の 並 び 替 えやサイズの 自 動 調 整 など Windows フォーム 用 の FlexGrid が 備 える 機 能 の 多 くを 継 承 グリッドコントロールに 必 要 とされる 基 本 機 能 をしっかりとサポートします 行 や 列 ヘッ ダの 文 字 色 や 背 景 色 などの 外 観 設 定 は XAML を 意 識 することなくプロパティで 設 定 できる 手 軽 さも 魅 力 のひとつです また 任 意 のセル 範 囲 をマージできるカスタムマージや セルの 編 集 時 と 表 示 時 にそれぞれほかのコントロールの 機 能 を 利 用 するこ とができるカスタムセルなども 備 え 柔 軟 なセルレイアウトと 操 作 性 の 良 いデータ 入 力 を 実 現 します ActiveX 時 代 から シンプ ルに 使 いやすく をコンセプトとした FlexGrid は WPF アプリケーションのグリッド 画 面 の 開 発 を 支 援 します C1FlexGrid によって 提 供 される 多 くの 機 能 は 製 品 に 含 まれる MainTestApplication という 名 前 のサンプルをはじめ いく つかのサンプルによって 確 認 することができます ComponentOne Studio for WPF/Silverlight のヘルプ はじめに ComponentOne Studio for WPF/Silverlight のすべてのコンポーネントで 共 通 の 使 用 方 法 については ComponentOne Studio for WPF/Silverlight ユーザーガイド を 参 照 してください 5 Copyright GrapeCity inc. All rights reserved.

7 XAML クイックレファレンス このトピックでは C1FlexGrid コントロールの 作 成 に 使 用 される XAML の 概 要 を 提 供 します 開 発 を 開 始 するには ルート 要 素 タグに c1 名 前 空 間 宣 言 を 追 加 します xmlns:c1=" 次 に FilterRow サンプルから 抜 粋 した C1FlexGrid の 例 を 示 します このサンプルの XAML は 次 のようになります XAML for WPF <Window x:class="filterrow.mainwindow" xmlns=" xmlns:x=" xmlns:c1=" Title="C1FlexGrid: FilterRow" Height="350" Width="700" WindowStartupLocation="CenterScreen" > <Grid> <Grid.RowDefinitions> <RowDefinition Height="Auto"/> <RowDefinition/> </Grid.RowDefinitions> <CheckBox Content="'%' をワイルドカードとして 使 用 " Margin="6" Click="CheckBox_Click" /> <c1:c1flexgrid Name="_flex" KeyActionTab="MoveAcross" Grid.Row="1"/> </Grid> </Window> 6 Copyright GrapeCity inc. All rights reserved.

8 C1FlexGrid の 追 加 C1FlexGrid コントロールをアプリケーションに 追 加 する 手 順 は カスタムコントロールを 追 加 する 手 順 と 同 じです この 点 に 関 し ては C1FlexGrid も 特 別 ではありません 次 に 示 すように 最 初 に C1FlexGrid アセンブリへの 参 照 をプロジェクトに 追 加 しま す 次 に XAML を 使 ってコントロールを 追 加 します XAML for WPF <Window x:class="maintestapplication.window1".. xmlns:c1=" > <Grid x:name="layoutroot"> <c1:c1flexgrid/> </Grid> </Window> 必 要 に 応 じて C1FlexGrid をコードで 追 加 することもできます WPF var fg = new C1.WPF.FlexGrid.C1FlexGrid(); LayoutRoot.Children.Add(fg); 7 Copyright GrapeCity inc. All rights reserved.

9 グリッドへの 挿 入 グリッドをアプリケーションに 追 加 したら 通 常 は 他 のほとんどのグリッドと 同 様 に ItemsSource プロパティを 使 ってグリッド に 挿 入 します ItemsSource プロパティは IEnumerable インターフェイスを 実 装 するオブジェクトを 前 提 としています しか し ほとんどの 場 合 は これより 少 し 高 いレベルで 作 業 を 行 い ICollectionView インターフェイスを 実 装 するオブジェクトを 使 用 します ICollectionView インターフェイスは WPF の 主 要 なデータ 連 結 インターフェイスです Windows フォームで は IBindlingList インターフェイスがこの 役 割 を 果 たしていました ICollectionView は 豊 富 な 機 能 を 備 えたインターフェイスです データ 項 目 を 列 挙 するだけでなく ソート 処 理 フィルタ 処 理 ページング グループ 化 などの 機 能 も 提 供 します WPF には ICollectionView インターフェイスを 実 装 する ListCollectionView クラスが 用 意 されています たとえば C1FlexGrid を 使 用 した WPF またはSilverlight アプリケーションに 顧 客 オブジェクトのリストを 表 示 するには 次 の ようなコードを 使 用 します WPF List<Customer> list = GetCustomerList(); ListCollectionView view = new ListCollectionView(list); _flexgrid.itemssource = view; Silverlight List<Customer> list = GetCustomerList(); PagedCollectionView view = new PagedCollectionView(list); _flexgrid.itemssource = view; また グリッドを 顧 客 リストに 直 接 連 結 することもできます ただし 通 常 は ICollectionView に 連 結 することをお 勧 めします これは ICollectionView がアプリケーションのデータ 構 成 を 数 多 く 保 持 していること および ICollectionView はコントロール 間 で 共 有 できるためです 多 くのコントロールを 同 じ ICollectionView オブジェクトに 連 結 した 場 合 それらはすべて 同 じビューを 表 示 します 1つのコン トロールで1つの 項 目 を 選 択 すると 他 のコントロールでも 同 じ 項 目 が 自 動 的 に 選 択 されます フィルタ 処 理 グループ 化 ソー ト 処 理 も 同 じビューに 連 結 されたすべてのコントロールで 共 有 されます 前 述 のコードを 実 行 すると グリッドによってデータソースがスキャンされ データソース 内 の 項 目 の 各 パブリックプロパティの 列 が 自 動 的 に 生 成 されます 自 動 的 に 作 成 される 列 は コードを 使 ってカスタマイズできます また 列 の 自 動 生 成 を 完 全 に 無 効 にしたり コードまたは XAML を 使 って 独 自 の 列 を 作 成 することもできます たとえば 次 の XAML では 列 の 自 動 生 成 が 無 効 に 設 定 され 代 わりに 次 のように 列 が 指 定 されます XAML for WPF <!-- C1FlexGrid で 列 を 作 成 します --> <fg:c1flexgrid x:name="_flexmlib" AutoGenerateColumns="False" > <fg:c1flexgrid.columns> <fg:column Binding="Binding Name" Header="タイトル" 8 Copyright GrapeCity inc. All rights reserved.

10 AllowDragging="False" Width="300"/> <fg:column Binding="Binding Duration" HorizontalAlignment="Right" /> <fg:column Binding="Binding Size" HorizontalAlignment="Right" /> <fg:column Binding="Binding Rating" Width="200" HorizontalAlignment ="Center" /> </fg:c1flexgrid.columns> </fg:c1flexgrid> これは Microsoft DataGrid コントロールまたは ComponentOne DataGrid コントロールを 使 って 同 じタスクを 実 行 する 際 に 使 用 する XAML に 似 ています XAML for WPF <!-- MSDataGrid(または C1DataGrid)で 列 を 作 成 します --> <ms:datagrid Name="_msSongs" AutoGenerateColumns="False" > <ms:datagrid.columns> <ms:datagridtextcolumn Binding="Binding Name" Header="タイトル" CanUserReorder="False" Width="300" /> <ms:datagridtextcolumn Binding="Binding Duration" /> <ms:datagridtextcolumn Binding="Binding Size" /> <ms:datagridtextcolumn Binding="Binding Rating" Width="200" /> </ms:datagrid.columns> </ms:datagrid> このように 構 文 は 実 質 的 に 同 じです これは グリッドの Columns コレクションへのインデクサとして 使 用 することができま す たとえば コードを 使 って レート 列 の 幅 を 300 ピクセルに 設 定 するには 次 のように 記 述 します WPF _flexmlib.columns["rating"].width = new GridLength(300); Silverlight _flexmlib.columns["rating"].width = new GridLength(300); この 構 文 は FlexGrid ユーザーならば 使 用 経 験 があるはずです これは Windows フォームバージョンのコントロールで 作 業 する 際 に 使 用 するコマンドと 同 じです 9 Copyright GrapeCity inc. All rights reserved.

11 アンバウンドモード C1FlexGrid は 非 連 結 モードで 使 用 することもできます 単 にグリッドに 行 と 列 を 追 加 する 場 合 は 次 に 示 すように 一 般 的 な インデックス 表 記 を 使 用 して セルの 値 を 取 得 または 設 定 できます WPF // 行 / 列 を 非 連 結 グリッドに 追 加 します for (int i = 0; i < 20; i++) fg.columns.add(new Column()); for (int i = 0; i < 500; i++) fg.rows.add(new Row()); // 非 連 結 グリッドにデータを 挿 入 します for (int r = 0; r < fg.rows.count; r++) for (int c = 0; c < fg.columns.count; c++) fg[r, c] = string.format("セル [0,1]", r, c); C1FlexGrid ユーザーは インデックス 表 記 についても 理 解 しておく 必 要 があります この 表 記 は このコントロールの Windows フォームバージョンで 実 装 されるものと 同 じです セルを 指 定 するには 行 インデックスと 列 インデックス 行 インデッ クスと 列 名 または 行 インデックスと Column オブジェクトを 使 用 します インデックス 表 記 は 連 結 モードと 非 連 結 モードで 機 能 します 連 結 モードでは データは データソース 内 の 項 目 から 取 得 さ れ データソース 内 の 項 目 に 適 用 されます 非 連 結 モードでは データはグリッドによって 内 部 的 に 保 存 されます C1FlexGrid コントロールの Windows フォームバージョンと WPF バージョンの 大 きな 違 いとして Windows フォームバージョ ンでは インデックスに 固 定 行 および 固 定 列 が 含 まれていました WPF バージョンでは 固 定 行 および 固 定 列 はカウントされま せん 次 の 図 に グリッドの Windows フォームバージョンで 使 用 されるセルのインデックススキームを 示 します 0,0 0,1 0,2 0,3 1,0 1,1 1,2 1,3 2,0 2,1 2,2 2,3 3,0 3,1 3,2 3,3 次 の 図 に グリッドの WPF と Silverlight バージョンで 使 用 される 新 しいセルのインデックススキームを 示 します 0,0 0,1 0,2 10 Copyright GrapeCity inc. All rights reserved.

12 1,0 1,1 1,2 2,,0 2,1 2,2 この 新 しい 表 記 では インデックスはデータ 項 目 のインデックスと 一 致 し( 行 0には 項 目 0が 含 まれます) 列 カウントは 表 示 さ れるプロパティ 数 と 一 致 するため インデックス 作 成 が 容 易 になります ただし 固 定 セルのコンテンツにアクセスするには 新 しいメソッドが 必 要 であり 標 準 のインデックススキームではアクセスでき ないという 欠 点 もあります この 新 しいメソッドは RowHeaders および ColumnHeaders と 呼 ばれる 追 加 のプロパティで 構 成 されます これらのプロパティは GridPanel 型 のオブジェクトを 返 します これは 独 自 の 行 および 列 のセットを 含 む "サブグリッド" と 見 なすことができます たとえば 次 のコードを 使 って 行 ヘッダをカスタマイズできます WPF // グリッドの 行 ヘッダを 取 得 します GridPanel rh = fg.rowheaders; // グリッドに 新 しい 固 定 列 を 追 加 します rh.columns.add(new Column()); // 行 ヘッダの 幅 およびコンテンツを 設 定 します for (int c = 0; c < rh.columns.count; c++) // この 列 の 幅 rh.columns[c].width = 60; for (int r = 0; r < rh.rows.count; r++) // このセルのコンテンツ rh[r, c] = string.format("ヘッダ 0,1", r, c); GridPanel クラスは メイングリッドと 同 じように Rows および Columns コレクションを 公 開 し 同 じインデックス 表 記 をサポー トします グリッドのコンテンツ 領 域 (スクロール 可 能 な 部 分 )を 扱 う 際 と 同 じオブジェクトモデルと 手 法 を 使 用 して 行 および 列 ヘッダをカスタマイズしてデータを 挿 入 できます 11 Copyright GrapeCity inc. All rights reserved.

13 基 本 操 作 C1FlexGrid コントロールは 連 結 グリッドや 非 連 結 グリッドを 作 成 したり セルの 結 合 列 の 集 計 カスタムセルなど ビジネス データに 必 要 なあらゆる 拡 張 機 能 を 提 供 しています また FlexGrid for WPF は Windows Forms 版 と 類 似 したオブジェクトモ デルで 構 成 されています 行 と 列 のインデックスを 作 成 する 方 法 も 類 似 しています このセクションでは C1FlexGrid コントロールの 基 本 操 作 について 説 明 します 列 列 のデータ 型 を 設 定 する 列 単 位 でデータ 型 を 設 定 するには DataType プロパティを 使 用 します デフォルトでは 列 の DataType プロパティは System.Object に 設 定 されていて 列 に 任 意 のデータ 値 を 格 納 できます 次 の 例 では いくつかの 列 に 対 してデータ 型 を 設 定 してその 結 果 を 表 示 します 実 行 例 マークアップ <c1:c1flexgrid.columns> <c1:column Header=" 列 1"/> <!--Data 型 を 設 定 します--> <c1:column Header="DateTime 型 " DataType="my:DateTime"/> <c1:column Header="Boolean 型 " DataType="my:Boolean" /> <c1:column Header="Decimal 型 " /> <c1:column Header=" 列 5"/> </c1:c1flexgrid.columns> 必 要 に 応 じて DataType プロパティをコードで 設 定 することもできます Visual Basic Public Sub New() InitializeComponent() ' 列 のDataTypeプロパティを 設 定 します c1flexgrid1.columns(1).datatype = GetType(DateTime) c1flexgrid1.columns(2).datatype = GetType([Boolean]) c1flexgrid1.columns(3).datatype = GetType([Decimal]) C# // 列 のDataTypeプロパティを 設 定 します c1flexgrid1.columns[1].datatype = typeof (DateTime); c1flexgrid1.columns[2].datatype = typeof(boolean); c1flexgrid1.columns[3].datatype = typeof(decimal); 12 Copyright GrapeCity inc. All rights reserved.

14 注 意 : GetTypeメソッドの 詳 細 は MSDNを 参 照 してください DataTypeプロパティは 設 計 時 に 設 定 することも 可 能 です 行 列 両 方 のデータ 型 が 設 定 されている 場 合 列 の 設 定 が 優 先 されます 連 結 (バウンド)モードのグリッドにおける 列 のデータ 型 は C1FlexGrid と 接 続 しているデータソースに 依 存 しま す 列 の 書 式 を 設 定 する Format プロパティは 列 内 のデータを 書 式 設 定 して 表 示 する 方 法 を 示 します 列 単 位 で 書 式 を 設 定 するには Format プロパ ティを 使 用 します 注 意 :Format プロパティを 設 定 した 列 の DataType プロパティが Int32やDouble 等 の 数 値 型 や 日 付 型 に 設 定 されている ことを 確 認 してください Format プロパティは 数 値 や 日 付 データの 書 式 を 行 うための 機 能 ですので DataType プロパティ が Object や String 等 に 設 定 されている 場 合 には 機 能 しません 実 行 例 マークアップ <c1:c1flexgrid.columns> <c1:column Header=" 列 1"/> <!-- 列 の 書 式 を 設 定 します--> <c1:column DataType="my:DateTime" Header=" 日 付 を 表 示 " Format="yyyy/MM/dd hh:mm:ss" /> <c1:column DataType="my:Boolean" Header="ブール 型 のデータ"/> <c1:column Header=" 数 値 " Format="#,##0.###"/> <c1:column Header=" 列 5"/> </c1:c1flexgrid.columns> 必 要 に 応 じて Formatをコードで 設 定 することもできます Visual Basic Public Sub New() InitializeComponent() 13 Copyright GrapeCity inc. All rights reserved.

15 ' 列 の Format property を 設 定 します c1flexgrid1.columns(1).datatype = GetType(DateTime) c1flexgrid1.columns(2).datatype = GetType([Boolean]) c1flexgrid1.columns(3).datatype = GetType([Double]) ' 列 のFormatプロパティを 設 定 します c1flexgrid1.columns(1).format = "yyyy/mm/dd hh:mm:ss" c1flexgrid1.columns(3).format = "#,##0.###" C# c1flexgrid1.columns[1].datatype = typeof(datetime); c1flexgrid1.columns[2].datatype = typeof(boolean); c1flexgrid1.columns[3].datatype = typeof(double); // 列 のFormatプロパティを 設 定 します c1flexgrid1.columns[1].format = "yyyy/mm/dd hh:mm:ss"; c1flexgrid1.columns[3].format = "#,##0.###"; 注 意 : GetType メソッドの 詳 細 は MSDNを 参 照 してください 数 値 型 日 付 型 の 書 式 指 定 についての 詳 細 は MSDNを 参 照 してください DataType プロパティは 設 計 時 に 設 定 することも 可 能 です 行 列 両 方 のデータ 型 書 式 が 設 定 されている 場 合 列 の 設 定 が 優 先 されます 連 結 (バウンド)モードのグリッドにおける 列 のデータ 型 は C1FlexGrid と 接 続 しているデータソースに 依 存 します 列 幅 を 設 定 する Width プロパティを 使 用 して 各 列 の 幅 をピクセル 単 位 で 設 定 できます デフォルト 値 は GridLength.Auto です 実 行 例 マークアップ <c1:c1flexgrid.columns> 14 Copyright GrapeCity inc. All rights reserved.

16 <c1:column Width="200" Header=" 列 1" /> <c1:column Header=" 列 2"/> <c1:column Header=" 列 3"/> <c1:column Header=" 列 4"/> <c1:column Header=" 列 5"/> </c1:c1flexgrid.columns> 必 要 に 応 じて Widthをコードで 追 加 することもできます Visual Basic Public Sub New() InitializeComponent() ' 列 の 幅 を 設 定 します c1flexgrid1.columns(1).width = New GridLength(200) C# // 列 の 幅 を 設 定 します c1flexgrid1.columns[0].width = new GridLength(200); 列 幅 の 変 更 を 許 可 する AllowResizing プロパティを 変 更 して 列 幅 をマウスで 変 更 できるかどうかを 指 定 できます 列 ヘッダの 端 をダブルクリックす ると 最 大 幅 のエントリに 合 わせて 列 が 自 動 的 にサイズ 変 更 されます また 各 列 のAllowResizing プロパティを False に 設 定 すると 特 定 列 のサイズ 変 更 を 禁 止 できます さらに C1FlexGrid.AllowResizing に AllowResize.Columns フラグ 値 を 含 めなければ Column.AllowResizingの 値 にかかわ らずすべての 列 幅 の 変 更 を 禁 止 できます 実 行 例 マークアップ <c1:c1flexgrid Name="c1FlexGrid1" AllowResizing="None"> <c1:c1flexgrid.columns> <c1:column AllowResizing="True" /> <c1:column AllowResizing="True" /> <c1:column AllowResizing="True" /> <c1:column/> <c1:column/> </c1:c1flexgrid.columns> </c1:c1flexgrid> 必 要 に 応 じて AllowResizing をコードで 設 定 することもできます Visual Basic 15 Copyright GrapeCity inc. All rights reserved.

17 Public Sub New() InitializeComponent() ' 列 目 の 幅 の 変 更 を 禁 止 します() c1flexgrid1.columns(0).allowresizing = False C# //1 列 目 の 幅 の 変 更 を 禁 止 します c1flexgrid1.columns[0].allowresizing = false; 列 幅 をデータにあわせて 調 整 する AutoSizeColumn/AutoSizeColumnsメソッドで 列 のサイズをデータにあわせて 調 整 できます また 列 のサイズ 変 更 が 許 可 されている 場 合 ユーザーは 行 / 列 の 境 界 線 をダブルクリックすることで 表 示 されているデータにあわせて サイズを 調 整 できます 実 行 例 サイズ 調 整 後 イメージ マークアップ <Button Content="サイズ 調 整 " Height="25" HorizontalAlignment="Left" Margin="45,204,0,0" Name="button1" VerticalAlignment="Top" Width="82" Click="button1_Click" /> Visual Basic Private Sub button1_click(sender As Object, e As RoutedEventArgs) '3 列 目 の 列 幅 を 調 整 c1flexgrid1.autosizecolumn(2, 5) C# private void button1_click(object sender, RoutedEventArgs e) //3 列 目 の 列 幅 を 調 整 c1flexgrid1.autosizecolumn(2, 5); 注 意 :AutoSizeColumn/AutoSizeColumnsメソッドは 列 のサイズ 変 更 を 禁 止 している 場 合 でも 使 用 できます 16 Copyright GrapeCity inc. All rights reserved.

18 列 幅 の 最 小 値 / 最 大 値 を 設 定 する MinWidth プロパティで 列 の 最 小 サイズを MaxWidth プロパティで 最 大 サイズを 設 定 します この 設 定 は ユーザーによる サイズ 変 更 時 コードでのサイズ 変 更 時 の 両 方 で 有 効 です 以 下 の 例 では 幅 の 自 動 調 整 を 行 っても 列 幅 は 最 大 サイズ 以 上 にはなりません 実 行 例 マークアップ <c1:c1flexgrid.columns> <c1:column Header=" 列 1" MaxWidth="Infinity" /> <!-- 列 幅 の 最 小 サイズを50 最 大 サイズを140にします--> <c1:column Header="データにあわせて 調 整 " MaxWidth="140" MinWidth="50" Width="100" /> <c1:column Header=" 列 3"/> <c1:column Header=" 列 4"/> <c1:column Header=" 列 5"/> </c1:c1flexgrid.columns> Visual Basic Private Sub button1_click(sender As Object, e As RoutedEventArgs) ' 列 幅 の 自 動 調 整 を 行 っても 最 大 サイズ 以 上 にはなりません c1flexgrid1.autosizecolumn(1, 10) C# private void button1_click(object sender, RoutedEventArgs e) 17 Copyright GrapeCity inc. All rights reserved.

19 // 列 幅 の 自 動 調 整 を 行 っても 最 大 サイズ 以 上 にはなりません c1flexgrid1.autosizecolumn(1, 10); 列 ヘッダを 設 定 する 列 のヘッダセルにキャプションとしてテキストを 追 加 する 場 合 は Header プロパティを 使 用 します そして HeaderHorizontalAlignment HeaderTextWrapping などのプロパティを 使 用 してヘッダセルを 独 自 にカスタマイズできます 実 行 例 マークアップ <c1:c1flexgrid Name="c1FlexGrid1"> <c1:c1flexgrid.rows> <c1:row/> <c1:row/> <c1:row/> </c1:c1flexgrid.rows> <c1:c1flexgrid.columns> <c1:column AllowResizing="False" Header=" 列 1" HeaderHorizontalAlignment="center" TextWrapping="True"/> <c1:column Header="ヘッダのテキストを 折 り 返 して 表 示 する " Width="140" HeaderTextWrapping="True"/> <c1:column Header=" 列 3"/> <c1:column Header=" 列 4"/> <c1:column Header=" 列 5"/> </c1:c1flexgrid.columns> </c1:c1flexgrid> 必 要 に 応 じて Header をコードで 設 定 することもできます Visual Basic Public Sub New() InitializeComponent() c1flexgrid1.columns(0).header = " 列 1" c1flexgrid1.columns(0).headerhorizontalalignment = HorizontalAlignment.Center c1flexgrid1.columns(0).allowresizing = False c1flexgrid1.columns(0).textwrapping = True c1flexgrid1.columns(1).header = "ヘッダのテキストを 折 り 返 して 表 示 する " c1flexgrid1.columns(1).headertextwrapping = True c1flexgrid1.columns(2).header = " 列 3" c1flexgrid1.columns(3).header = " 列 4" c1flexgrid1.columns(4).header = " 列 5" 18 Copyright GrapeCity inc. All rights reserved.

20 C# c1flexgrid1.columns[0].header = " 列 1"; c1flexgrid1.columns[0].headerhorizontalalignment = HorizontalAlignment.Center; c1flexgrid1.columns[0].allowresizing = false; c1flexgrid1.columns[0].textwrapping = true; c1flexgrid1.columns[1].header = "ヘッダのテキストを 折 り 返 して 表 示 する "; c1flexgrid1.columns[1].headertextwrapping = true; c1flexgrid1.columns[2].header = " 列 3"; c1flexgrid1.columns[3].header = " 列 4"; c1flexgrid1.columns[4].header = " 列 5"; 注 意 : 直 接 セルに 値 を 設 定 する 方 法 については セルの 値 を 設 定 する を 参 照 してください C1FlexGrid を 連 結 モードで 使 用 した 場 合 デフォルトでは Header プロパティ Name プロパティにはデータソースの 列 名 が 設 定 されます 列 の 移 動 を 許 可 する AllowDragging プロパティを 変 更 して 列 をマウスで 新 しい 位 置 に 移 動 します また 列 の AllowDragging プロパティを False に 設 定 すると 特 定 列 のドラッグを 禁 止 できます 以 下 の 例 では 1 列 目 の 移 動 を 禁 止 し 2 列 目 をドラッグします マークアップ <c1:c1flexgrid.columns> <c1:column AllowDragging="False" Header=" 列 1" /> <c1:column Header=" 列 2" /> <c1:column Header=" 列 3" /> <c1:column Header=" 列 4" /> <c1:column Header=" 列 5" /> </c1:c1flexgrid.columns> 必 要 に 応 じて AllowDragging をコードで 設 定 することもできます Visual Basic 19 Copyright GrapeCity inc. All rights reserved.

21 Public Sub New() InitializeComponent() '1 列 目 の 移 動 を 禁 止 します c1flexgrid1.columns(0).allowdragging = False C# InitializeComponent(); //1 列 目 の 移 動 を 禁 止 します c1flexgrid1.columns[0].allowdragging = false; 列 を 固 定 する テーブルに 多 くのデータが 表 示 されている 場 合 最 初 のいくつかの 行 を 固 定 すると グリッドをスクロールした 際 にそれらの 列 が 表 示 されたままになるので 便 利 です 本 動 作 を Columns.Frozen プロパティを 設 定 して 簡 単 に 実 現 できます C1FlexGrid は Excel と 同 様 にグリッドの 固 定 領 域 とスクロール 可 能 領 域 の 間 に 黒 い 線 が 表 示 されています また FrozenLinesBrush プロパティを 使 用 して この 分 割 線 を 削 除 したり 色 を 変 更 することができます 次 のコードは Excel と 同 じような FreezePanes コマンドを 実 装 する 方 法 を 示 します 実 行 例 ユーザーが _chkfreezepanes チェックボックスをオンにすると イベントハンドラは Columns.Frozen プロパティを 設 定 して 現 在 の 選 択 範 囲 の 左 側 に 列 が 固 定 さ れ 常 に 表 示 されるようにします 次 の 図 に この 効 果 を 示 します Visual Basic Private Sub _checkfreezepanes_checked_1(sender As Object, e As RoutedEventArgs) Handles _checkfreezepanes.checked If _checkfreezepanes.ischecked.value Then C1FlexGrid.Columns.Frozen = C1FlexGrid.Selection.Column Else C1FlexGrid.Columns.Frozen = 0 C# // 列 を 固 定 するか 固 定 を 解 除 をします 20 Copyright GrapeCity inc. All rights reserved.

22 private void _checkfreezepanes_click(object sender, RoutedEventArgs e) if (_checkfreezepanes.ischecked.value) C1FlexGrid.Columns.Frozen = C1FlexGrid.Selection.Column; else C1FlexGrid.Columns.Frozen = 0; 非 連 結 列 を 追 加 する C1FlexGrid を 連 結 モードで 使 用 していると 連 結 しているデータソースのデータがグリッドに 表 示 されます このとき データ ソースに 存 在 しない 列 を 使 ってデータを 表 示 したい 場 合 は 非 連 結 列 を 使 用 します 非 連 結 列 は グリッドにデータソースを 連 結 した 後 に デザイン 時 またはコードにより 追 加 できます FlexGrid for WPF では カスタムセルを 作 成 するには ICellFactory インターフェイスを 実 装 するクラスを 作 成 し そのクラス のインスタンスを CellFactory プロパティに 割 り 当 てる 必 要 があります 即 ち 次 のコードのように CellFactory クラスを 継 承 し てカスタムセルファクトリークラスを 作 成 し その CreateCellContent メソッドでアンバウンド 列 の 表 示 を 制 御 します 注 意 :WPF 版 ではGetUnboundValueやOwnerDrawCellイベントが 提 供 されません 代 わりに 充 実 したCellFactoryクラ スを 使 用 します 実 行 例 次 のコードは CellFactory クラスを 継 承 して 追 加 する 非 連 結 列 のセルの 内 容 をカスタマイズする 方 法 を 示 します 21 Copyright GrapeCity inc. All rights reserved.

23 Visual Basic 'CellFactoryクラスを 継 承 します Class CustomCellFactory Inherits CellFactory Public Overrides Sub CreateCellContent(grid As C1FlexGrid, bdr As Border, rng As CellRange) ' 既 定 の 処 理 を 実 行 します MyBase.CreateCellContent(grid, bdr, rng) ' アンバウンド 列 の 場 合 は セルの 内 容 をカスタマイズします If grid.columns(rng.column).header = "FullName( 非 連 結 列 )" Then Dim first As String = grid(rng.row, "First").ToString() Dim last As String = grid(rng.row, "Last").ToString() bdr.child = New TextBlock() With _ Key.Text = Convert.ToString(first & Convert.ToString(" ")) & last, _ Key.VerticalAlignment = VerticalAlignment.Center _ End Class C# Example Title //CellFactoryクラスを 継 承 します class CustomCellFactory : CellFactory public override void CreateCellContent(C1FlexGrid grid, Border bdr, CellRange rng) // 既 定 の 処 理 を 実 行 します base.createcellcontent(grid, bdr, rng); // アンバウンド 列 の 場 合 は セルの 内 容 をカスタマイズします if (grid.columns[rng.column].header == "FullName( 非 連 結 列 )") string first = grid[rng.row, "First"].ToString(); string last = grid[rng.row, "Last"].ToString(); bdr.child = new TextBlock() Text = first + " " + last, VerticalAlignment = VerticalAlignment.Center ; これで ボタンクリックで 非 連 結 列 を 作 成 し グリッドの 最 終 列 に 追 加 します Visual Basic 22 Copyright GrapeCity inc. All rights reserved.

24 Example Title Private Sub Button_Click_1(sender As Object, e As RoutedEventArgs) ' 非 連 結 列 を 作 成 し グリッドの 最 終 列 に 追 加 します Dim col = New Column() col.header = "FullName( 非 連 結 列 )" C1FlexGrid1.Columns.Add(col) col.isreadonly = True ' 非 連 結 列 の 幅 を 調 整 します Me.C1FlexGrid1.AutoSizeColumns(col.Index, col.index, 0, True, True) C# private void Button_Click_1(object sender, RoutedEventArgs e) // 非 連 結 列 を 作 成 し グリッドの 最 終 列 に 追 加 します var col = new Column(); col.header = "FullName( 非 連 結 列 )"; C1FlexGrid1.Columns.Add(col); col.isreadonly = true; // 非 連 結 列 の 幅 を 調 整 します this.c1flexgrid1.autosizecolumns(col.index, col.index, 0, true, true); 行 行 を 追 加 する グリッドで 行 を 追 加 するには RowCollection クラスの Add メソッドを 使 用 します たとえば 次 のコードでは C1FlexGrid を 非 連 結 モードで 作 成 していることを 前 提 として ボタンクリックで 行 を 追 加 する 方 法 を 示 します 注 意 :FlexGrid for WPF では Count プロパティは 読 み 取 り 専 用 です 実 行 例 23 Copyright GrapeCity inc. All rights reserved.

25 Visual Basic Private Sub Button_Click_1(sender As Object, e As RoutedEventArgs) ' 行 を 追 加 します C1FlexGridのRowsプロパティはRowCollection 型 です Dim i As Integer = 0 While i > 1 C1FlexGrid.Rows.Add(New Row()) i += 1 End While Dim r As New Row() C1FlexGrid.Rows.Add(r) For j As Integer = 0 To C1FlexGrid.Rows.Count - 1 For c As Integer = 0 To C1FlexGrid.Columns.Count - 1 C1FlexGrid(j, c) = String.Format("セル [0,1]", j, c) Next Next C# private void Button_Click(object sender, RoutedEventArgs e) // 行 を 追 加 します C1FlexGridのRowsプロパティはRowCollection 型 です for (int i = 0; i > 1; i++) C1FlexGrid.Rows.Add(new Row()); Row r = new Row(); 24 Copyright GrapeCity inc. All rights reserved.

26 C1FlexGrid.Rows.Add(r); for (int j = 0;j < C1FlexGrid.Rows.Count; j++) for (int c = 0; c < C1FlexGrid.Columns.Count; c++) C1FlexGrid[j, c] = string.format("セル [0,1]", j, c); 行 を 削 除 する グリッドで 行 を 削 除 するには RowCollection クラスの Remove メソッドを 使 用 します たとえば 次 のコードは FlexGrid を 非 連 結 モードで 作 成 していることを 前 提 として ボタンクリックで 行 を 削 除 する 方 法 を 示 します 注 意 :FlexGrid for WPF では Count プロパティは 読 み 取 り 専 用 です [ 実 行 例 ] Visual Basic Private Sub Button_Click_1(sender As Object, e As RoutedEventArgs) Dim lastrow = C1FlexGrid.Rows.LastOrDefault() If lastrow IsNot Nothing Then ' 選 択 した 行 を 削 除 します C1FlexGridのRowsプロパティはRowCollection 型 です C1FlexGrid.Rows.RemoveAt(C1FlexGrid.Selection.Row) C# 25 Copyright GrapeCity inc. All rights reserved.

27 private void Button_Click_1(object sender, RoutedEventArgs e) var lastrow = C1FlexGrid.Rows.LastOrDefault(); if (lastrow!= null) // 選 択 した 行 を 削 除 します C1FlexGridのRowsプロパティはRowCollection 型 です C1FlexGrid.Rows.RemoveAt(C1FlexGrid.Selection.Row); 新 規 追 加 行 を 表 示 する FlexGrid for WPF で 新 規 行 の 追 加 を 許 可 するには AllowAddNew プロパティを True に 変 更 します 行 の 追 加 を 許 可 すると 最 終 行 に 新 規 追 加 のテンプレート 行 が 表 示 されます また CellFactory クラスを 継 承 したカスタムセルファクトリを 使 用 して 新 規 追 加 のテンプレート 行 に 任 意 の 文 字 列 を 表 示 し ユーザーに 新 規 行 への 入 力 テキストをプロンプトすることも 可 能 です 次 のコードでは グリッドをデータソースと 連 結 していることを 前 提 として AllowAddNew プロパティおよび CellFactory クラスの 使 用 方 法 を 示 します 実 行 例 Visual Basic Public Sub New() InitializeComponent() Dim p = Product.GetProducts(10) C1FlexGrid.ItemsSource = p 'グリッドのAllowAddNewプロパティを 設 定 します C1FlexGrid.AllowAddNew = True 'カスタムセルファクトリを 作 成 します C1FlexGrid.CellFactory = New CustomCellFactory() 26 Copyright GrapeCity inc. All rights reserved.

28 C# //グリッドのAllowAddNewプロパティを 設 定 します C1FlexGrid.AllowAddNew = true; //カスタムセルファクトリを 作 成 します C1FlexGrid.CellFactory = new MyCellFactory(); 次 のように カスタムセルファクトリを 使 用 して 新 しい 行 への 入 力 をプロンプトするマスクを 設 定 します Visual Basic Private Class CustomCellFactory Inherits CellFactory Public Overrides Sub CreateCellContent(grid As C1FlexGrid, bdr As Border, rng As CellRange) ' 新 しい 行 を 追 加 する 場 合 以 下 のマスクを 設 定 します MyBase.CreateCellContent(grid, bdr, rng) If rng.column = 0 AndAlso rng.row = grid.rows.count - 1 Then Dim txt = TryCast(bdr.Child, TextBlock) If txt IsNot Nothing Then txt.text = "Please add new record here..." txt.opacity = 0.65 txt.fontstyle = FontStyles.Italic txt.ishittestvisible = False End Class C# class MyCellFactory : CellFactory public override void CreateCellContent(C1FlexGrid grid, Border bdr, CellRange rng) // 新 しい 行 を 追 加 する 場 合 以 下 のマスクを 設 定 します base.createcellcontent(grid, bdr, rng); if (rng.column == 0 && rng.row == grid.rows.count - 1) var txt = bdr.child as TextBlock; if (txt!= null) txt.text = " 新 しいレコードを 追 加 してください..."; txt.opacity = 0.65; txt.fontstyle = FontStyles.Italic; txt.ishittestvisible = false; 27 Copyright GrapeCity inc. All rights reserved.

29 行 の 高 さを 設 定 する Height プロパティを 使 用 して 各 行 の 高 さをピクセル 単 位 で 設 定 できます デフォルトの 高 さを 使 用 する 場 合 は -1 を 設 定 し ます また Row クラスから 継 承 される BoundRow クラスと GroupRow クラスのHeight プロパティも 同 じように 設 定 できます 実 行 例 マークアップ <c1:c1flexgrid.rows> <c1:row Height="60" TextWrapping="true"/> <c1:row Height="40" TextWrapping="true"/> <c1:row/> <c1:row/> <c1:row/> </c1:c1flexgrid.rows> 必 要 に 応 じて Height をコードで 追 加 することもできます Visual Basic Public Sub New() InitializeComponent() ' 行 の 高 さを 設 定 します C1FlexGrid.Rows(0).Height = 60 C1FlexGrid.Rows(0).Height = 40 Me.C1FlexGrid(0, 0) = " 行 の 高 さは 60 ピクセル" Me.C1FlexGrid(1, 0) = " 行 の 高 さは 40 ピクセル" C# Example Title 28 Copyright GrapeCity inc. All rights reserved.

30 // 行 の 高 さを 設 定 します C1FlexGrid.Rows[0].Height = 60; C1FlexGrid.Rows[0].Height = 40; this.c1flexgrid[0, 0] = " 行 の 高 さは 60 ピクセル"; this.c1flexgrid[1, 0] = " 行 の 高 さは 40 ピクセル"; 行 ヘッダを 設 定 する 行 ヘッダセルにテキストをキャプションとして 追 加 するために CellFactory クラスを 継 承 して ヘッダセル 上 にカスタムテキストを 表 示 でき ます 次 の 例 では 非 連 結 グリッドを 作 成 していることを 前 提 として カスタムセルファクトリを 使 用 する 方 法 を 示 します 実 行 例 Visual Basic 'CellFactoryクラスを 継 承 してカスタムセルファクトリを 使 用 します Class Custom1CellFactory Inherits CellFactory Public Overrides Sub CreateRowHeaderContent(grid As C1FlexGrid, bdr As Border, range As CellRange) Dim tb = New TextBlock() tb.horizontalalignment = HorizontalAlignment.Center tb.verticalalignment = VerticalAlignment.Center tb.text = GetAlphaRowHeader(range.Row) bdr.child = tb 'A,B..などスタイルの 行 ヘッダを 作 成 します Private Function GetAlphaRowHeader(p As Integer) As String Return GetAlphaRowHeader(p, String.Empty) End Function Private Function GetAlphaRowHeader(p As Integer, s As String) As String Dim [rem] = p Mod 26 s = CChar(CInt("A"C) + [rem]) & s p = p / 26-1 Return If(p < 0, s, GetAlphaRowHeader(p, s)) 29 Copyright GrapeCity inc. All rights reserved.

31 End Function End Class C# //CellFactoryクラスを 継 承 してカスタムセルファクトリを 使 用 します class Custom1CellFactory : CellFactory public override void CreateRowHeaderContent(C1FlexGrid grid, Border bdr, CellRange range) var tb = new TextBlock(); tb.horizontalalignment = HorizontalAlignment.Center; tb.verticalalignment = VerticalAlignment.Center; tb.text = GetAlphaRowHeader(range.Row); bdr.child = tb; //A,B..などスタイルの 行 ヘッダを 作 成 します string GetAlphaRowHeader(int p) return GetAlphaRowHeader(p, string.empty); string GetAlphaRowHeader(int p, string s) var rem = p % 26; s = (char)((int)'a' + rem) + s; p = p / 26-1; return p < 0? s : GetAlphaRowHeader(p, s); また 行 ヘッダ 内 の 各 セルにアクセスするため RowHeaders という 追 加 のプロパティが 提 供 されています たとえば 次 のコードでは 一 番 上 の 行 ヘッダをアクセスします int row = 0; C1FlexGrid.RowHeaders[row, 0] = " 行 ヘッダ"; 行 番 号 を 表 示 する FlexGrid for WPF で CellFactory クラスを 使 用 することでオートナンバーと 同 様 の 処 理 を 単 純 に 実 現 できます また CreateRowHeaderContent メソッドをオーバーライドして 固 定 行 の 場 合 も 行 番 号 を 表 することが 可 能 です 次 のコードでは グリッドをデータソースと 連 結 していることを 前 提 として CellFactory クラスを 継 承 したカスタムセルファクトリに 行 番 号 を 設 定 する 処 理 を 追 加 します 実 行 例 30 Copyright GrapeCity inc. All rights reserved.

32 Visual Basic 'CellFactoryクラスを 継 承 して カスタムセルファクトリを 使 用 します Private Sub ProcessFlexGrid(C1FlexGrid As C1.WPF.FlexGrid.C1FlexGrid) C1FlexGrid.CellFactory = New Custom1CellFactory() Private Class Custom1CellFactory Inherits CellFactory Public Overrides Sub CreateRowHeaderContent(grid As C1FlexGrid, bdr As Border, range As CellRange) Dim row = grid.rows(range.row) Dim textblock 1 = New TextBlock() Dim binding = New Binding() With _ Key.Source = row, _ Key.Path = New PropertyPath("Index"), _ Key.Converter = New IndexValueConverter() _ textblock 1.SetBinding(TextBlock.TextProperty, binding) bdr.child = textblock 1 End Class ' 行 インデックスを1から 表 示 するように 設 定 します Public Class IndexValueConverter Implements IValueConverter Public Function Convert(value As Object, targettype As Type, parameter As Object, culture As System.Globalization.CultureInfo) As Object Dim index As Integer = CInt(value) Return index + 1 End Function Public Function ConvertBack(value As Object, targettype As Type, parameter As Object, culture As System.Globalization.CultureInfo) As Object Throw New NotImplementedException() End Function End Class C# //CellFactoryクラスを 継 承 して カスタムセルファクトリを 使 用 します private void ProcessFlexGrid(C1.WPF.FlexGrid.C1FlexGrid C1FlexGrid) C1FlexGrid.CellFactory = new Custom1CellFactory(); class Custom1CellFactory : CellFactory public override void CreateRowHeaderContent(C1FlexGrid grid, Border bdr, CellRange range) var row = grid.rows[range.row]; var textblock = new TextBlock(); var binding = new Binding() Source = row, Path = new PropertyPath("Index"), Converter = new IndexValueConverter() ; textblock.setbinding(textblock.textproperty, binding); bdr.child = textblock; // 行 インデックスを1から 表 示 するように 設 定 します public class IndexValueConverter : IValueConverter public object Convert(object value, Type targettype, object parameter, System.Globalization.CultureInfo culture) 31 Copyright GrapeCity inc. All rights reserved.

33 int index = (int)value; return index + 1; public object ConvertBack(object value, Type targettype, object parameter, System.Globalization.CultureInfo culture) throw new NotImplementedException(); 行 を 固 定 する テーブルに 多 くのデータが 表 示 されている 場 合 最 初 のいくつかの 行 を 固 定 すると グリッドをスクロールした 際 にそれらの 行 が 表 示 されたままになるので 便 利 です 本 動 作 を Rows.Frozen プロパティを 設 定 して 簡 単 に 実 現 できます C1FlexGrid では Excel と 同 様 にグリッドの 固 定 領 域 と スクロール 可 能 領 域 の 間 に 黒 い 線 が 表 示 されています また FrozenLinesBrush プロパティを 使 用 して この 分 割 線 を 削 除 したり 色 を 変 更 することができます 次 のコードは Excel と 同 じような FreezePanes コマンドを 実 装 する 方 法 を 示 します 実 行 例 ユーザーが _chkfreezepanes チェックボックスをオンにすると イベントハンドラは Rows.Frozen プロパティを 設 定 して 現 在 の 選 択 範 囲 の 上 側 に 行 が 固 定 され 常 に 表 示 されるようにします 次 の 図 に この 効 果 を 示 します Visual Basic ' 選 択 した 行 を 固 定 します Private Sub _checkfreezepanes_click(sender As Object, e As RoutedEventArgs) If _checkfreezepanes.ischecked.value Then C1FlexGrid.Rows.Frozen = C1FlexGrid.Selection.Row Else C1FlexGrid.Rows.Frozen = 0 32 Copyright GrapeCity inc. All rights reserved.

34 C# Example Title // 選 択 した 行 を 固 定 します private void _checkfreezepanes_click(object sender, RoutedEventArgs e) if (_checkfreezepanes.ischecked.value) C1FlexGrid.Rows.Frozen = C1FlexGrid.Selection.Row; else C1FlexGrid.Rows.Frozen = 0; セル セルの 値 を 設 定 する C1FlexGrid 内 の 各 セルに 最 も 簡 単 にアクセスするために セルのインデクサを 使 用 します たとえば 次 のサンプルコード は グリッドの3 行 3 列 目 のセルに 値 を 設 定 します 注 意 :FlexGrid for WPF では WinForms のような SetDataメソッドは 機 能 しませんので ご 注 意 ください 実 行 例 Visual Basic 33 Copyright GrapeCity inc. All rights reserved.

35 Private Sub Button_click(sender As Object, e As RoutedEventArgs) ' 3 行 3 列 目 のセルに 値 を 設 定 します (インデックスは0からです) C1FlexGrid(3, 3) = "3 行 3 列 目 " 'セルの 移 動 ( 選 択 )を 設 定 します C1FlexGrid.Select(3, 3) C# private void Button_Click_1(object sender, RoutedEventArgs e) //3 行 3 列 目 のセルに 値 を 設 定 します (インデックスは0からです) C1FlexGrid[3, 3] = "3 行 3 列 目 "; //セルの 移 動 ( 選 択 )を 設 定 します C1FlexGrid.Select(3, 3); Deleteキーでセルの 値 を 削 除 する ユーザーがグリッドにある 値 を 編 集 できる 動 作 は IsReadOnly プロパティで 制 御 されています IsReadOnly プロパティはデフォルトでFalse に 設 定 されていますので カレントセルに DBNull.Value を 設 定 してDeleteキーでセルの 値 を 作 成 できます 注 意 :WinForms の AllowEditing プロパティは WPF の 他 のほとんどのコントロールとの 整 合 性 のために IsReadOnly に 名 前 が 変 更 されています 次 の 例 では グリッドはデータソースと 連 結 されていることを 前 提 として ボタンクリックおよび Deleteキーでセルの 値 を 作 成 する 方 法 を 示 しま す 実 行 例 クリア 後 イメージ 34 Copyright GrapeCity inc. All rights reserved.

36 Visual Basic Public Sub New() InitializeComponent() C1FlexGrid.ItemsSource = Product.GetProducts(50) AddHandler C1FlexGrid.KeyDown, AddressOf C1FlexGrid_KeyDown AddHandler delbtn.click, AddressOf delbtn_click 'Deleteキーを 押 してセルのデータを 削 除 することができます Private Sub C1FlexGrid_KeyDown(sender As Object, e As KeyEventArgs) If e.key = Key.Delete Then DeleteItem() Private Sub delbtn_click(sender As Object, e As RoutedEventArgs) DeleteItem() Private Sub DeleteItem() If C1FlexGrid.SelectedItem IsNot Nothing Then C1FlexGrid(C1FlexGrid.Selection.Row, C1FlexGrid.Selection.Column) = System.DBNull.Value C# public DeleteCellValue() InitializeComponent(); C1FlexGrid.ItemsSource = Product.GetProducts(50); C1FlexGrid.KeyDown += C1FlexGrid_KeyDown; delbtn.click += delbtn_click; //Deleteキーを 押 してセルのデータを 削 除 することができます private void C1FlexGrid_KeyDown(object sender, KeyEventArgs e) if (e.key == Key.Delete) DeleteItem(); 35 Copyright GrapeCity inc. All rights reserved.

37 private void delbtn_click(object sender, RoutedEventArgs e) DeleteItem(); private void DeleteItem() if (C1FlexGrid.SelectedItem!= null) C1FlexGrid[C1FlexGrid.Selection.Row, C1FlexGrid.Selection.Column] = System.DBNull.Value; チェックボックスを 表 示 する グリッドを 連 結 モードで 使 用 している 場 合 は 行 や 列 のデータ 型 (DataType)がブール 型 であれば 自 動 的 にチェックボックスが 表 示 されます しかし 非 連 結 モードの 場 合 は グリッドはセルの 値 を 直 接 セルに 格 納 し Object 型 のデータを 文 字 列 に 変 換 しています それで ブール 型 のデータを Excel のように True/False として 解 釈 して 表 示 しています この 場 合 C1FlexGrid でカスタムセルファクトリを 使 用 してコントロールのデフォルト 動 作 をオーバーライドする 方 法 が 用 意 されています この 強 力 な 機 能 は WinForms 版 の SetCellChecked メソッドを 使 用 する 方 法 に 比 べて 少 し 複 雑 ですが より 柔 軟 な 方 法 です たとえば ブール 型 データを 自 動 的 にチェックボックスとして 表 示 するようなカスタ ムセルファクトリを 作 成 するか チャックボックスを 直 接 セルに 格 納 してカスタムセルファクトリがそのセル 内 のコントロールを 簡 単 に 表 示 するような 方 法 は 実 現 可 能 になります 次 のコードでは 下 記 のシナリオを 実 現 するカスタムセルファクトリを 使 用 してセルにチェックボックスを 表 示 します: 1. セルにブール 型 のデータがある 場 合 ファクトリがそのセルに 対 してチェックボックスを 作 成 します 2. セルにコントロールオブジェクトがある 場 合 ファクトリがそのセルにコントロールを 表 示 します 実 行 例 Visual Basic Public Class MyCellFactory Inherits CellFactory Public Overrides Sub CreateCellContent(grid As C1FlexGrid, bdr As System.Windows.Controls.Border, rng As CellRange) If TypeOf grid.cells(rng.row, rng.column) Is Boolean Then ' 値 を 表 示 / 編 集 するために チェックボックスを 作 成 します Dim chk As New CheckBox() chk.ischecked = DirectCast(grid.Cells(rng.Row, rng.column), System.Nullable(Of Boolean)) chk.verticalalignment = VerticalAlignment.Center chk.horizontalalignment = HorizontalAlignment.Center ToolTipService.SetToolTip(chk, "このチェックボックスはグリッドセルに 格 納 するブール 値 を 表 します") ' チェックボックスをセル 要 素 に 割 り 当 てます bdr.child = chk ' グリッドセルの 内 容 が 更 新 されるように チェックボックスを 接 続 します chk.tag = grid chk.[addhandler](checkbox.clickevent, New RoutedEventHandler(AddressOf chk_click)) ElseIf TypeOf grid.cells(rng.row, rng.column) Is Control Then ' コントロールをセルに 追 加 します( 親 がない 場 合 ) Dim ctl As Control = DirectCast(grid.Cells(rng.Row, rng.column), Control) If ctl.parent Is Nothing Then bdr.child = DirectCast(grid.Cells(rng.Row, rng.column), System.Windows.Controls.Control) 36 Copyright GrapeCity inc. All rights reserved.

38 Else ' ブール 値 ではない 場 合 デフォルト 動 作 を 実 現 MyBase.CreateCellContent(grid, bdr, rng) ' チェックボックスがクリックされた 場 合 値 を 更 新 します Private Sub chk_click(sender As Object, e As EventArgs) ' クリックされたチェックボックスを 取 得 します Dim chk As CheckBox = DirectCast(sender, CheckBox) ' チェックボックスを 保 持 するグリッドを 取 得 します Dim flex As C1FlexGrid = DirectCast(chk.Tag, C1FlexGrid) ' チェックボックスを 持 つセルを 取 得 します Dim bdr As Border = DirectCast(chk.Parent, Border) 'int row = bdr.getvalue(grid.rowproperty.globalindex); Dim row As Integer = CInt(bdr.GetValue(Grid.RowProperty)) Dim col As Integer = CInt(bdr.GetValue(Grid.ColumnProperty)) ' セルに 新 しい 値 を 割 り 当 てます flex(row, col) = chk.ischecked ' セルが 廃 却 された 場 合 セルの 境 界 のコンテンツも 削 除 します Public Overrides Sub DisposeCell(grid As C1.WPF.FlexGrid.C1FlexGrid, celltype As C1.WPF.FlexGrid.CellType, cell As System.Windows.FrameworkElement) Dim bdr As Border = DirectCast(cell, Border) bdr.child = Nothing End Class C# public class MyCellFactory : CellFactory public override void CreateCellContent(C1FlexGrid grid, System.Windows.Controls.Border bdr, CellRange rng) if (grid.cells[rng.row, rng.column] is bool) // 値 を 表 示 / 編 集 するために チェックボックスを 作 成 します CheckBox chk = new CheckBox(); chk.ischecked = (bool?)grid.cells[rng.row, rng.column]; chk.verticalalignment = VerticalAlignment.Center; chk.horizontalalignment = HorizontalAlignment.Center; ToolTipService.SetToolTip(chk, "このチェックボックスはグリッドセルに 格 納 するブール 値 を 表 します"); // チェックボックスをセル 要 素 に 割 り 当 てます bdr.child = chk; // グリッドセルの 内 容 が 更 新 されるように チェックボックスを 接 続 します chk.tag = grid; chk.addhandler(checkbox.clickevent, new RoutedEventHandler(chk_Click)); else if (grid.cells[rng.row, rng.column] is Control) // コントロールをセルに 追 加 します( 親 がない 場 合 ) Control ctl = (Control)grid.Cells[rng.Row, rng.column]; if (ctl.parent == null) bdr.child =(System.Windows.Controls.Control) grid.cells[rng.row, rng.column]; else // ブール 値 ではない 場 合 デフォルト 動 作 を 実 現 base.createcellcontent(grid, bdr, rng); // チェックボックスがクリックされた 場 合 値 を 更 新 します private void chk_click(object sender, EventArgs e) // クリックされたチェックボックスを 取 得 します CheckBox chk = (CheckBox)sender; // チェックボックスを 保 持 するグリッドを 取 得 します C1FlexGrid flex = (C1FlexGrid)chk.Tag; // チェックボックスを 持 つセルを 取 得 します Border bdr = (Border)chk.Parent; 37 Copyright GrapeCity inc. All rights reserved.

39 //int row = bdr.getvalue(grid.rowproperty.globalindex); int row =(int) bdr.getvalue(grid.rowproperty); int col = (int)bdr.getvalue(grid.columnproperty); //// セルに 新 しい 値 を 割 り 当 てます flex[row, col] = chk.ischecked; // セルが 廃 却 された 場 合 セルの 境 界 のコンテンツも 削 除 します public override void DisposeCell(C1.WPF.FlexGrid.C1FlexGrid grid, C1.WPF.FlexGrid.CellType celltype, System.Windows.FrameworkElement cell) Border bdr = (Border)cell; bdr.child = null; 次 は セルにコントロールを 追 加 する 方 法 を 示 します Visual Basic ' コントロールを 追 加 します Dim chk As New CheckBox() ToolTipService.SetToolTip(chk, "このチェックボックスはグリッドセルに 格 納 しています") chk.verticalalignment = VerticalAlignment.Center chk.horizontalalignment = HorizontalAlignment.Center _fgunbound(0, 1) = chk Dim cmb As New ComboBox() cmb.items.add("first") cmb.items.add("second") cmb.items.add("third") ToolTipService.SetToolTip(chk, "このコンボボックスはグリッドセルに 格 納 しています") _fgunbound(1, 1) = cmb ' カスタムセルファクトリに 結 びます ' (ブール 値 をチェックボックスとして 表 示 する) _fgunbound.cellfactory = New MyCellFactory() C# // コントロールを 追 加 します CheckBox chk = new CheckBox(); ToolTipService.SetToolTip(chk, "このチェックボックスはグリッドセルに 格 納 しています"); chk.verticalalignment = VerticalAlignment.Center; chk.horizontalalignment = HorizontalAlignment.Center; _fgunbound[0, 1] = chk; ComboBox cmb = new ComboBox(); cmb.items.add("first"); cmb.items.add("second"); cmb.items.add("third"); ToolTipService.SetToolTip(chk, "このコンボボックスはグリッドセルに 格 納 しています"); _fgunbound[1, 1] = cmb; // カスタムセルファクトリに 結 びます // (ブール 値 をチェックボックスとして 表 示 する) _fgunbound.cellfactory = new MyCellFactory(); セルに 画 像 を 表 示 する 連 結 グリッドでセルに 画 像 を 表 示 するには 列 のCellTemplate プロパティを 使 用 して 画 像 要 素 を 含 むデータテンプレートに 連 結 する 方 法 があります この 方 法 では 数 値 プロ パティにバインドされている 数 値 を 自 動 的 に 画 像 に 変 えるValueConverterを 使 用 します たとえば 次 の 例 をご 覧 ください 実 行 例 38 Copyright GrapeCity inc. All rights reserved.

40 マークアップ <c1:c1flexgrid Name="_flex" AutoGenerateColumns="False" > <c1:c1flexgrid.columns> <c1:column Header="Alert" Binding="Binding Alert" Width="*" /> <c1:column Header="Image" Width="*" > <c1:column.celltemplate> <DataTemplate> <Image Margin="4" Source="Binding Path=Alert, Converter=StaticResource AlertImageConverter"/> </DataTemplate> </c1:column.celltemplate> </c1:column> <c1:column Header="Message" Binding="Binding Message" Width="2*" /> </c1:c1flexgrid.columns> </c1:c1flexgrid> バインディングのコンバータープロパティは AlertImageConverter という 静 的 リソースに 設 定 されています このパブリッククラスをメインアプリケーションに 定 義 して アプリ ケーションリソースに 次 のように 追 加 されます <code> <Window.Resources> <local:alertimageconverter x:key="alertimageconverter" /> </Window.Resources> </code> 最 終 的 に AlertImageConverter クラスを 次 のように 実 装 します Visual Basic ' アプリケーションのリソースから 静 的 イメージをロードします Shared _bmpred As BitmapImage, _bmpyellow As BitmapImage, _bmpgreen As BitmapImage Shared Sub New() _bmpred = New BitmapImage(New Uri("/Resources/redBell.png", UriKind.Relative)) _bmpyellow = New BitmapImage(New Uri("/Resources/yellowBell.png", UriKind.Relative)) _bmpgreen = New BitmapImage(New Uri("/Resources/greenBell.png", UriKind.Relative)) ' Alert int 型 を 当 該 するイメージに 変 換 します Public Function Convert(value As Object, targettype As Type, parameter As Object, culture As System.Globalization.CultureInfo) As Object Select Case CInt(value) Case 1 Return _bmpred Case 2 Return _bmpyellow End Select Return _bmpgreen End Function ' 一 方 変 換 のみ(CovertBackは 使 用 されません) Public Function ConvertBack(value As Object, targettype As Type, parameter As Object, culture As System.Globalization.CultureInfo) As Object Throw New NotImplementedException() End Function 39 Copyright GrapeCity inc. All rights reserved.

41 C# public class AlertImageConverter : IValueConverter // アプリケーションのリソースから 静 的 イメージをロードします static BitmapImage _bmpred, _bmpyellow, _bmpgreen; static AlertImageConverter() _bmpred = new BitmapImage(new Uri("/Resources/redBell.png", UriKind.Relative)); _bmpyellow = new BitmapImage(new Uri("/Resources/yellowBell.png", UriKind.Relative)); _bmpgreen = new BitmapImage(new Uri("/Resources/greenBell.png", UriKind.Relative)); // Alert int 型 を 当 該 するイメージに 変 換 します public object Convert(object value, Type targettype, object parameter, System.Globalization.CultureInfo culture) switch ((int)value) case 1: return _bmpred; case 2: return _bmpyellow; return _bmpgreen; // 一 方 変 換 のみ(CovertBackは 使 用 されません) public object ConvertBack(object value, Type targettype, object parameter, System.Globalization.CultureInfo culture) throw new NotImplementedException(); セルのユーザーデータをツールチップに 表 示 ユーザーがセルデータをツールチップに 表 示 する 場 合 は WPF 版 の 標 準 の TooltipService を 使 用 してグリッドで 使 用 できる ツールチップを 作 成 できます そして カスタムセルファクトリを 使 用 することで ツールチップをセルに 付 けて 表 示 できます たとえば 次 の 例 をご 覧 ください 実 行 例 40 Copyright GrapeCity inc. All rights reserved.

42 Visual Basic Partial Public Class MainWindow Inherits Window Public Sub New() InitializeComponent() _grid.cellfactory = New ToolTipCellFactory() Dim list As New List(Of Customer)() For i As Integer = 0 To 49 Dim cus As Customer = New Customer cus.name = "Customer " + i.tostring() cus.age = 10 + i cus.active = i Mod 3 <> 0 list.add(cus) Next i _grid.itemssource = list For Each col As Column In _grid.columns col.tag = String.Format("tag for column '0'", col.columnname) Next ' イベントハンドラ Private Sub _grid_preparecellforedit(sender As Object, e As CellEditEventArgs) Handles _grid.preparecellforedit ' 選 択 の 外 観 を 変 更 してエディタをカスタマイズします Dim b As Border = DirectCast(e.Editor, Border) Dim tb As TextBox = DirectCast(b.Child, TextBox) If tb IsNot Nothing Then tb.background = New SolidColorBrush(Colors.Black) tb.foreground = New SolidColorBrush(Colors.White) End Class C# public partial class MainWindow : Window public MainWindow() InitializeComponent(); _grid.cellfactory = new ToolTipCellFactory(); var list = new List<Customer>(); for (int i = 0; i < 50; i++) list.add(new Customer() 名 前 = "Customer " + i.tostring(), 年 齢 = 10 + i, 41 Copyright GrapeCity inc. All rights reserved.

43 アクティブ = i % 3!= 0 ); _grid.itemssource = list; foreach (Column col in _grid.columns) col.tag = string.format("'0' 列 のタグ", col.columnname); // イベントハンドラ _grid.preparecellforedit += _grid_preparecellforedit; // 選 択 の 外 観 を 変 更 してエディタをカスタマイズします void _grid_preparecellforedit(object sender, CellEditEventArgs e) var b = e.editor as Border; var tb = b.child as TextBox; if (tb!= null) tb.background = new SolidColorBrush(Colors.Black); tb.foreground = new SolidColorBrush(Colors.White); セルにツールチップを 追 加 するカスタムセルファクトリは 次 のようになります Visual Basic ' コンテンツを 作 成 します MyBase.CreateCellContent(grid, bdr, rng) ' ツールチップを 追 加 します Dim tip = String.Format("row: 0 col: 1" & vbcr & vblf & "content: 2" & vbcr & vblf & "column Tag: 3", rng.row, rng.column, grid(rng.row, rng.column), grid.columns(rng.column).tag) ToolTipService.SetToolTip(bdr, tip) C# public class ToolTipCellFactory : CellFactory public override void CreateCellContent(C1FlexGrid grid, Border bdr, CellRange rng) // コンテンツを 作 成 します base.createcellcontent(grid, bdr, rng); 42 Copyright GrapeCity inc. All rights reserved.

44 // ツールチップを 追 加 します var tip = string.format(" 行 : 0 列 : 1\r\n 内 容 : 2\r\n 列 タグ: 3", rng.row, rng.column, grid[rng.row, rng.column], grid.columns[rng.column].tag); ToolTipService.SetToolTip(bdr, tip); コンテキストメニューを 表 示 する 非 編 集 時 の 場 合 C1FlexGrid にはFrameworkElement から 継 承 される ContextMenu プロパティが 用 意 されています 任 意 のコンテキストメ ニューを 作 成 して C1FlexGrid の ContextMenu プロパティに 設 定 します たとえば 次 の 例 では 編 集 時 に 表 示 するコンテキストメニューと 非 編 集 時 のコンテキストメニューを 設 定 する 方 法 を 示 します 注 意 :WPF 版 ではFrameworkElement から 継 承 されるContextMenuプロパティが 用 意 されていますので WinFormsと は 異 なり ContextMenuStrip より ContextMenu プロパティの 使 用 をお 勧 めします Visual Basic Public Sub New() InitializeComponent() Dim p = Product.GetProducts(50) _flex.itemssource = p ' コンテキストメニューを 作 成 します 43 Copyright GrapeCity inc. All rights reserved.

45 Dim cm As New ContextMenu() cm.items.add("メニュー1") cm.items.add("メニュー2") cm.items.add("メニュー3") _flex.contextmenu = cm _flex.preparecellforedit += _flex_preparecellforedit C# public MainWindow() InitializeComponent(); var p = Product.GetProducts(50); _flex.itemssource = p; // コンテキストメニューを 作 成 します ContextMenu cm = new ContextMenu(); cm.items.add("メニュー1"); cm.items.add("メニュー2"); cm.items.add("メニュー3"); _flex.contextmenu = cm; _flex.preparecellforedit += _flex_preparecellforedit; 編 集 中 の 場 合 編 集 中 は 編 集 用 エディタに 設 定 されているデフォルトのコンテキストメニューが 表 示 されます デフォルトのコンテキストメ ニューを 変 更 する 場 合 は PrepareCellForEdit イベントで 編 集 用 エディタを 取 得 し 別 の ContextMenu コントロールを 設 定 します 44 Copyright GrapeCity inc. All rights reserved.

46 Visual Basic Private Sub _flex_preparecellforedit(sender As Object, e As C1.WPF.FlexGrid.CellEditEventArgs) ' 1 列 目 のみのコンテキストメニューを 変 更 します If e.column = 1 Then ' Edit エディタを 取 得 します Dim border As Border = DirectCast(_flex.ActiveEditor, Border) Dim control = TryCast(border.Child, Control) ' コンテキストメニューを 作 成 します Dim cm2 As New ContextMenu() cm2.items.add("メニュー1: 編 集 ") cm2.items.add("メニュー2: 編 集 ") cm2.items.add("メニュー3: 編 集 ") ' コンテキストメニューを 設 定 します control.contextmenu = cm2 Else ' コンテキストメニューを 削 除 します(デフォルトに 復 元 します) _flex.activeeditor.contextmenu = Nothing End Class C# void _flex_preparecellforedit(object sender, C1.WPF.FlexGrid.CellEditEventArgs e) // 1 列 目 のみのコンテキストメニューを 変 更 します if (e.column == 1) // Edit エディタを 取 得 します Border border = (Border)_flex.ActiveEditor; var control = border.child as Control; // コンテキストメニューを 作 成 します ContextMenu cm2 = new ContextMenu(); cm2.items.add("メニュー1: 編 集 "); cm2.items.add("メニュー2: 編 集 "); cm2.items.add("メニュー3: 編 集 "); // コンテキストメニューを 設 定 します control.contextmenu = cm2; else // コンテキストメニューを 削 除 します(デフォルトに 復 元 します) _flex.activeeditor.contextmenu = null; 45 Copyright GrapeCity inc. All rights reserved.

47 複 数 セルの 行 および 列 ヘッダ ほとんどのグリッドは 行 および 列 ヘッダのセルをサポートします これにより 複 数 の 列 にまたがって1つのヘッダを 表 示 した り 選 択 範 囲 を 含 む 行 のステータスを 示 すことができます C1FlexGrid は この 概 念 をさらに 広 げて 複 数 セルのヘッダをサポートします たとえば 列 ヘッダを2 行 にして 1 行 に 年 度 を 表 示 し もう1 行 に 四 半 期 を 表 示 できます この 場 合 は 次 のようにコードを 設 定 します WPF // 非 連 結 の 列 ヘッダを 設 定 します var ch = fg.columnheaders; // 年 間 と 四 半 期 を 表 す 別 のヘッダ 行 ch.rows.add(new Row()); for (int c = 0; c < ch.columns.count; c++) // 年 ch[0, c] = c / 4; // 四 半 期 ch[1, c] = string.format("q 0", c % 4 + 1); このコードは 次 のようなグリッドを 生 成 します 列 ヘッダを 表 示 するために2つの 行 が 使 用 されていることに 注 目 してください 従 来 のグリッドでも 改 行 を 含 む 列 ヘッダを 使 っ て 同 様 の 効 果 を 得 られますが 上 端 の 固 定 行 に 結 合 するようにセルを 追 加 すると 同 じ 年 度 を 参 照 する 列 が 自 動 的 に 結 合 さ れるため その 違 いは 明 らかです このためには コードを2 行 追 加 するだけです WPF // 非 連 結 の 列 ヘッダを 設 定 します var ch = fg.columnheaders; // 年 間 と 四 半 期 を 表 す 別 々のヘッダ 行 46 Copyright GrapeCity inc. All rights reserved.

48 ch.rows.add(new Row()); for (int c = 0; c < ch.columns.count; c++) // 年 ch[0, c] = c / 4; // 四 半 期 ch[1, c] = string.format("q 0", c % 4 + 1); // 最 初 の 固 定 行 のマージを 許 可 します fg.allowmerging = AllowMerging.All; ch.rows[0].allowmerging = true; この 結 果 は 次 の 図 のようになります 上 端 の 固 定 行 にある 同 じ 年 度 を 参 照 するセルが 結 合 されることで より 見 やすくなっていることを 確 認 してください この 図 に 示 したように 行 ヘッダを 結 合 する 場 合 にも 同 じメカニズムを 適 用 できます 選 択 選 択 範 囲 と 選 択 モード ほとんどのグリッドコントロールでは 表 形 式 でデータを 表 示 するだけでなく マウスとキーボードを 使 ってデータの 一 部 を 選 択 できます C1FlexGrid は SelectionMode プロパティで 制 御 される 豊 富 な 選 択 モードを 備 えています 次 の 選 択 モードを 使 用 できま す Cell: 選 択 範 囲 は 1つのセルに 対 応 します CellRange: 選 択 範 囲 は 1つのセル 範 囲 ( 隣 接 セルのブロック)に 対 応 します Row: 選 択 範 囲 は 1つの 行 全 体 に 対 応 します RowRange: 選 択 範 囲 は 隣 接 行 のセットに 対 応 します ListBox: 選 択 範 囲 は 任 意 の 行 のセットに 対 応 します( 必 ずしも 隣 接 している 必 要 はありません) デフォルトの SelectionMode は CellRange です これは 一 般 的 な Excel 形 式 の 選 択 動 作 を 提 供 します 個 々のグリッドセ ルではなく データ 項 目 全 体 を 選 択 する 場 合 には 行 ベースのオプションも 役 立 ちます 47 Copyright GrapeCity inc. All rights reserved.

49 どちらの 選 択 モードの 場 合 も グリッドは Selection プロパティによって 現 在 の 選 択 範 囲 を 公 開 します このプロパティは 現 在 の 選 択 範 囲 を CellRange オブジェクトとして 取 得 または 設 定 します 選 択 範 囲 の 取 得 C1FlexGrid は ユーザーの 操 作 またはコードによって 選 択 範 囲 が 変 更 されるたびに SelectionChanged イベントを 発 生 さ せます これにより 新 しい 選 択 範 囲 に 対 応 することができます たとえば 次 のコードは 選 択 取 得 を 監 視 し 選 択 範 囲 が 変 更 されると コンソールに 情 報 を 出 力 します WPF void _flex_selectionchanged(object sender, CellRangeEventArgs e) CellRange sel = _flex.selection; Console.WriteLine(" 選 択 範 囲 : 0,1-2,3", sel.row, sel.column, sel.row2, sel.column2); Console.WriteLine(" 選 択 範 囲 のコンテンツ: 0", GetClipString(_flex, sel)); static string GetClipString(C1FlexGrid fg, CellRange sel) var sb = new System.Text.StringBuilder(); for (int r = sel.toprow; r <= sel.bottomrow; r++) for (int c = sel.leftcolumn; c <= sel.rightcolumn; c++) sb.appendformat("0\t", fg[r, c].tostring()); sb.appendline(); return sb.tostring(); このコードは 選 択 範 囲 が 変 更 されるたびに 現 在 の 選 択 範 囲 を 表 す CellRange の 座 標 をリストします ま た GetClipString メソッドを 使 用 して 選 択 範 囲 のコンテンツを 出 力 します このメソッドは このドキュメントで 前 述 したグリッ ドのインデクサを 使 用 して 選 択 された 項 目 をループ 処 理 することによって 選 択 範 囲 の 各 セルのコンテンツを 取 得 します GetClipString メソッドの for ループは Row Row2 Column および Column2 プロパティではなく CellRange の TopRow BottomRow LeftColumn および RightColumn プロパティを 使 用 することに 注 意 してください このようにする 必 要 があるのは ユーザーが 選 択 する 際 の 動 作 (マウスを 上 に 向 かってドラッグするか 下 に 向 かってドラッグするか)に 応 じ て Row が Row2 より 大 きくなる 場 合 と 小 さくなる 場 合 があるためです Rows.GetDataItems メソッドを 使 用 すると Selection から 簡 単 に 多 くの 有 益 な 情 報 を 抽 出 できます このメソッド は CellRange に 関 連 付 けられているデータ 項 目 のコレクションを 返 します このコレクションを 取 得 したら LINQ を 使 用 して 選 択 された 項 目 に 関 する 情 報 を 抽 出 および 要 約 できます たとえば Customer オブジェクトのコレクションに 連 結 されたグリッドに 対 して 次 の SelectionChanged メソッドの 代 替 実 装 を 考 えます WPF void _flex_selectionchanged(object sender, CellRangeEventArgs e) 48 Copyright GrapeCity inc. All rights reserved.

50 // 選 択 された 範 囲 内 の 顧 客 を 取 得 します var customers = _flex.rows.getdataitems(_flex.selection).oftype<customer>(); // LINQ を 使 用 して 選 択 された 顧 客 の 情 報 を 抽 出 します _lblselstate.text = string.format( "0 選 択 された 項 目, 1 アクティブ, 総 体 重 : 2:n2", customers.count(), (from c in customers where c.active select c).count(), (from c in customers select c.weight).sum()); このコードでは OfType 演 算 子 を 使 用 して 選 択 されたデータ 項 目 を 型 Customer にキャストします この 処 理 が 完 了 する と このコードは LINQ を 使 用 して 顧 客 の 総 数 "アクティブ" な 顧 客 数 および 選 択 範 囲 の 顧 客 の 総 体 重 を 取 得 します LINQ は このような 処 理 に 最 適 なツールです 柔 軟 性 が 高 く 表 現 力 豊 かで コンパクトかつ 効 率 的 です コードを 使 用 したセルおよびオブジェクトの 選 択 Selection プロパティは 読 み 書 き 可 能 なので コードを 使 って 簡 単 にセル 範 囲 を 選 択 できます また Windows フォームの C1FlexGrid と 同 様 に Select メソッドを 使 って 選 択 を 実 行 することもできます Select メソッドを 使 用 すると セルまたは 範 囲 を 選 択 できるほか 新 しい 選 択 範 囲 を 表 示 範 囲 までスクロールしてユーザーに 表 示 することもできます たとえば グリッド 内 の 最 初 のセルを 選 択 し そのセルがユーザーに 表 示 されるようにするには 次 のようなコードを 使 用 しま す WPF // 行 0 列 0を 選 択 して このセルが 表 示 されるようにします fg.select(0, 0, true); これらの 選 択 方 法 はすべて 行 および 列 インデックスに 基 づいて 機 能 します ただし セルの 内 容 に 基 づいて 選 択 を 行 うことも できます たとえば 次 のコードは グリッドの 氏 名 列 に 特 定 の 文 字 列 を 含 む 最 初 の 行 を 選 択 します WPF bool SelectName(string name) // FlexGrid 内 の 行 を 選 択 します int col = _flexgroup.columns[" 氏 名 "].Index; int row = FindRow(_flex, name, _flex.selection.row, col, true); if (row > -1) _flex.select(row, col); return true; // 見 つからなかった 場 合 return false; 次 のように 定 義 された FindRow ヘルパーメソッドを 使 用 します 49 Copyright GrapeCity inc. All rights reserved.

51 WPF // 指 定 した 列 内 にテキストを 含 む 行 を 検 索 します int FindRow(C1FlexGrid flex, string text, int startrow, int col, bool wrap) int count = flex.rows.count; for (int off = 0; off <= count; off++) // 下 端 まで 到 達 し 折 り 返 さない 場 合 は ここで 終 了 します if (!wrap && startrow + off >= count) break; // 行 のテキストを 取 得 します int row = (startrow + off) % count; var content = flex[row, col]; // 見 つかりました 行 インデックスを 返 します if (content!= null && content.tostring().indexof(text, StringComparison.OrdinalIgnoreCase) > -1) return row; // 見 つからなかった 場 合 return -1; 上 の FindRow メソッドは C1FlexGrid の Windows フォームバージョンの FindRow メソッドが 提 供 する 機 能 を 実 装 します このメソッドは コントロールのフットプリントを 小 さく 維 持 するために Sliverlight バージョンのグリッドには 組 み 込 まれていませ ん このメソッドは 指 定 された 行 から 開 始 して 指 定 された 列 で 文 字 列 を 検 索 し オプションで 文 字 列 が 見 つからなかった 場 合 には 折 り 返 して 先 頭 から 検 索 をやり 直 します これは 多 くのシナリオで 使 用 される 柔 軟 性 の 高 い 方 法 です 選 択 を 実 行 するもう1つの 一 般 的 なシナリオは データソース 内 で 特 定 のオブジェクトを 選 択 する 場 合 です この 場 合 は ListCollectionView.IndexOf メソッドを 使 ってソースコレクション 内 でオブジェクトのインデックスを 検 索 し 次 に そのイン デックスを 使 って 行 を 選 択 する 方 法 があります しかし この 方 法 には データがグループ 化 されていない 場 合 にのみ 有 効 で あるという 問 題 があります データがグループ 化 されている 場 合 は グループ 行 もカウントされます したがって データソース 内 の 項 目 のインデックスはグリッドの 行 インデックスと 一 致 しません この 問 題 を 解 決 するための 簡 単 な 方 法 は 行 を 列 挙 し 各 行 の DataItem プロパティと 検 索 対 象 の 項 目 とを 比 較 します 次 の コードは この 方 法 を 示 しています WPF var customer = GetSomeCustomer; #if false // ** これは 使 用 しないでください グループ 化 されたデータでは 無 効 です 50 Copyright GrapeCity inc. All rights reserved.

52 int index = view.indexof(customer); if (index > -1) _flex.select(index, 0); #else // こちらがグリッド 内 のオブジェクトを 検 索 する 安 全 な 方 法 です for (int row = 0; row <= _flex.rows.count; row++) if (row.dataitem == customer) _flex.select(row, 0); break; #endif 選 択 範 囲 の 表 示 のカスタマイズ C1FlexGrid には 選 択 範 囲 の 強 調 表 示 をカスタマイズできる2つの 機 能 が 含 まれています Excel 形 式 のマーキー:ShowMarquee プロパティを true に 設 定 すると 選 択 範 囲 を 囲 む 四 角 形 が 自 動 的 に 描 画 さ れて グリッドがとても 見 やすくなります デフォルトでは このマーキーは2ピクセルの 濃 い 黒 色 の 四 角 形 です が Marquee プロパティを 使 ってカスタマイズすることができます 選 択 されたセルのヘッダ:グリッドの ColumnHeaderSelectedBackground および RowHeaderSelectedBackground プロパティにカスタムブラシオブジェクトを 割 り 当 てると 選 択 されたセルに 対 応 す るヘッダが 強 調 表 示 され 選 択 範 囲 を 含 む 行 または 列 を 確 認 しやすくなります これらのプロパティを 組 み 合 わせることで 使 い 慣 れた Excel のルックアンドフィールを 持 つグリッドを 簡 単 に 実 装 することがで きます 次 の 図 に 例 を 示 します 51 Copyright GrapeCity inc. All rights reserved.

53 C1FlexGrid デザイナにはコンテキストメニューがあり このメニューには Excel 形 式 の 設 定 済 み 配 色 (Blue Silver Black)を 選 択 できるオプションがあります このデザイナによって 生 成 された XAML は 再 利 用 可 能 なスタイルリソースに 簡 単 にコピー できます 選 択 モードを 設 定 する C1FlexGrid は SelectionMode プロパティで 制 御 される 豊 富 な 選 択 モードを 備 えています デフォルトの SelectionMode は CellRange ですが 次 の5つの 選 択 モードを 使 用 できます 次 は 各 選 択 モードの 実 行 例 を 示 します 52 Copyright GrapeCity inc. All rights reserved.

54 [ 実 行 例 ] 単 一 セル セル 範 囲 の 選 択 (CellRange) [ 実 行 例 ] 単 一 行 の 選 択 (Row) 53 Copyright GrapeCity inc. All rights reserved.

55 [ 実 行 例 ] 連 続 する 複 数 行 の 選 択 (RowRange) [ 実 行 例 ] 行 複 数 行 連 続 しない 複 数 行 の 選 択 (ListBox) 54 Copyright GrapeCity inc. All rights reserved.

56 VisualBasic Private Sub selectmode_selectionchanged(sender As Object, e As SelectionChangedEventArgs) Dim mode As C1.WPF.FlexGrid.SelectionMode = C1.WPF.FlexGrid.SelectionMode.Cell Select Case selectmode.selectedindex Case 0 mode = C1.WPF.FlexGrid.SelectionMode.Cell Case 1 mode = C1.WPF.FlexGrid.SelectionMode.CellRange Case 2 mode = C1.WPF.FlexGrid.SelectionMode.Row Case 3 mode = C1.WPF.FlexGrid.SelectionMode.RowRange Case 4 mode = C1.WPF.FlexGrid.SelectionMode.ListBox Case Else mode = C1.WPF.FlexGrid.SelectionMode.Cell End Select Dim origionmode As C1.WPF.FlexGrid.ScaleMode = _flex.selectionmode _flex.selectionmode = mode If origionmode = C1.WPF.FlexGrid.SelectionMode.ListBox Then Dim selectedrows As List(Of C1.WPF.FlexGrid.Row) = _flex.rows.selected selectedrows.foreach(addressof ChangeSelected) Shared Sub ChangeSelected(ByVal r As C1.WPF.FlexGrid.Row) r.selected = False C# 55 Copyright GrapeCity inc. All rights reserved.

57 private void selectmode_selectionchanged(object sender, SelectionChangedEventArgs e) C1.WPF.FlexGrid.SelectionMode mode = C1.WPF.FlexGrid.SelectionMode.Cell; switch (selectmode.selectedindex) case 0: mode = C1.WPF.FlexGrid.SelectionMode.Cell; break; case 1: mode = C1.WPF.FlexGrid.SelectionMode.CellRange; break; case 2: mode = C1.WPF.FlexGrid.SelectionMode.Row; break; case 3: mode = C1.WPF.FlexGrid.SelectionMode.RowRange; break; case 4: mode = C1.WPF.FlexGrid.SelectionMode.ListBox; break; default: mode = C1.WPF.FlexGrid.SelectionMode.Cell; break; var origionmode = _flex.selectionmode; _flex.selectionmode = mode; if (origionmode == C1.WPF.FlexGrid.SelectionMode.ListBox) var selectedrows = _flex.rows.selected; selectedrows.foreach(r => r.selected = false); セルを 選 択 する C1FlexGrid のSelect メソッドを 使 用 してセルを 選 択 できます Select メソッドを 使 用 すると セルまたは 範 囲 を 選 択 できるほ か 新 しい 選 択 範 囲 を 表 示 範 囲 までスクロールしてユーザーに 表 示 することもできます たとえば グリッド 内 のセルを 選 択 し そのセルがユーザーに 表 示 されるようにするには 次 のようなコードを 使 用 します VisualBasic ' 行 3 列 2を 選 択 して このセルが 表 示 されるようにします _flex.select(2, 1, True) C# 56 Copyright GrapeCity inc. All rights reserved.

58 // 行 3 列 2を 選 択 して このセルが 表 示 されるようにします _flex.select(2, 1, true); セルを 選 択 する C1FlexGrid のSelect メソッドを 使 用 してセルを 選 択 できます Select メソッドを 使 用 すると セルまたは 範 囲 を 選 択 できるほ か 新 しい 選 択 範 囲 を 表 示 範 囲 までスクロールしてユーザーに 表 示 することもできます たとえば グリッド 内 のセルを 選 択 し そのセルがユーザーに 表 示 されるようにするには 次 のようなコードを 使 用 します VisualBasic ' 行 3 列 2を 選 択 して このセルが 表 示 されるようにします _flex.select(2, 1, True) C# // 行 3 列 2を 選 択 して このセルが 表 示 されるようにします _flex.select(2, 1, true); Enterキーで 次 のセルを 選 択 する Enter キーでセルを 移 動 するには KeyActionEnter プロパティを 変 更 します (デフォルト 値 は MoveDown) たとえば 次 のコードでは MoveAcross に 設 定 してカーソルを 右 に1 列 移 動 します _flex.keyactionenter = C1.WPF.FlexGrid.KeyAction.MoveAcross; なお 最 終 行 最 終 列 のセルで Enter キーが 押 された 際 にグリッドの 最 初 のセルに 移 動 する 場 合 は 別 途 コードで 制 御 する 必 要 があります 次 のコードでは グリッドをデータソースと 連 結 していることを 前 提 とし て Enter キーでフォーカスを 移 動 する 方 法 を 示 します 実 行 例 移 動 後 イメージ 57 Copyright GrapeCity inc. All rights reserved.

59 VisualBasic Public Class MainWindow Public Sub New() InitializeComponent() _flex.itemssource = Product.GetProducts(20) _flex.keyactionenter = C1.WPF.FlexGrid.KeyAction.MoveAcross ' 編 集 時 に 最 終 行 最 終 列 で[Enter]キーを 押 した 際 ' 最 初 のセルにフォーカスを 移 動 します Private Sub _flex_previewkeydown(sender As Object, e As KeyEventArgs) Handles _flex.previewkeydown If e.key = Key.Enter And _flex.selection.bottomrow = _flex.rows.count - 1 And _flex.selection.rightcolumn = _flex.columns.count - 1 Then _flex.select(0, 0, True) btn.focus() e.handled = True End Class C# public partial class MainWindow : Window public MainWindow() InitializeComponent(); _flex.itemssource = Product.GetProducts(20); _flex.keyactionenter = C1.WPF.FlexGrid.KeyAction.MoveAcross; _flex.previewkeydown += _flex_previewkeydown; // 編 集 時 に 最 終 行 最 終 列 で[Enter]キーを 押 した 際 // 最 初 のセルにフォーカスを 移 動 します private void _flex_previewkeydown(object sender, KeyEventArgs e) if (e.key == Key.Enter && _flex.selection.bottomrow == _flex.rows.count - 1 && _flex.selection.rightcolumn == _flex.columns.count - 1) _flex.select(0, 0, true); btn.focus(); e.handled = true; クリックされたセルを 取 得 する C1FlexGridでユーザーがどのパーツをクリックしたかを 判 定 するためにHitTestInfoを 使 用 します HitTestInfoは 指 摘 され た 座 標 にあるコントロールのパーツに 関 する 情 報 を 保 持 します たとえば 次 の 例 では グリッドをデータソースと 連 結 していることを 前 提 として クリックされたセルの 行 列 インデックスを 取 得 する 方 法 を 示 します 58 Copyright GrapeCity inc. All rights reserved.

60 実 行 例 VisualBasic Example Title Private Sub _flex_click(sender As Object, e As MouseButtonEventArgs) Handles _flex.click Dim ht As C1.WPF.FlexGrid.HitTestInfo = _flex.hittest(e) MessageBox.Show("クリックされたセル\n" + Chr(13) + Chr(10) + " 行 :" + ht.row.tostring() + Chr(13) + Chr(10) + " 列 :" + ht.column.tostring()) C# void _flex_click(object sender, MouseButtonEventArgs e) var ht = _flex.hittest(e); MessageBox.Show("クリックされたセル\n" + " 行 :" + ht.row + "\n" + " 列 :" + ht.column); 右 クリックでセルを 選 択 する C1FlexGrid のデフォルト 動 作 としては 右 クリックでセルは 移 動 しませんが MouseRightButtonDown イベントを 利 用 して 右 クリックを 判 別 し カレントセルを 選 択 します 次 のコードでは グリッドをデータソースと 連 結 していることを 前 提 として 右 クリックでカレントセルを 選 択 する 方 法 を 示 します 59 Copyright GrapeCity inc. All rights reserved.

61 VisualBasic Private Sub _flex_mouserightbuttondown(sender As Object, e As MouseButtonEventArgs) Handles _flex.mouserightbuttondown Dim ht As C1.WPF.FlexGrid.HitTestInfo = _flex.hittest(e) _flex.select(ht.row, ht.column, True) C# void _flex_mouserightbuttondown(object sender, MouseButtonEventArgs e) var ht = _flex.hittest(e); _flex.select(ht.row, ht.column, true); 編 集 機 能 編 集 を 許 可 する C1FlexGrid の 編 集 は Excel の 編 集 に 似 ています セルで F2 キーを 押 すか セルをダブルクリックすることで グリッドは 完 全 編 集 モードになります このモードでは ユーザーが[Enter] [Tab] または[Esc]キーを 押 すか マウスを 使 って 選 択 範 囲 を 移 動 するまで セルエディタはアクティブのままになります 完 全 編 集 モードでは カーソルキーを 押 しても グリッドの 編 集 モードは 終 了 しません なお グリッドの 行 や 列 にある 値 の 編 集 を 制 御 するには IsReadOnly プロパティを 使 用 します 反 対 に 編 集 を 許 可 するに はIsReadOnly プロパティを False に 設 定 します 次 のコードでは グリッド 全 体 の 編 集 を 制 御 する 例 を 示 します 実 行 例 Visual Basic Private Sub CheckBox_Checked(sender As Object, e As RoutedEventArgs) Dim chk = TryCast(sender, CheckBox) 60 Copyright GrapeCity inc. All rights reserved.

62 If chk IsNot Nothing Then Dim value = If(chk.IsChecked, False) C1FlexGrid.IsReadOnly = value C# private void CheckBox_Checked(object sender, RoutedEventArgs e) var chk = sender as CheckBox; if (chk!= null) var value = chk.ischecked?? false; C1FlexGrid.IsReadOnly = value; エディタをカスタマイズする 行 や 列 単 位 でエディタをカスタマイズする 場 合 は C1FlexGrid のCellFactory クラスを 使 用 します CellFactory クラスはC1FlexGrid のデフォルトのセルファクトリを 実 装 するクラスで ICellFactory インターフェイスを 実 装 するクラスを 作 成 してそのクラスのインスタンスを CellFactory プロパティに 割 り 当 ててカスタムエディタを 作 成 することを 可 能 とします 次 のコードでは グリッドは Product.cs と 連 結 していることを 前 提 とし CellFactory クラスをオーバーライドしてC1NumericBox のカスタムエディタを 列 に 埋 め 込 む 方 法 を 示 します 実 行 例 Visual Basic ' カスタムエディタを 作 成 します Public Partial Class CustomEditor Inherits Window Public Sub New() InitializeComponent() C1FlexGrid.ItemsSource = FlexForWPF_Editing.Product.GetProducts(10) 61 Copyright GrapeCity inc. All rights reserved.

63 C1FlexGrid.CellFactory = New MyCellFactory() Public Class MyCellFactory Inherits CellFactory Public Overrides Function CreateCellEditor(grid As C1FlexGrid, celltype As CellType, rng As CellRange) As FrameworkElement Dim control = MyBase.CreateCellEditor(grid, celltype, rng) Dim bdr = TryCast(control, Border) If bdr IsNot Nothing Then ' カスタムエディタを1 列 目 の2 行 目 に 割 り 当 てます If rng.row = 2 AndAlso rng.column = 1 Then Dim textbox = TryCast(bdr.Child, TextBox) textbox.background = Brushes.Yellow ' 2 行 2 列 目 のセルではC1NumericBoxをカスタムエディタに 割 り 当 てます If rng.column = 2 Then Dim source = grid.rows(rng.row).dataitem Dim path = grid.columns(rng.column).binding.path Dim mybinding As New Binding() With _ Key.Path = path, _ Key.Source = source, _ Key.Mode = BindingMode.TwoWay _ Dim numericbox As New C1NumericBox() numericbox.setbinding(c1numericbox.valueproperty, mybinding) bdr.child = Nothing bdr.child = numericbox Return control End Function End Class End Class C# // カスタムエディタを 作 成 します public partial class CustomEditor : Window public CustomEditor() InitializeComponent(); C1FlexGrid.ItemsSource = FlexForWPF_Editing.Product.GetProducts(10); C1FlexGrid.CellFactory = new MyCellFactory(); public class MyCellFactory : CellFactory public override FrameworkElement CreateCellEditor(C1FlexGrid grid, CellType celltype, CellRange rng) var control = base.createcelleditor(grid, celltype, rng); var bdr = control as Border; if (bdr!= null) // カスタムエディタを1 列 目 の2 行 目 に 割 り 当 てます if (rng.row == 2 && rng.column == 1) var textbox = bdr.child as TextBox; textbox.background = Brushes.Yellow; // 2 行 2 列 目 のセルではC1NumericBoxをカスタムエディタに 割 り 当 てます if (rng.column == 2) var source = grid.rows[rng.row].dataitem; var path = grid.columns[rng.column].binding.path; Binding mybinding = new Binding() Path = path, Source = source, Mode = BindingMode.TwoWay ; C1NumericBox numericbox = new C1NumericBox(); numericbox.setbinding(c1numericbox.valueproperty, mybinding); 62 Copyright GrapeCity inc. All rights reserved.

64 bdr.child = null; bdr.child = numericbox; return control; 編 集 データをチェックする C1FlexGrid のShowErrors プロパティが True に 設 定 されている 場 合 セルデータを 検 証 できる 方 法 を 紹 介 します (デフォ ルト 値 はTrue) なお 検 証 エラーは いくつかの 方 法 でトリガされます 1. データ 項 目 のプロパティセッターが 例 外 をスローした 場 合 は セルエディタがエラーメッセージを 表 示 し エラーが 修 正 されるまで または 変 更 がキャンセルされるまで エディタはアクティブな 状 態 を 維 持 します 2. データ 項 目 が System.ComponentModel.IDataErrorInfo インターフェイスを 実 装 している 場 合 は デフォルトのイン デクサを 実 装 し 列 固 有 のエラーメッセージ(セルエディタにも 表 示 される)を 返 すことで 項 目 が 列 レベルの 検 証 エラー を 発 生 させることができます または Error プロパティをエラーメッセージに 設 定 することで 項 目 レベルの 検 証 エラー をトリガすることもできます この 場 合 は いずれかの 列 固 有 のエラーとしてではなく 行 ヘッダーの 最 初 のセルにアイ コンとしてエラーが 表 示 されます 3. データ 項 目 が System.ComponentModel.INotifyDataErrorInfo インターフェイスを 実 装 している 場 合 は 上 記 の 列 レベルまたは 項 目 レベルの 検 証 エラーを 非 同 期 に 発 生 させることができま す System.ComponentModel.INotifyDataErrorInfo は System.ComponentModel.IDataErrorInfo より 複 雑 で 実 装 も 難 しくなります 実 行 例 下 のコードでは 簡 単 な 例 外 と System.ComponentModel.IDataErrorInfo インターフェイスを 使 用 して データクラスに 検 証 を 実 装 する 方 法 を 示 します 63 Copyright GrapeCity inc. All rights reserved.

65 VisualBasic Public Class Product Implements INotifyPropertyChanged Implements IEditableObject Implements IDataErrorInfo ' ** 方 法 1:Price が 負 の 値 に 設 定 されたときに 例 外 をスローします Public Property Price() As System.Nullable(Of Double) Get Return DirectCast(GetValue("Price"), System.Nullable(Of Double)) End Get Set If value <= 0 Then Throw New Exception("Price must be greater than zero!") SetValue("Price", value) End Set End Property ' ** 方 法 2: 特 定 の 列 のエラーを 返 します Private Default ReadOnly Property IDataErrorInfo_Item(columnName As String) As String Implements IDataErrorInfo.this Get Dim msg As String = Nothing Select Case columnname Case "Cost" If Cost <= 0 Then msg = "Cost must be greater than zero!" Exit Select End Select Return msg End Get End Property ' ** 方 法 3: 行 全 体 のエラーを 返 します ' ( 検 証 は 複 数 の 列 に 基 づきます) Private ReadOnly Property IDataErrorInfo_Error() As String Implements IDataErrorInfo.[Error] Get Return If(Price < Cost, "Price must be greater than Cost!", Nothing) End Get End Property End Class C# public class Product : INotifyPropertyChanged, IEditableObject, IDataErrorInfo 64 Copyright GrapeCity inc. All rights reserved.

66 // ** 方 法 1:Price が 負 の 値 に 設 定 されたときに 例 外 をスローします public double? Price get return (double?)getvalue("price"); set if (value <= 0) throw new Exception("Price must be greater than zero!"); SetValue("Price", value); // ** 方 法 2: 特 定 の 列 のエラーを 返 します string IDataErrorInfo.this[string columnname] get string msg = null; switch (columnname) case "Cost": if (Cost <= 0) msg = "Cost must be greater than zero!"; break; return msg; // ** 方 法 3: 行 全 体 のエラーを 返 します // ( 検 証 は 複 数 の 列 に 基 づきます) string IDataErrorInfo.Error get return Price < Cost? "Price must be greater than Cost!" : null; セル 編 集 時 の 改 行 を 許 可 する デフォルトではセル 編 集 時 に [Alt]+[Enter] または [Ctrl]+[Enter] または [Shift]+[Enter] [Ctrl]+[J] [Ctrl]+[Shift]+[J])で テキストを 改 行 する ことができます この 動 作 を 制 御 する 必 要 がある 場 合 は 下 記 のように CellFactory クラスをオーバーライドしたカスタムセルファクトリを 使 用 してセル 上 の 動 作 をカスタマイズできます 65 Copyright GrapeCity inc. All rights reserved.

67 Visual Basic Public Sub New() InitializeComponent() C1FlexGrid.ItemsSource = FlexForWPF_Editing.Product.GetProducts(10) ' カスタムセルファクトリを 作 成 します C1FlexGrid.CellFactory = New CustomerCellFactory() Public Class CustomerCellFactory Inherits CellFactory Public Overrides Function CreateCellEditor(grid As C1FlexGrid, celltype As CellType, rng As CellRange) As FrameworkElement Dim control = MyBase.CreateCellEditor(grid, celltype, rng) Dim bdr = TryCast(control, Border) Dim tb = TryCast(bdr.Child, TextBox) AddHandler tb.previewkeyup, AddressOf tb_previewkeyup Return control End Function Private Sub tb_previewkeyup(sender As Object, e As KeyEventArgs) ' 左 側 の[Ctrl]+[Enter]キーを 押 下 すると 改 行 を 許 可 します If e.key = Key.Enter AndAlso Keyboard.IsKeyDown(Key.LeftCtrl) Then Dim tb = TryCast(sender, TextBox) tb.textwrapping = TextWrapping.Wrap If tb IsNot Nothing Then Dim linebreak As String = vbcr & vblf Dim start = tb.selectionstart Dim text1 = tb.text.substring(0, tb.selectionstart) Dim text2 = tb.text.substring(tb.selectionstart) Dim sb As New StringBuilder() Dim newtext = sb.append(text1).append(linebreak).append(text2).tostring() start = start + linebreak.length tb.text = newtext tb.selectionstart = start e.handled = True End Class C# public MultilineEditor() InitializeComponent(); C1FlexGrid.ItemsSource = FlexForWPF_Editing.Product.GetProducts(10); // カスタムセルファクトリを 作 成 します C1FlexGrid.CellFactory = new CustomerCellFactory(); public class CustomerCellFactory : CellFactory public override FrameworkElement CreateCellEditor(C1FlexGrid grid, CellType celltype, CellRange rng) var control = base.createcelleditor(grid, celltype, rng); var bdr = control as Border; var tb = bdr.child as TextBox; tb.previewkeyup += tb_previewkeyup; return control; void tb_previewkeyup(object sender, KeyEventArgs e) 66 Copyright GrapeCity inc. All rights reserved.

68 // 左 側 の[Ctrl]+[Enter]キーを 押 下 すると 改 行 を 許 可 します if (e.key == Key.Enter && Keyboard.IsKeyDown(Key.LeftCtrl)) var tb = sender as TextBox; tb.textwrapping = TextWrapping.Wrap; if (tb!= null) string linebreak = "\r\n"; var start = tb.selectionstart; var text1 = tb.text.substring(0, tb.selectionstart); var text2 = tb.text.substring(tb.selectionstart); StringBuilder sb = new StringBuilder(); var newtext = sb.append(text1).append(linebreak).append(text2).tostring(); start = start + linebreak.length; tb.text = newtext; tb.selectionstart = start; e.handled = true; IMEモードを 切 り 替 える C1FlexGrid コントロールにおいてIME 制 御 を 行 うには InputMethod クラスを 使 用 してIMEの 状 態 を 取 得 や 設 定 します また グリッドでセル 編 集 時 のIME 変 換 モードを 切 りかえる 方 法 として InputMethod を 使 用 します たとえば 次 のコードでは 列 ごとに 編 集 時 のIMEの 変 換 モードを 切 り 替 える 方 法 を 示 します 最 初 の 列 はXAML 上 でIMEを 制 御 する 方 法 ( 編 集 用 のTextBoxに 対 してIME 制 御 関 連 の 設 定 を 行 う)を 示 します 2 列 目 以 降 は コード 上 でIMEを 制 御 する 方 法 を 示 します それに 加 えて セルが 選 択 された 時 点 で 強 制 的 に 編 集 モードに 切 り 替 える 方 法 も 示 します 実 行 例 マークアップ <c1:c1flexgrid x:name="c1flexgrid1" AutoGenerateColumns="False" ItemsSource="Binding" Margin="0" > <c1:c1flexgrid.columns> <c1:column Header=" 半 角 カタカナ"> <c1:column.celltemplate> <DataTemplate> <TextBlock Text="Binding Column0, Mode=OneWay" /> </DataTemplate> </c1:column.celltemplate> <c1:column.celleditingtemplate> <DataTemplate> <TextBox Text="Binding Column0, Mode=TwoWay" InputMethod.PreferredImeState="On" InputMethod.PreferredImeConversionMode="Native" /> </DataTemplate> </c1:column.celleditingtemplate> </c1:column> <c1:column x:name="column2" Header=" 全 角 カタカナ" Binding="Binding Column1" /> <c1:column x:name="column3" Header="ひらがな" Binding="Binding Column2" /> <c1:column x:name="column4" Header="IME オフ" Binding="Binding Column3" /> </c1:c1flexgrid.columns> </c1:c1flexgrid> Visual Basic Public Partial Class MainWindow Inherits Window Public Sub New() InitializeComponent() Me.DataContext = SampleData.GetSampleData() 67 Copyright GrapeCity inc. All rights reserved.

69 AddHandler Me.c1FlexGrid1.SelectionChanged, AddressOf c1flexgrid1_selectionchanged AddHandler Me.c1FlexGrid1.BeginningEdit, AddressOf c1flexgrid1_beginningedit AddHandler Me.c1FlexGrid1.CellEditEnded, AddressOf c1flexgrid1_celleditended Private Sub c1flexgrid1_beginningedit(sender As Object, e As CellEditEventArgs) ' 条 件 に 基 づいて TextBoxの IME 変 換 モードを 切 り 替 えます Select Case e.column Case 1 ' 全 角 カタカナ InputMethod.Current.ImeState = InputMethodState.[On] InputMethod.Current.ImeConversionMode = ImeConversionModeValues.Katakana Or ImeConversionModeValues.FullShape Exit Select Case 2 ' ひらがな InputMethod.Current.ImeState = InputMethodState.[On] InputMethod.Current.ImeConversionMode = ImeConversionModeValues.Native Or ImeConversionModeValues.FullShape Exit Select Case 3 ' IME オフ InputMethod.Current.ImeState = InputMethodState.Off Exit Select End Select Private Sub c1flexgrid1_celleditended(sender As Object, e As CellEditEventArgs) InputMethod.Current.ImeState = InputMethodState.Off Private Sub c1flexgrid1_selectionchanged(sender As Object, e As CellRangeEventArgs) ' 必 要 に 応 じて セルを 編 集 状 態 にします ' これは 非 編 集 状 態 でセル 内 に IME 入 力 を 行 おうとすると セルに 対 するインライン 入 力 が 行 われないという 制 限 に 対 する 対 処 法 となります Me.c1FlexGrid1.StartEditing(False) End Class C# public partial class MainWindow : Window public MainWindow() InitializeComponent(); this.datacontext = SampleData.GetSampleData(); this.c1flexgrid1.selectionchanged += c1flexgrid1_selectionchanged; this.c1flexgrid1.beginningedit += c1flexgrid1_beginningedit; this.c1flexgrid1.celleditended += c1flexgrid1_celleditended; private void c1flexgrid1_beginningedit(object sender, CellEditEventArgs e) // 条 件 に 基 づいて TextBoxの IME 変 換 モードを 切 り 替 えます switch (e.column) case 1: // 全 角 カタカナ InputMethod.Current.ImeState = InputMethodState.On; InputMethod.Current.ImeConversionMode = ImeConversionModeValues.Katakana ImeConversionModeValues.FullShape; break; case 2: // ひらがな InputMethod.Current.ImeState = InputMethodState.On; InputMethod.Current.ImeConversionMode = ImeConversionModeValues.Native ImeConversionModeValues.FullShape; break; case 3: // IME オフ InputMethod.Current.ImeState = InputMethodState.Off; break; private void c1flexgrid1_celleditended(object sender, CellEditEventArgs e) InputMethod.Current.ImeState = InputMethodState.Off; private void c1flexgrid1_selectionchanged(object sender, CellRangeEventArgs e) // 必 要 に 応 じて セルを 編 集 状 態 にします // これは 非 編 集 状 態 でセル 内 に IME 入 力 を 行 おうとすると セルに 対 するインライン 入 力 が 行 われないという 制 限 に 対 する 対 処 法 となります this.c1flexgrid1.startediting(false); Enterキーで 編 集 を 開 始 する 既 定 ではEnterキーでセルを 移 動 する 動 作 となりますが Enterキーによって 編 集 を 開 始 するようにするには StartEditing メソッド を 使 用 できます 次 のコードでは PreviewKeyUp / PreviewKeyDown イベント 内 にStartEditing メソッドでセルを 強 制 に 編 集 モードに 設 定 する 方 法 を 示 します 68 Copyright GrapeCity inc. All rights reserved.

70 Visual Basic Public Sub New() InitializeComponent() For i As Integer = 0 To 9 _flex.columns.add(new Column()) Next For j As Integer = 0 To 9 _flex.rows.add(new Row()) Next For row As Integer = 0 To 9 For col As Integer = 0 To 9 _flex(row, col) = String.Format("[0,1]", row.tostring(), col.tostring()) Next Next AddHandler _flex.previewkeydown, AddressOf _flex_previewkeydown AddHandler _flex.previewkeyup, AddressOf _flex_previewkeyup ' Enterキーによる 編 集 の 開 始 を 有 効 にします Private Sub _flex_previewkeyup(sender As Object, e As KeyEventArgs) If e.key = Key.Enter Then e.handled = True Private Sub _flex_previewkeydown(sender As Object, e As KeyEventArgs) If e.key = Key.Enter Then _flex.startediting(false, _flex.selection.row, _flex.selection.column) e.handled = True C# public MainWindow() InitializeComponent(); for (int i = 0; i < 10; i++) _flex.columns.add(new Column()); for (int j = 0; j < 10; j++) _flex.rows.add(new Row()); for (int row = 0; row < 10; row++) for (int col = 0; col < 10; col++) _flex[row, col] = string.format("[0,1]", row.tostring(), col.tostring()); 69 Copyright GrapeCity inc. All rights reserved.

71 _flex.previewkeydown += _flex_previewkeydown; _flex.previewkeyup += _flex_previewkeyup; // Enterキーによる 編 集 の 開 始 を 有 効 にします void _flex_previewkeyup(object sender, KeyEventArgs e) if (e.key == Key.Enter) e.handled = true; void _flex_previewkeydown(object sender, KeyEventArgs e) if (e.key == Key.Enter) _flex.startediting(false, _flex.selection.row, _flex.selection.column); e.handled = true; 矢 印 キーで 編 集 を 終 了 させない 矢 印 キーで 編 集 が 終 了 されないようにするには StartEditing() を 呼 び 出 すだけで 済 みます 次 の 例 をご 参 照 ください Visual Basic InitializeComponent() Using _flex.rows.defernotifications() Dim rowcount As Integer = 10 Dim colcount As Integer = 7 For i As Integer = 0 To rowcount - 1 _flex.rows.add(new C1.WPF.FlexGrid.Row()) Next For i As Integer = 0 To colcount - 1 _flex.columns.add(new C1.WPF.FlexGrid.Column()) Next For r As Integer = 0 To rowcount - 1 For c As Integer = 0 To colcount - 1 _flex(r, c) = String.Format("[0,1]", r.tostring(), c.tostring()) Next Next ' 矢 印 キーによる 編 集 の 終 了 を 無 効 にします _flex.startediting(true) End Using C# 70 Copyright GrapeCity inc. All rights reserved.

72 InitializeComponent(); using (_flex.rows.defernotifications()) int rowcount = 10; int colcount = 7; for (int i = 0; i < rowcount; i++) _flex.rows.add(new C1.WPF.FlexGrid.Row()); for (int i = 0; i < colcount; i++) _flex.columns.add(new C1.WPF.FlexGrid.Column()); for (int r = 0; r < rowcount; r++) for (int c = 0; c < colcount; c++) _flex[r, c] = string.format("[0,1]", r.tostring(), c.tostring()); // 矢 印 キーによる 編 集 の 終 了 を 無 効 にします _flex.startediting(true); ダブルクリック 時 にテキストを 選 択 状 態 にする グリッドでセルをダブルクリックするまたはF2キーを 押 すと セルのテキスト 全 体 が 選 択 されます これは C1FlexGrid のデフォルト 動 作 となりますが セルに 直 接 入 力 を 行 う 場 合 や 編 集 状 態 のとき 入 力 を 行 う 場 合 新 たに 入 力 した 値 を 以 前 の 値 の 最 後 の 位 置 に 挿 入 することも 可 能 です C1FlexGrid でカスタム CellFactory クラスを 実 装 して 実 現 できます たとえば 次 のコードでは 連 結 グリッドで 直 接 入 力 を 行 ったとき 追 記 編 集 を 実 現 する 方 法 を 示 します Visual Basic Public Sub New() InitializeComponent() Dim p As ICollectionView = Product.GetProducts(100) _flex.itemssource = p _flex.cellfactory = New MyCellFactory() ' カスタムセルファクトリを 作 成 します Public Class MyCellFactory Inherits CellFactory Private origintext As String = String.Empty Public Overrides Function CreateCellEditor(grid As C1FlexGrid, celltype As CellType, rng As CellRange) As FrameworkElement Dim control = MyBase.CreateCellEditor(grid, celltype, rng) Dim bdr = TryCast(control, Border) Dim txt = TryCast(bdr.Child, TextBox) origintext = txt.text AddHandler txt.textchanged, AddressOf txt_textchanged Return control End Function Private Sub txt_textchanged(sender As Object, e As TextChangedEventArgs) Dim t = TryCast(sender, TextBox) RemoveHandler t.textchanged, AddressOf txt_textchanged t.text = origintext & Convert.ToString(t.Text) t.selectionstart = t.text.length End Class 71 Copyright GrapeCity inc. All rights reserved.

73 C# public MainWindow() InitializeComponent(); _flex.itemssource = Product.GetProducts(100); _flex.cellfactory = new MyCellFactory(); // カスタムセルファクトリを 作 成 します public class MyCellFactory : CellFactory string origintext = string.empty; public override FrameworkElement CreateCellEditor(C1FlexGrid grid, CellType celltype, CellRange rng) var control = base.createcelleditor(grid, celltype, rng); var bdr = control as Border; var txt = bdr.child as TextBox; origintext = txt.text; txt.textchanged += txt_textchanged; return control; void txt_textchanged(object sender, TextChangedEventArgs e) var t = (sender as TextBox); t.textchanged -= txt_textchanged; t.text = origintext + t.text; t.selectionstart = t.text.length; 常 時 入 力 モードにする C1FlexGrid の 編 集 はデフォルトで 有 効 になっています そして 通 常 入 力 動 作 は MSExcel に 似 ています セルにテキストを 直 接 入 力 すると グリッドはクイッ ク 編 集 モードになります ユーザーが Enter Tab Esc またはいずれかの 矢 印 キーを 押 すまで セルエディタはアクティブなままになります クイック 編 集 モー ドでは カーソルキーを 押 すと グリッドの 編 集 モードは 終 了 します なお グリッドがフォーカスを 得 たとき また 選 択 されたセルが 変 更 されたときに グリッドを 自 動 的 に 入 力 モードにするには グリッドを 自 動 的 に 入 力 モードにす るには 次 のようにStartEditing メソッドを 使 用 できます Visual Basic Public Sub New() InitializeComponent() For i As Integer = 0 To 9 _flex.rows.add(new Row()) Next For j As Integer = 0 To 9 _flex.columns.add(new Column()) Next For r As Integer = 0 To 9 For c As Integer = 0 To 9 _flex(r, c) = String.Format("[0,1]", r.tostring(), c.tostring()) Next Next Private Sub _flex_selectionchanged(sender As Object, e As CellRangeEventArgs) Handles _flex.selectionchanged _flex.startediting(false, _flex.selection.row, _flex.selection.column) C# 72 Copyright GrapeCity inc. All rights reserved.

74 public MainWindow() InitializeComponent(); for (int i = 0; i < 10; i++) _flex.rows.add(new Row()); for (int j = 0; j < 10; j++) _flex.columns.add(new Column()); for (int row = 0; row < 10; row++) for (int col = 0; col < 10; col++) _flex[row, col] = String.Format("[0,1]", row, col); _flex.selectionchanged += _flex_selectionchanged; void _flex_selectionchanged(object sender, CellRangeEventArgs e) _flex.startediting(false, _flex.selection.row, _flex.selection.column); オートコンプリートとマップされた 列 オートコンプリートとマップされた 列 は ColumnValueConverter と 呼 ばれる 組 み 込 みクラスを 使 って 実 装 されます 以 下 に このクラスで 処 理 するオートコンプリート 機 能 の2つのシナリオを 示 します オートコンプリートの 排 他 モード(リストボックス 形 式 の 編 集 ) いくつかの 特 定 の 値 のみを 受 け 入 れることができる 列 たとえば 文 字 列 型 の 都 道 府 県 列 と 都 道 府 県 のリストがあるとしま す ユーザーはリストから 都 道 府 県 を 選 択 しなければならず リストにない 都 道 府 県 は 入 力 できません このシナリオは 2 行 のコードを 使 って 処 理 できます WPF var c = _flexedit.columns[" 都 道 府 県 "]; c.valueconverter = new ColumnValueConverter(GetCountryNames(), true); ColumnValueConverter コンストラクタの 最 初 のパラメータは 有 効 な 値 のリストです 2 番 目 のパラメータは ユーザーがリ ストにない 値 を 入 力 できるようにするかどうかを 設 定 します(この 例 では 入 力 できないようにします) オートコンプリートの 非 排 他 モード(コンボボックス 形 式 の 編 集 ) いくつかの 特 定 の 値 を 含 み それ 以 外 の 値 も 受 け 入 れる 列 たとえば 文 字 列 型 の 都 道 府 県 列 がある 場 合 に ユーザーが 簡 単 に 選 択 できるように 都 道 府 県 のリストを 提 供 しつつ ユーザーがリストにない 値 も 入 力 できるようにします このシナリオも 2 行 のコードを 使 って 処 理 できます WPF var c = _flexedit.columns[" 都 道 府 県 "]; c.valueconverter = new ColumnValueConverter(GetCountryNames(), false); 73 Copyright GrapeCity inc. All rights reserved.

75 同 様 に ColumnValueConverter コンストラクタの 最 初 のパラメータは 有 効 な 値 のリストです この 場 合 2 番 目 のパラメータ は ユーザーがリストにない 値 を 入 力 できるように リストを 排 他 的 にしないように 設 定 します 次 の 項 目 に データマップ 機 能 の 詳 細 を 示 します データマップされた 列 データマップされた 列 には 実 際 の 値 ではなく キーが 含 まれます たとえば 列 の 内 容 は 都 道 府 県 コードを 表 す 整 数 であって も 対 応 する 都 道 府 県 をユーザーが 表 示 および 編 集 できるようにします このシナリオでは 2 行 を 超 えるコードが 必 要 になります WPF // 都 道 府 県 コード 列 で コードの 代 わりに 県 名 を 表 示 するようにマップします Dictionary<int, string> dct = new Dictionary<int, string>(); foreach (var country in Customer.GetCountries()) dct[dct.count] = country; col = _flex.columns[" 都 道 府 県 コード"]; col.valueconverter = new ColumnValueConverter(dct); col.horizontalalignment = HorizontalAlignment.Left; col.width = new GridLength(120); このコードは 最 初 に 都 道 府 県 コードの 値 ( 整 数 )を 都 道 府 県 ( 文 字 列 )にマップする Dictionary を 構 築 します 次 に その Dictionary を 使 って ColumnValueConverter を 構 築 し 前 の 例 と 同 様 に そのコンバータを 列 の ValueConverter プロパティに 割 り 当 てます ユーザーは Dictionary に 存 在 するすべての 都 道 府 県 を 選 択 でき マップされていない 値 を 入 力 できなくなります 最 後 に このコードは 列 の 配 置 を 左 揃 えに 設 定 します この 列 の 実 際 の 内 容 は 整 数 値 なので デフォルトでは 右 揃 えで 配 置 されます ここでは 氏 名 を 表 示 するため 左 揃 えに 設 定 します カスタムエディタの 使 用 C1FlexGrid は 2つの 組 み 込 みエディタを 備 えています 1つはブール 値 のチェックボックスで もう1つは 前 述 したオートコ 74 Copyright GrapeCity inc. All rights reserved.

76 ンプリートとリスト 選 択 によって 標 準 の TextBox が 拡 張 された C1FlexComboBox です このドキュメントで 前 述 したカスタムセルを 作 成 する 場 合 と 同 じメカニズムを 使 用 して 独 自 のエディタを 作 成 および 使 用 できま す カスタム CellFactory クラスを 実 装 し CreateCellEditor メソッドをオーバーライドして エディタを 作 成 して 基 底 のデー タ 値 に 連 結 します XAML を 使 用 して カスタムエディタを 必 要 とする 列 に 対 して CellEditingTemplate を 指 定 します エディタの 設 定 組 み 込 みエディタとカスタムエディタのどちらを 使 用 する 場 合 でも PrepareCellForEdit イベントを 利 用 することにより エディ タはアクティブにする 前 に 設 定 することができます たとえば 次 のコードは 選 択 範 囲 では 背 景 が 青 色 文 字 が 黄 色 になるよ うにエディタを 変 更 します WPF // イベントハンドラを 作 成 します _grid.preparecellforedit += _grid_preparecellforedit; // 選 択 範 囲 の 外 観 を 変 更 し エディタをカスタマイズします void _grid_preparecellforedit(object sender, CellEditEventArgs e) var b = e.editor as Border; var tb = b.child as TextBox; tb.selectionbackground = new SolidColorBrush(Colors.Blue); tb.selectionforeground = new SolidColorBrush(Colors.Yellow); スタイル セルのスタイルを 設 定 する CellFactoryクラスを 継 承 したカスタムセルファクトリを 使 用 して 特 定 のセルやセル 範 囲 をアクセスする 手 法 でセルに 任 意 のスタイルを 設 定 することができます 次 のコードでは グリッドをデータソースと 連 結 していることを 前 提 として CellFactory クラスの 使 用 方 法 を 示 します 実 行 例 VisualBasic 75 Copyright GrapeCity inc. All rights reserved.

77 'CellFactoryクラスを 継 承 してカスタムセルファクトリを 使 用 します Public Class CustomCellFactory Inherits CellFactory Public Overrides Function CreateCell(grid As C1FlexGrid, celltype As CellType, rng As CellRange) As FrameworkElement Dim ctrl = MyBase.CreateCell(grid, celltype, rng) Dim bdr = DirectCast(ctrl, Border) If bdr IsNot Nothing AndAlso rng.row = 1 AndAlso rng.column = 2 Then bdr.background = Brushes.Orange Dim cellrange As New CellRange(5, 1, 6, 3) If cellrange.contains(rng) Then bdr.background = Brushes.Orange Return ctrl End Function End Class C# //CellFactoryクラスを 継 承 してカスタムセルファクトリを 使 用 します public class CustomCellFactory : CellFactory public override FrameworkElement CreateCell(C1FlexGrid grid, CellType celltype, CellRange rng) var ctrl = base.createcell(grid, celltype, rng); var bdr = ctrl as Border; if (bdr!= null && rng.row == 1 && rng.column == 2) bdr.background = Brushes.Orange; CellRange cellrange = new CellRange(5, 1, 6, 3); if (cellrange.contains(rng)) bdr.background = Brushes.Orange; return ctrl; 条 件 付 き 書 式 を 設 定 する グリッドでセルのデータに 応 じて 書 式 を 設 定 する 方 式 では C1FlexGrid の Columnオブジェクトに 含 まれる CellTemplate および CellEditingTemplate プロパティを 使 用 して 列 内 のセルを 編 集 するためのビジュアル 要 素 を 指 定 します たとえば 次 の 例 では セルの 値 に 応 じて 赤 や 緑 色 で 表 示 する 場 合 条 件 付 き 列 に 対 して CellTemplate を 指 定 してカスタムセルを 作 成 します CellTemplate は 必 要 なバウンドプロパティを 含 むTextBlock 要 素 を 持 ちます マークアップ <c1:column Binding="Binding Price"> <c1:column.celltemplate> <DataTemplate> <TextBlock Text="Binding Price, StringFormat=n0" HorizontalAlignment="Right" Foreground="Binding Price, Converter=StaticResource ForegroundConverter, ConverterParameter=StaticResource PriceRange " FontWeight="Binding Price, Converter=StaticResource FontWeightConverter, ConverterParameter=StaticResource PriceRange " /> </DataTemplate> </c1:column.celltemplate> </c1:column> 上 記 のコードでは カスタムセルテンプレートの 列 を 作 成 してデータソースの Price フィールドを TextBlock 要 素 内 に Text Foreground FontWeight プロパティに 連 結 しています なお Text プロパティはDouble 型 で 自 動 に 文 字 列 に 変 換 されてデータに 連 結 できます しかし Foreground FontWeight プロパティの 場 合 はDouble 値 はブラシュなどに 変 換 できませんので コンバータを 指 定 する 必 要 があります ForegroundConverter と FontWeightConverter コンバータは 範 囲 を 指 定 するパラメータをサポートしています コンバータはこの 範 囲 を 使 って 適 当 なブラッシュやフォントウエートを 選 択 します また コンバータとパラメータの 両 方 がページリソースとしてXAML 内 に 指 定 されます 詳 細 については 次 のコードをご 参 照 ください 実 行 例 マークアップ <Window.Resources> <!-- ForeGroundConverter.cs 内 にコンバータを 実 現 します--> <local:foregroundconverter x:key="foregroundconverter" /> <!-- FontWeightConverter.cs 内 にコンバータを 実 現 します--> <local:fontweightconverter x:key="fontweightconverter" /> <!-- コンバータ 範 囲 (ポイントの 値 として 実 現 し X は 最 低 値 と Y は 最 高 値 となります) --> <Point x:key="pricerange" X="500" Y="1500" /> <Point x:key="weightrange" X="200" Y="1000" /> <Point x:key="costrange" X="200" Y="1000" /> <Point x:key="volumerange" X="2000" Y="6000" /> </Window.Resources> コンバータの 実 現 方 法 については 次 のコードをご 参 照 ください VisualBasic 'ForegroundConverter Public Class ForegroundConverter 76 Copyright GrapeCity inc. All rights reserved.

78 Implements IValueConverter FlexGrid for WPF/Silverlight Shared _brblack As New SolidColorBrush(Colors.Black) Shared _brred As New SolidColorBrush(Colors.Red) Shared _brgreen As New SolidColorBrush(Colors.Green) Public Function Convert(value As Object, targettype As Type, parameter As Object, culture As Globalization.CultureInfo) As Object Implements System.Windows.Data.IValueConverter.Convert Dim range = DirectCast(parameter, Point) Dim val As Double = CDbl(value) Return If(val < range.x, _brred, If(val > range.y, _brgreen, _brblack)) End Function Public Function ConvertBack(value As Object, targettype As Type, parameter As Object, culture As Globalization.CultureInfo) As Object Implements System.Windows.Data.IValueConverter.ConvertBack Throw New NotImplementedException() End Function End Class 'FontWeightConverter Public Class FontWeightConverter Implements IValueConverter Public Function Convert(value As Object, targettype As Type, parameter As Object, culture As Globalization.CultureInfo) As Object Implements System.Windows.Data.IValueConverter.Convert Dim range = DirectCast(parameter, Point) Dim val As Double = CDbl(value) Return If(val < range.x, FontWeights.Bold, If(val > range.y, FontWeights.Bold, FontWeights.Normal)) End Function Public Function ConvertBack(value As Object, targettype As Type, parameter As Object, culture As Globalization.CultureInfo) As Object Implements System.Windows.Data.IValueConverter.ConvertBack Throw New NotImplementedException() End Function End Class C# //ForegroundConverter public class ForegroundConverter : System.Windows.Data.IValueConverter static SolidColorBrush _brblack = new SolidColorBrush(Colors.Black); static SolidColorBrush _brred = new SolidColorBrush(Colors.Red); static SolidColorBrush _brgreen = new SolidColorBrush(Colors.Green); public object Convert(object value, Type targettype, object parameter, System.Globalization.CultureInfo culture) var range = (Point)parameter; double val = (double)value; return val < range.x? _brred : val > range.y? _brgreen : _brblack; public object ConvertBack(object value, Type targettype, object parameter, System.Globalization.CultureInfo culture) throw new NotImplementedException(); //FontWeightConverter public class FontWeightConverter : System.Windows.Data.IValueConverter public object Convert(object value, Type targettype, object parameter, System.Globalization.CultureInfo culture) var range = (Point)parameter; double val = (double)value; return val < range.x? FontWeights.Bold : val > range.y? FontWeights.Bold : FontWeights.Normal; public object ConvertBack(object value, Type targettype, object parameter, System.Globalization.CultureInfo culture) throw new NotImplementedException(); ボタン ボタンを 表 示 する Column クラスの CellTemplate プロパティは 編 集 モードでないセルのテンプレートを 定 義 します C1FlexGrid で CellTemplate ロパティを 使 用 してテンプレートセルを 作 成 で きます たとえば 次 の 例 は ボタンセルのテンプレート 列 を 追 加 してボタンクリックで 行 の 情 報 を 表 示 する 方 法 を 示 します 実 行 例 ボタンクリックで 表 示 する 詳 細 情 報 メッセージボックス マークアップ <c1:c1flexgrid x:name="_flex" Grid.Row="1" AutoGenerateColumns="False" Margin="5,5,5,5" > <c1:c1flexgrid.columns> <c1:column Header="Product" Binding="Binding Line" /> <c1:column Header="Color" Binding="Binding Color" /> 77 Copyright GrapeCity inc. All rights reserved.

79 <c1:column Header="Rating" Binding="Binding Rating" /> <!--テンプレート 列 を 追 加 します--> <c1:column ColumnName="テンプレート"> <c1:column.celltemplate> <DataTemplate> <Button Content=" 詳 細 情 報..." Click="ShowDetail_Click" /> </DataTemplate> </c1:column.celltemplate> </c1:column> </c1:c1flexgrid.columns> </c1:c1flexgrid> VisualBasic Private Sub ShowDetail_Click(sender As Object, e As RoutedEventArgs) Dim product = GetProduct(sender) If product IsNot Nothing Then Dim detail = String.Format("Product: 0, Color: 1, Rating: 2", product.name, product.color, product.rating) MessageBox.Show(detail, " 詳 細 情 報 ", MessageBoxButton.OK) 'グリッド 上 にコントロールとして 表 示 されるProductを 取 得 します Private Function GetProduct(control As Object) As Product Dim e As FrameworkElement = TryCast(control, FrameworkElement) Return TryCast(e.DataContext, Product) End Function C# private void ShowDetail_Click(object sender, RoutedEventArgs e) var product = GetProduct(sender); if (product!= null) var detail = string.format("product: 0, Color: 1, Rating: 2", product.name, product.color, product.rating); MessageBox.Show(detail, " 詳 細 情 報 ", MessageBoxButton.OK); //グリッド 上 にコントロールとして 表 示 されるProductを 取 得 します Product GetProduct(object control) FrameworkElement e = control as FrameworkElement; return e.datacontext as Product; 編 集 ボタンを 表 示 する Column クラスの CellEditingTemplate プロパティは 編 集 モードでセルを 作 成 します また CellEditingTemplate プロパティ は XAML で 定 義 でき 列 内 のセルを 表 すビジュアル 要 素 の 作 成 に 使 用 されます たとえば 次 の 例 は ボタンセルのテンプレート 列 を 追 加 してボタンクリックでセルを 編 集 モードにする 方 法 を 示 します 実 行 例 78 Copyright GrapeCity inc. All rights reserved.

80 マークアップ <c1:c1flexgrid x:name="_flex" Grid.Row="1" AutoGenerateColumns="False" Margin="5,5,5,5"> <c1:c1flexgrid.columns> <c1:column Header="Product" Binding="Binding Line"/> <c1:column Header="Color" Binding="Binding Color"/> <c1:column Header="Rating" Binding="Binding Rating"/> <c1:column ColumnName="テンプレート"> <c1:column.celltemplate> <DataTemplate> <Button Content=" 編 集..." Click="Button_Click" /> </DataTemplate> </c1:column.celltemplate> </c1:column> </c1:c1flexgrid.columns> </c1:c1flexgrid> VisualBasic Private Sub Button_Click(sender As Object, e As RoutedEventArgs) Dim product = GetProduct(sender) Dim list = TryCast(_flex.CollectionView.SourceCollection, IList(Of Product)) Dim index = list.indexof(product) If index >= 0 Then _flex.startediting(false, index, 2) 'グリッド 上 にコントロールとして 表 示 されるProductを 取 得 します Private Function GetProduct(control As Object) As Product Dim e As FrameworkElement = TryCast(control, FrameworkElement) Return TryCast(e.DataContext, Product) End Function 79 Copyright GrapeCity inc. All rights reserved.

81 C# private void Button_Click(object sender, RoutedEventArgs e) var product = GetProduct(sender); var list = _flex.collectionview.sourcecollection as IList<Product>; var index = list.indexof(product); if (index >= 0) _flex.startediting(false, index, 2); //グリッド 上 にコントロールとして 表 示 されるProductを 取 得 します Product GetProduct(object control) FrameworkElement e = control as FrameworkElement; return e.datacontext as Product; 削 除 ボタンを 表 示 する C1FlexGrid で CellTemplate プロパティを 使 用 して テンプレートセルを 作 成 して 削 除 ボタンを 表 示 することができます たとえば 次 の 例 は ボタンセルのテンプレート 列 を 追 加 してボタンクリックで 行 の 情 報 を 削 除 する 方 法 を 示 します 実 行 例 マークアップ <c1:c1flexgrid x:name="_flex" Grid.Row="1" AutoGenerateColumns="False" Margin="5,5,5,5"> 80 Copyright GrapeCity inc. All rights reserved.

82 <c1:c1flexgrid.columns> <c1:column Header="Product" Binding="Binding Line"/> <c1:column Header="Color" Binding="Binding Color"/> <c1:column Header="Rating" Binding="Binding Rating"/> <c1:column ColumnName="テンプレート"> <c1:column.celltemplate> <DataTemplate> <Button Content=" 削 除 " Click="Button_Click" /> </DataTemplate> </c1:column.celltemplate> </c1:column> </c1:c1flexgrid.columns> </c1:c1flexgrid> VisualBasic Private Sub Button_Click(sender As Object, e As RoutedEventArgs) Dim product = GetProduct(sender) If product IsNot Nothing Then Dim result = MessageBox.Show("このレコードを 削 除 しますか?", " 確 認 ", MessageBoxButton.OKCancel) If result = MessageBoxResult.OK Then Dim ev = TryCast(_flex.CollectionView, System.ComponentModel.IEditableCollectionView) ev.remove(product) 'グリッド 上 にコントロールとして 表 示 されるProductを 取 得 します Private Function GetProduct(control As Object) As Product Dim e As FrameworkElement = TryCast(control, FrameworkElement) Return TryCast(e.DataContext, Product) End Function C# private void Button_Click(object sender, RoutedEventArgs e) var product = GetProduct(sender); if (product!= null) var result = MessageBox.Show("このレコードを 削 除 しますか?", " 確 認 ", MessageBoxButton.OKCancel); if (result == MessageBoxResult.OK) var ev = _flex.collectionview as System.ComponentModel.IEditableCollectionView; ev.remove(product); //グリッド 上 にコントロールとして 表 示 されるProductを 取 得 します Product GetProduct(object control) FrameworkElement e = control as FrameworkElement; return e.datacontext as Product; 81 Copyright GrapeCity inc. All rights reserved.

83 グループ 化 グループ 化 を 実 行 する グリッドにグループ 化 を 実 現 してデータを 簡 単 に 階 層 化 して 表 示 することができます たとえば 製 品 に 含 まれる MainTestApplication サンプルにあるように 顧 客 を 都 道 府 県 とアクティブごとにグループ 化 するには コードを 次 のようにす るだけで 済 みます WPF C# List<Customer> list = GetCustomerList(); ListCollectionView view = new ListCollectionView(list); using (view.deferrefresh()) view.groupdescriptions.clear(); view.groupdescriptions.add(new PropertyGroupDescription(" 都 道 府 県 ")); view.groupdescriptions.add(new PropertyGroupDescription("アクティブ")); _flexgrid.itemssource = view; "using (view.deferrefresh())" 文 はオプションです この 文 を 追 加 すると すべてのグループが 設 定 されるまでデータソースか らの 通 知 が 保 留 になるため パフォーマンスが 向 上 します 次 の 図 に この 結 果 を 示 します データ 項 目 は 都 道 府 県 およびアクティブな 状 態 ごとにグループ 化 されます ユーザーは グループヘッダのアイコンをクリッ クして グループを 折 りたたんだり 展 開 することができます(TreeView コントロールを 使 用 する 場 合 ) グループ 化 をグリッドレベルで 無 効 にする 場 合 は グリッドの GroupRowPosition プロパティを GroupRowPosition.None に 設 定 します(AboveData または BelowData にも 設 定 可 能 ) データのグループ 化 (ICollectionView を 使 用 ) ICollectionView インターフェイスではグループ 化 がサポートされています ICollectionView クラスが 提 供 するグループ 化 の メカニズムは 単 純 ですが 強 力 です グループ 化 の 各 レベルは PropertyGroupDescription オブジェクトによって 定 義 され ます このオブジェクトを 使 用 することにより グループ 化 に 使 用 するプロパティを 選 択 したり グループ 化 の 際 のプロパティ 値 の 使 用 方 法 を 決 定 する ValueConverter を 選 択 できます 82 Copyright GrapeCity inc. All rights reserved.

84 たとえば グループ 化 を 実 行 する セクションに 継 続 して 都 道 府 県 ではなく 都 道 府 県 の 頭 文 字 別 にグループ 化 するには 前 述 のコードを 次 のように 変 更 します WPF List<Customer> list = GetCustomerList(); ListCollectionView view = new ListCollectionView(list); using (view.deferrefresh()) view.groupdescriptions.clear(); view.groupdescriptions.add(new PropertyGroupDescription(" 都 道 府 県 ")); view.groupdescriptions.add(new PropertyGroupDescription("アクティブ")); var gd = view.groupdescriptions[0] as PropertyGroupDescription; gd.converter = new CountryInitialConverter(); _flexgrid.itemssource = view; Silverlight List<Customer> list = GetCustomerList(); PagedCollectionView view = new PagedCollectionView(list); using (view.deferrefresh()) view.groupdescriptions.clear(); view.groupdescriptions.add(new PropertyGroupDescription(" 都 道 府 県 ")); view.groupdescriptions.add(new PropertyGroupDescription("アクティブ")); var gd = view.groupdescriptions[0] as PropertyGroupDescription; gd.converter = new CountryInitialConverter(); _flexgrid.itemssource = view; CountryInitialConverter クラスは IValueConverter インターフェイスを 実 装 します これは 都 道 府 県 の 最 初 の 文 字 を 返 す ため 都 道 府 県 ではなく その 文 字 がグループ 化 に 使 用 されます WPF // 都 道 府 県 の 頭 文 字 からグループされるコンバーター class CountryInitialConverter : IValueConverter Boolean initial; public CountryInitialConverter(bool init) initial = init; public object Convert(object value, Type targettype, object parameter, 83 Copyright GrapeCity inc. All rights reserved.

85 System.Globalization.CultureInfo culture) return ((string)value)[0].tostring(); public object ConvertBack(object value, Type targettype, object parameter, System.Globalization.CultureInfo culture) return value; この 小 さな 変 更 を 加 えるだけで 顧 客 は 都 道 府 県 ではなく 都 道 府 県 の 頭 文 字 でグループ 化 されます グループ 行 には その 行 に 対 応 するグループに 関 する 情 報 が 表 示 されます 具 体 的 には グループ 化 に 使 用 されたプロパ ティや 値 項 目 数 などです この 情 報 をカスタマイズするには 新 しい IValueConverter クラスを 作 成 し グリッドの GroupHeaderConverter プロパティ に 割 り 当 てます たとえば デフォルトのグループヘッダコンバータ( 図 内 の 情 報 を 示 すコンバータ)は 次 のコードによって 実 装 されます WPF // グループキャプションの 表 示 形 式 を 設 定 するクラス public class GroupHeaderConverter : IValueConverter public object Convert(object value, Type targettype, object parameter, System.Globalization.CultureInfo culture) //グループ 名 のみを 返 します(カウントを 返 しない) var group = value as CollectionViewGroup; if (group!= null && targettype == typeof(string)) return group.name; //デフォルト return value; 84 Copyright GrapeCity inc. All rights reserved.

86 public object ConvertBack(object value, Type targettype, object parameter, System.Globalization.CultureInfo culture) throw new NotImplementedExpection(); C1FlexGridGroupPanel を 使 用 してグループ 領 域 を 表 示 する C1FlexGridGroupPanel は C1FlexGrid コントロールでグループ 化 を 管 理 できるため UI を 提 供 する 新 しいコントロールで す C1FlexGridGroupPanel コントロールは 現 在 Silverlight と WPF バージョンで 使 用 可 能 です これは 別 途 なアセンブリ (プ ラットフォームに 応 じて C1.Silverlight.FlexGrid.GroupPanel.4.dll C1.Silverlight.FlexGrid.GroupPanel.5.dll または C1.WPF.FlexGrid.GroupPanel.4.dll)として 実 装 されています C1FlexGridGroupPanel コントロールの 使 い 方 C1FlexGridGroupPanel コントロールは 簡 単 に 実 装 できます 本 コントロールをフォーム 上 に C1FlexGrid の 上 追 加 してそのFlexGrid プロパティを 設 定 することで コントロールはデータを 表 示 するため C1FlexGrid を 参 照 します コードは 次 のようになります XAML for WPF <Grid> <Grid.RowDefinitions> <RowDefinition Height="Auto"/> <RowDefinition /> </Grid.RowDefinitions> <c1:c1flexgridgrouppanel Background="WhiteSmoke" FlexGrid="Binding ElementName=_flex"/> <c1:c1flexgrid x:name="_flex" Grid.Row="1" /> </Grid> C1FlexGridGroupPanel は C1FlexGrid から 必 要 な 属 性 を 継 承 しますので C1FlexGridGroupPanel をスタイルする 必 要 はなく XAMLは 簡 単 です たとえば グリッド 上 で 列 ヘッダーの 背 景 前 景 またはフォントを 変 更 する と C1FlexGridGroupPanel は 自 動 的 にそれらの 要 素 を 使 用 しグループマーカーが 列 ヘッダーとして 見 られるように 描 画 され ます XAMLコードの 結 果 は 次 の 図 に 示 します 85 Copyright GrapeCity inc. All rights reserved.

87 この 図 は C1FlexGrid 内 に 製 品 データを 表 示 し "Color"と"Line" にてグループ 化 を 示 しています グリッド 列 をグループ 領 域 にドラッグすることでグループ 化 を 実 現 しています そして "Cost" は 次 にグループ 領 域 にドラッグされる 列 となりますので 強 調 表 示 されています また "Line"グループマーカーの 右 にあるオレンジマーカーは 新 規 のグループが 挿 入 される 位 置 を 示 して います この 図 に 表 示 されるドラグマーカーの 色 (オレンジ 色 )は DragMarkerColorプロパティを 使 用 して 設 定 されていますので 独 自 に 設 定 することもできます グループは 作 成 されたら 該 当 する 列 はデフォルトで 非 表 示 になりますが ユーザーは HideGroupedColumns プロパティ を"False"に 設 定 することで 設 定 を 無 効 にすることも 可 能 です なお データをソートする 場 合 グループマーカーをクリックして 昇 順 または 降 順 にソートできます C1FlexGrid と 同 じように "Ctrl"キーを 押 下 ままにしてグループヘッダーをクリックするとソートが 解 除 されます グループマーカーをグループ 領 域 内 にド ラッグしてグループを 再 配 列 するか またはグリッドに 任 意 の 時 点 でグループの 解 除 や 復 元 することに 役 に 立 ちます 最 後 に グループマーカーの 閉 じる ボタン("x"で 指 定 )をクリックしてグループを 簡 単 に 解 除 できます C1FlexGridGroupPanel はグリッドのデータソースとして 使 用 されたコレクションの ICollectionView インターフェースを 使 用 してグループを 管 理 しています その ICollectionView に 連 結 された 全 てのコントロールはグループでの 変 更 点 を 確 認 できま す 従 いまして グループ 機 能 は 連 結 が 実 現 された 場 合 のみ 機 能 することに 注 意 してください C1FlexGridGroupPanel は 新 規 グループを 作 成 する 際 PropertyGroupCreated イベントを 発 生 し アプリケーションで 新 規 のグループのカスタマイズを 許 可 します 一 般 には このイベントは 新 規 作 成 されたグループにカスタムコンバータを 割 り 当 てる 場 合 に 使 用 されています 例 えば 次 のコードをご 参 照 ください WPF /// <summary> /// C1FlexGridGroupPanelにて 作 成 されたグループディスクリプタをカスタマイズします /// </summary> void_grouppanel_propertygroupcreated(object sender, PropertyGroupCreatedEventArgs e) var pgd = e.propertygroupdescription; 86 Copyright GrapeCity inc. All rights reserved.

88 switch (pgd.propertyname) case "Introduced": pgd.converter = new DateTimeGroupConverter(); break; case "Price": pgd.converter = new AmountGroupConverter(1000); break; case "Cost": pgd.converter = new AmountGroupConverter(300); break; このコードは PropertyGroupCreated イベントを 処 理 して データソースにある 列 にカスタムコンバータを 割 り 当 てます この 場 合 DateTimeGroupConverter と AmountGroupConverter クラスは DateTime と double 値 をレンジにグループ するシンプルなコンバータです 以 下 の 図 はカスタムグループ 化 の 効 果 を 示 しています 項 目 は 複 数 のグループに 表 示 されることを 確 認 してきださい 例 えば DateTimeGroupConverter は 日 付 を" 今 週 " " 今 年 " " 去 年 "と" 一 昨 年 "にグループしています " 今 週 " グループの 項 目 は" 今 年 "にも 含 められます これは C1FlexGrid や C1FlexGridGroupPanel コントロールとは 関 係 なく ICollectionView インターフェースで 適 用 される 機 能 です C1FlexGridGroupPanel の 実 装 について UIのグループ 化 機 能 はなぜ C1FlexGrid 自 体 に 追 加 されていなく 別 途 なアセンブリとして 実 装 することにした 理 由 は 以 下 に 説 明 します 1. C1FlexGrid をできるだけ 軽 くして 迅 速 また 移 行 できやすいものに 維 持 します C1FlexGrid の Silverlight バージョン は250k 以 下 で これまでの 商 業 的 に 入 手 できる 軽 いデータグリッドです これは 最 も 広 く 利 用 可 能 なデータグリッドの 87 Copyright GrapeCity inc. All rights reserved.

89 バージョン Silverlight WPF Windows Phone WinRT ActiveX と CompactFramework を 提 供 しています 2. UI のグループ 化 を 簡 単 にカスタマイズできるためです C1FlexGridGroupPanel は 非 常 に 簡 単 なコントロールであ り カスタマイズバージョンを 作 成 したいお 客 様 にソースコードを 提 供 します 3. C1FlexGrid コントロールの 機 能 拡 張 と 柔 軟 性 を 実 証 するためです C1FlexGridGroupPanelコントロールは 内 部 の いずれかの 方 法 でカスタム 拡 張 修 正 または 使 用 せずに C1FlexGridによって 公 開 されたシンプルかつ 強 力 なオブ ジェクトモデルを 使 用 して 開 発 されました ( 同 じことが 別 のアセンブリとして アドホックフィルタリングと 別 途 なアセンブ リとして 提 供 される C1FlexGridFilter コンポーネントについても 同 様 です ) C1FlexGridGroupPanel は 実 際 にGrid 要 素 であり ウォーターマークメッセージを 表 示 している TextBlock と ICollectionView ソースに 有 効 であるグループを 表 示 している 水 平 StackPanel を 含 みます グループは GroupMarker 要 素 として 表 され これらの 要 素 をクリックし グループをソートするや 閉 じることができ ドラッグし てグループ 順 番 を 再 配 列 することもできます C1FlexGridGroupPanel は 以 下 の 四 種 類 のドラッグアクションを 処 理 しています 1. グループ 領 域 内 で GroupMarkers をドラッグし グループを 再 配 列 します 2. グリッドに GroupMarkers をドラッグし グループを 解 除 し または 任 意 の 時 点 で 列 を 復 元 します 3. ColumnHeader 要 素 をグリッドからグループ 領 域 にドラッグし 新 規 のグループを 作 成 します 4. グリッド 内 で ColumnHeader 要 素 をドラッグし グリッドの 列 を 再 配 列 します 上 記 のすべてのドラッグアクションは DragDropManager というユーティリティクラスにて 処 理 されています 最 初 の2つのドラッグアクションはマウスのドラッグアクションを 検 出 し パラメータとしてマーカーで DragDropManager の DoDragDrop メソッドを 呼 び 出 し GroupMarker クラスによって 開 始 されます そして 最 後 の2 種 類 のドラッグアクションは C1FlexGrid の DraggingColumn イベントに 応 答 して 開 始 されます DoDragDrop 関 数 イベントが 呼 び 出 されると DragDropManager は ページ 全 体 にわたって 透 明 で 要 素 を 表 示 し マウスを キャプチャし 呼 び 出 し 側 がドロップ 位 置 を 更 新 できるようにドラッグイベントを 発 生 させます ユーザーがマウスを 離 したとき に 発 信 者 がドラッグアンドドロップ 操 作 を 終 了 することができるので DragDropManager はドロップイベントを 発 生 させます 実 装 は 非 常 に 短 く 移 植 可 能 です アセンブリは 約 25Kであり コードは 任 意 の 条 件 付 きコードブロックなしでの Silverlight お よび WPF に 対 して 構 築 することができます グループ 集 計 データをグループ 化 した 場 合 グループの 集 計 値 を 計 算 すると 役 に 立 つことがよくあります たとえば 販 売 データを 都 道 府 県 または 製 品 ライン 別 にグループ 化 した 場 合 は 都 道 府 県 または 製 品 ライン 別 の 総 売 上 をグリッドに 表 示 できます これは C1FlexGrid を 使 って 簡 単 に 実 行 できます 集 計 する 列 に GroupAggregate プロパティを 設 定 するだけで グリッド が 自 動 的 に 集 計 を 計 算 して 表 示 します データを 変 更 すると 集 計 は 自 動 的 に 再 計 算 されます 集 計 は グループヘッダ 行 に 表 示 されます 集 計 を 表 示 するには グリッドの AreGroupHeadersFrozen プロパティを false に 設 定 する 必 要 があります たとえば 次 のグリッド 定 義 を 考 えてみます XAML for WPF <fg:c1flexgrid x:name="_flex" AutoGenerateColumns="False"> <fg:c1flexgrid.columns> <fg:column Header=" 製 品 ライン" Binding="Binding 製 品 ライン" /> <fg:column Header=" 製 品 色 " Binding="Binding 製 品 色 " /> <fg:column Header=" 製 品 名 " Binding="Binding 製 品 名 " /> <fg:column Header=" 価 格 " Binding="Binding 価 格 " Format="n0" HorizontalAlignment="Right" Width="*"/> <fg:column Header=" 費 用 " Binding="Binding 費 用 " Format="n0" HorizontalAlignment="Right" Width="*"/> 88 Copyright GrapeCity inc. All rights reserved.

90 <fg:column Header=" 重 量 " Binding="Binding 重 量 " Format="n0" HorizontalAlignment="Right" Width="*"/> <fg:column Header=" 容 量 " Binding="Binding 容 量 " Format="n0" HorizontalAlignment="Right" Width="*"/> </fg:c1flexgrid.columns> </fg:c1flexgrid> " 製 品 ライン" " 製 品 色 " および " 製 品 名 " 別 にデータをグループ 化 するように ICollectionView オブジェクトを 設 定 して グ リッドの ItemsSource プロパティをこのオブジェクトに 設 定 すると グリッドは 次 のようになります グリッドは これらのグループを 折 りたたみ 可 能 なアウトライン 形 式 で 表 示 し 各 グループの 項 目 数 を 自 動 的 に 表 示 します こ れは Microsoft DataGrid コントロールによって 表 示 されるビューに 似 ています C1FlexGrid では これをさらに 発 展 させて 列 の 集 計 値 を 表 示 できます たとえば " 価 格 " " 費 用 " " 重 量 " および " 容 量 " 列 の 合 計 を 表 示 する 場 合 は 次 のように XAML を 変 更 します XAML for WPF <fg:c1flexgrid x:name="_flex" AutoGenerateColumns="False" AreRowGroupHeadersFrozen="False" <fg:c1flexgrid.columns> <fg:column Header=" 製 品 ライン" Binding="Binding 製 品 ライン" /> <fg:column Header=" 製 品 色 " Binding="Binding 製 品 色 " /> <fg:column Header=" 製 品 名 " Binding="Binding 製 品 名 " /> <fg:column Header=" 価 格 " Binding="Binding 価 格 " Format="n0" HorizontalAlignment="Right" Width="*" GroupAggregate="Sum"/> <fg:column Header=" 費 用 " Binding="Binding 費 用 " Format="n0" HorizontalAlignment="Right" Width="*" GroupAggregate="Sum"/> <fg:column Header=" 重 量 " Binding="Binding 重 量 " Format="n0" HorizontalAlignment="Right" Width="*" GroupAggregate="Sum"/> <fg:column Header=" 容 量 " Binding="Binding 容 量 " Format="n0" HorizontalAlignment="Right" Width="*" GroupAggregate="Sum"/> </fg:c1flexgrid.columns> </fg:c1flexgrid> 89 Copyright GrapeCity inc. All rights reserved.

91 この XAML コードでは 次 の2つを 変 更 します 1. グリッドの AreGroupHeadersFrozen を false に 設 定 します グループ 集 計 はグループヘッダ 行 に 表 示 されるため こ れらのヘッダをフリーズすると 集 計 は 表 示 されなくなります 2. 一 部 の 列 の GroupAggregate プロパティを "Sum" に 設 定 します これにより グリッドは 集 計 を 計 算 してグループ ヘッダ 行 に 表 示 します Sum Average Count Minimum Maximum などの 集 計 を 使 用 できます これらの 変 更 を 行 うと グリッドは 次 のようになります グループの 集 計 値 がグループヘッダにどのように 表 示 されているかを 確 認 してください データを 変 更 すると 集 計 値 は 自 動 的 に 再 計 算 されます マージ セルのマージ C1FlexGrid は グリッドに 必 要 とされるセル 結 合 をサポートしています グリッドの AllowMerging プロパティは グリッドレベルのセル 結 合 を 有 効 にします グリッドレベルの 結 合 を 有 効 にした ら Row.AllowMerging および Column.AllowMerging プロパティを 使 用 して 結 合 する 特 定 の 行 および 列 を 選 択 します たとえば 次 のコードは 同 じ 都 道 府 県 を 含 むセルを 結 合 します WPF // スクロール 可 能 な 領 域 での 結 合 を 有 効 にします fg.allowmerging = AllowMerging.Cells; // " 都 道 府 県 " 列 と " 名 " 列 fg.columns[" 都 道 府 県 "].AllowMerging = true; fg.columns[" 名 "].AllowMerging = true; 90 Copyright GrapeCity inc. All rights reserved.

92 これだけで 次 のようにグリッドが 作 成 されます デフォルトの 結 合 動 作 は 同 じコンテンツを 含 む 隣 接 セルを 結 合 します この 動 作 をカスタマイズしてカスタムマージモードを 作 成 するには IMergeManager インターフェイスを 実 装 するクラスを 作 成 し そのクラスのインスタンスをグリッドの MergeManager プロパティに 割 り 当 てます IMergeManager インターフェイスはとても 単 純 です(1つのメソッドのみを 含 みます) WPF public interface IMergeManager CellRange GetMergedRange( C1FlexGrid grid, CellType celltype, CellRange range); GetMergedRange メソッドは オーナーグリッド セルの 種 類 (スクロール 可 能 列 ヘッダなど) および 隣 接 セルと 結 合 される 単 独 セルの 範 囲 を 指 定 するパラメータを 受 け 取 ります 戻 り 値 は 渡 された 範 囲 と その 範 囲 と 結 合 されるすべての 隣 接 セル を 含 む CellRange オブジェクトです このインタフェースは 単 純 ですが このメソッドの 実 際 の 実 装 はかなり 複 雑 になる 場 合 があります たとえば 重 複 する 範 囲 を 返 すカスタムマージを 実 装 する 場 合 グリッドが 無 限 ループに 入 るおそれがあります また 非 効 率 的 な 実 装 はパフォーマンス を 悪 化 させます 同 じ 値 を 持 つセルをマージする グリッドのAllowMergingプロパティをC1.WPF.FlexGrid.AllowMerging.Cells に 設 定 して 特 定 の 行 および 列 のAllowMergingプロパティをTrueに 設 定 することで 固 定 セル 通 常 セルをマージして 表 示 できます たとえば 次 の 例 では 列 2で2 行 目 5 行 目 と8 行 目 で 同 じ 値 を 持 つセルをマージして 表 示 します また ここで 行 8と 列 8のマー ジが 同 時 に 行 われたので 列 のマージが 優 先 されることに 注 目 してください 実 行 例 91 Copyright GrapeCity inc. All rights reserved.

93 サンプルコードは 次 のようになります VisualBasic _flex.rows.frozen = 2 _flex.allowmerging = C1.WPF.FlexGrid.AllowMerging.Cells _flex.columns(2).allowmerging = True _flex.rows(5).allowmerging = True _flex.rows(8).allowmerging = True ' データを 設 定 します _flex(0, 2) = " 行 のマージ" _flex(1, 2) = " 行 のマージ" _flex(2, 2) = " 行 のマージ" _flex(3, 2) = " 行 のマージ" _flex(5, 3) = " 列 のマージ" _flex(5, 4) = " 列 のマージ" _flex(8, 2) = " 列 のマージが 優 先 " _flex(8, 3) = " 列 のマージが 優 先 " C# _flex.rows.frozen = 2; _flex.allowmerging = C1.WPF.FlexGrid.AllowMerging.Cells; _flex.columns[2].allowmerging = true; _flex.rows[5].allowmerging = true; _flex.rows[8].allowmerging = true; // データを 設 定 します _flex[0, 2] = " 行 のマージ"; _flex[1, 2] = " 行 のマージ"; 92 Copyright GrapeCity inc. All rights reserved.

94 _flex[2, 2] = " 行 のマージ"; _flex[3, 2] = " 行 のマージ"; _flex[5, 3] = " 列 のマージ"; _flex[5, 4] = " 列 のマージ"; _flex[8, 2] = " 列 のマージが 優 先 "; _flex[8, 3] = " 列 のマージが 優 先 "; 注 意 : 固 定 セルと 通 常 セルはマージされません 自 動 マージの 場 合 特 定 の 位 置 でのみマージする( 同 一 データをマージしない)といった 動 作 はできません この 場 合 は 自 動 マージのカスタマイズや 制 限 付 きマージ カスタムマージを 検 討 してください 行 と 列 のマージが 同 時 に 行 われた 場 合 列 のマージが 優 先 されます カスタムマージと 自 動 マージを 同 時 に 実 装 することはできません 同 じ 値 を 持 つセルをマージする( 制 限 付 き) グリッドのAllowMergingプロパティをAllに 設 定 して IMergeManagerインタフェースを 実 現 することでマージ 動 作 をカスタマイズすることが 用 意 されています たとえば セルの 上 にあるセルもマージされる 場 合 の 動 作 は 以 下 のRestrictRowsメソッドのように 実 現 できます それと 同 じように 左 にあるセルもマージする 場 合 以 下 のRestrictColsメソッドのようにに 実 現 できます 実 行 例 サンプルコードは 次 のようになります VisualBasic ' 左 にあるセルもマージする 場 合 Private Sub InitializeRestrictCols() For i As Integer = 0 To 1 _restrictcolsflex.columns.add(new C1.WPF.FlexGrid.Column()) Next For i As Integer = 0 To 3 _restrictcolsflex.rows.add(new C1.WPF.FlexGrid.Row()) Next ' データを 設 定 する 場 合 _restrictcolsflex(0, 0) = " 関 東 " _restrictcolsflex(1, 0) = " 関 東 " _restrictcolsflex(2, 0) = " 関 西 " _restrictcolsflex(3, 0) = " 関 西 " _restrictcolsflex(0, 1) = " 北 海 道 " _restrictcolsflex(1, 1) = " 北 海 道 " _restrictcolsflex(2, 1) = " 北 海 道 " _restrictcolsflex(3, 1) = " 北 海 道 " _restrictcolsflex.allowmerging = AllowMerging.All _restrictcolsflex.mergemanager = New RestrictColsMergeManager() ' 上 にあるセルもマージする 場 合 Private Sub InitializeRestrictRows() For i As Integer = 0 To 3 _restrictrowsflex.columns.add(new C1.WPF.FlexGrid.Column()) Next For i As Integer = 0 To 1 _restrictrowsflex.rows.add(new C1.WPF.FlexGrid.Row()) Next _restrictrowsflex.allowmerging = AllowMerging.All 93 Copyright GrapeCity inc. All rights reserved.

95 _restrictrowsflex.mergemanager = New RestrictRowsMergeManager() _restrictrowsflex(0, 0) = " 関 東 " _restrictrowsflex(0, 1) = " 関 東 " _restrictrowsflex(0, 2) = " 関 西 " _restrictrowsflex(0, 3) = " 関 西 " _restrictrowsflex(1, 0) = " 北 海 道 " _restrictrowsflex(1, 1) = " 北 海 道 " _restrictrowsflex(1, 2) = " 北 海 道 " _restrictrowsflex(1, 3) = " 北 海 道 " C# // 左 にあるセルもマージする 場 合 private void InitializeRestrictCols() for (int i = 0; i < 2; i++) _restrictcolsflex.columns.add(new C1.WPF.FlexGrid.Column()); for (int i = 0; i < 4; i++) _restrictcolsflex.rows.add(new C1.WPF.FlexGrid.Row()); // データを 設 定 する 場 合 _restrictcolsflex[0, 0] = " 関 東 "; _restrictcolsflex[1, 0] = " 関 東 "; _restrictcolsflex[2, 0] = " 関 西 "; _restrictcolsflex[3, 0] = " 関 西 "; _restrictcolsflex[0, 1] = " 北 海 道 "; _restrictcolsflex[1, 1] = " 北 海 道 "; _restrictcolsflex[2, 1] = " 北 海 道 "; _restrictcolsflex[3, 1] = " 北 海 道 "; _restrictcolsflex.allowmerging = AllowMerging.All; _restrictcolsflex.mergemanager = new RestrictColsMergeManager(); // 上 にあるセルもマージする 場 合 private void InitializeRestrictRows() for (int i = 0; i < 4; i++) _restrictrowsflex.columns.add(new C1.WPF.FlexGrid.Column()); for (int i = 0; i < 2; i++) _restrictrowsflex.rows.add(new C1.WPF.FlexGrid.Row()); _restrictrowsflex.allowmerging = AllowMerging.All; _restrictrowsflex.mergemanager = new RestrictRowsMergeManager(); _restrictrowsflex[0, 0] = " 関 東 "; _restrictrowsflex[0, 1] = " 関 東 "; _restrictrowsflex[0, 2] = " 関 西 "; _restrictrowsflex[0, 3] = " 関 西 "; _restrictrowsflex[1, 0] = " 北 海 道 "; _restrictrowsflex[1, 1] = " 北 海 道 "; _restrictrowsflex[1, 2] = " 北 海 道 "; _restrictrowsflex[1, 3] = " 北 海 道 "; IMergeManager インターフェイスを 実 装 するクラスは 次 のように 作 成 します VisualBasic Class RestrictRowsMergeManager Implements C1.WPF.FlexGrid.IMergeManager Public Function GetMergedRange(grid As C1FlexGrid, celltype 1 As CellType, rg As CellRange) As CellRange ' データセルの 結 合 を 対 象 します ' ( 行 または 列 ヘッダを 結 合 しない 場 合 ) If celltype 1 = CellType.Cell Then Dim ismerged As Boolean = False If grid.tag Is Nothing Then grid.tag = New List(Of Boolean)() Dim list = TryCast(grid.Tag, List(Of Boolean)) If rg.row = 0 OrElse (rg.row > 0 AndAlso list(rg.row - 1)) Then ' 左 右 に 拡 張 します For i As Integer = rg.column To grid.columns.count - 2 If GetDataDisplay(grid, rg.row, i) <> GetDataDisplay(grid, rg.row, i + 1) Then Exit For rg.column2 = i + 1 ismerged = True 94 Copyright GrapeCity inc. All rights reserved.

96 Next For i As Integer = rg.column To 1 Step -1 If GetDataDisplay(grid, rg.row, i) <> GetDataDisplay(grid, rg.row, i - 1) Then Exit For rg.column = i - 1 ismerged = True Next list.add(ismerged) ' 完 了 Return rg End Function Private Function GetDataDisplay(grid As C1FlexGrid, r As Integer, c As Integer) As String Return grid(r, c).tostring() End Function Public Function GetMergedRange1(grid As C1FlexGrid, celltype As CellType, rng As CellRange) As CellRange Implements IMergeManager.GetMergedRange End Function End Class C# class RestrictRowsMergeManager : IMergeManager public CellRange GetMergedRange(C1FlexGrid grid, CellType celltype, CellRange rg) // データセルの 結 合 を 対 象 します // ( 行 または 列 ヘッダを 結 合 しない 場 合 ) if (celltype == CellType.Cell) bool ismerged = false; if (grid.tag == null) grid.tag = new List<bool>(); var list = grid.tag as List<bool>; if (rg.row == 0 (rg.row > 0 && list[rg.row - 1])) // 左 右 に 拡 張 します for (int i = rg.column; i < grid.columns.count - 1; i++) if (GetDataDisplay(grid, rg.row, i)!= GetDataDisplay(grid, rg.row, i + 1)) break; rg.column2 = i + 1; ismerged = true; for (int i = rg.column; i > 0; i--) if (GetDataDisplay(grid, rg.row, i)!= GetDataDisplay(grid, rg.row, i - 1)) break; rg.column = i - 1; ismerged = true; list.add(ismerged); // 完 了 return rg; string GetDataDisplay(C1FlexGrid grid, int r, int c) return grid[r, c].tostring(); 注 意 : 固 定 セルと 通 常 セルはマージされません 行 と 列 のマージが 同 時 に 行 われた 場 合 列 のマージが 優 先 されます カスタムマージと 自 動 マージを 同 時 に 実 装 することはできません 任 意 のセルをマージする グリッドのAllowMerging プロパティをAllに 設 定 して マージしたいセル 範 囲 をIMergeManagerインタフェースを 実 装 したクラス 内 に 指 定 して 任 意 のセルをマージできます 次 の 例 では 2 行 2 列 目 から5 行 3 列 目 をマージする 方 法 を 示 します 実 行 例 95 Copyright GrapeCity inc. All rights reserved.

97 VisualBasic Class MyMergeManager Implements IMergeManager Public Function GetMergedRange(grid As C1FlexGrid, celltype 1 As CellType, rg As CellRange) As CellRange ' データセルの 結 合 を 対 象 します ' ( 行 または 列 ヘッダを 結 合 しない 場 合 ) If celltype 1 = CellType.Cell Then If rg.column >= 1 AndAlso rg.column <= 2 AndAlso rg.row >= 1 AndAlso rg.row <= 4 Then rg.column = 1 rg.column2 = 2 rg.row = 1 rg.row2 = 4 ' 完 了 Return rg End Function Private Function GetDataDisplay(grid As C1FlexGrid, r As Integer, c As Integer) As String Return grid(r, c).tostring() End Function Public Function GetMergedRange1(grid As C1FlexGrid, celltype As CellType, rng As CellRange) As CellRange Implements IMergeManager.GetMergedRange End Function End Class C# class MyMergeManager : IMergeManager public CellRange GetMergedRange(C1FlexGrid grid, CellType celltype, CellRange rg) // データセルの 結 合 を 対 象 します // ( 行 または 列 ヘッダを 結 合 しない 場 合 ) if (celltype == CellType.Cell) if (rg.column >= 1 && rg.column <= 2 && rg.row >= 1 && rg.row <= 4) rg.column = 1; rg.column2 = 2; rg.row = 1; rg.row2 = 4; // 完 了 return rg; string GetDataDisplay(C1FlexGrid grid, int r, int c) return grid[r, c].tostring(); 注 意 : マージ( 結 合 )を 解 除 する 場 合 は MergedRanges コレクションから 削 除 (Clear/RemoveAt)します カスタムマージと 自 動 マージを 同 時 に 実 装 することはできません スクロール 96 Copyright GrapeCity inc. All rights reserved.

98 スクロールバーを 表 示 する C1FlexGrid でスクロールバーの 表 示 を 制 御 するには HorizontalScrollBarVisibility および VerticalScrollBarVisibility プロパティを 設 定 します デフォルト 値 は Auto ですが HorizontalScrollBarVisibility.Disable に 設 定 すると スクロール バーを 非 表 示 に 設 定 できます 実 行 例 VisualBasic Public Sub New() InitializeComponent() _flex.itemssource = Product.GetProducts(100) _flex.horizontalscrollbarvisibility = Controls.ScrollBarVisibility.Visible _flex.verticalscrollbarvisibility = Controls.ScrollBarVisibility.Visible C# public MainWindow() InitializeComponent(); _flex.itemssource = Product.GetProducts(100); _flex.horizontalscrollbarvisibility = ScrollBarVisibility.Visible; _flex.verticalscrollbarvisibility = ScrollBarVisibility.Visible; 97 Copyright GrapeCity inc. All rights reserved.

99 注 意 :スクロールバーの 幅 を 変 更 する 機 能 は 用 意 されていません C1FlexGrid コントロールではシステムのスクロール バーを 使 用 します スクロール 位 置 を 設 定 する C1FlexGrid でスクロールの 位 置 を 設 定 する 場 合 は ScrollIntoView メソッドにおいて 行 と 列 のインデックスを 指 定 して 表 示 範 囲 を 設 定 できます たとえば 次 のコードでは 連 結 グリッドで[10,3]のセル 位 置 を 設 定 してスクロールバーの 位 置 を 設 定 する 方 法 を 示 します VisualBasic Private Sub btn_click(sender As Object, e As RoutedEventArgs) _flex.scrollintoview(10, 3) C# private void btn_click(object sender, RoutedEventArgs e) _flex.scrollintoview(10, 3); スクロールチップを 表 示 する グリッドで 垂 直 スクロールバーのスクロールチップを 表 示 するには サムをドラッグしたときの 行 インデックスを 取 得 してスクロールチップにテキストとして 表 示 できます ユーザーが 垂 直 スクロールバーのサムをドラッ グすると そのトップ 行 のインデックスはカレントビューポートに 入 力 されます たとえば 次 のコードでは グリッドをデータソースと 連 結 していることを 前 提 として スクロールバーのサムを 移 動 する 際 にスクロールチップを 表 示 する 方 法 を 示 します 実 行 例 VisualBasic 98 Copyright GrapeCity inc. All rights reserved.

100 Private Shared _vsb As ScrollBar Public Sub New() InitializeComponent() _flex.itemssource = Product.GetProducts(100) Private Sub MainWindow_Loaded(sender As Object, e As RoutedEventArgs) Handles Me.Loaded Dim scroll As DependencyObject = FindInVisualTreeDown(_flex, GetType(ScrollBar), AddressOf IsVerticalScrollBar) _vsb = DirectCast(scroll, ScrollBar) AddHandler _vsb.track.thumb.mouseleave, AddressOf Thumb_MouseLeave AddHandler _vsb.valuechanged, AddressOf _vsb_valuechanged Private Sub Thumb_MouseLeave(sender As Object, e As MouseEventArgs) _popup.isopen = False Private Sub _vsb_valuechanged(sender As Object, e As RoutedPropertyChangedEventArgs(Of Double)) If _vsb.track.thumb.ismouseover And Mouse.LeftButton = MouseButtonState.Pressed Then _popup.isopen = True Dim p As Point = Mouse.GetPosition(layoutRoot) Dim relativepoint As Point = _vsb.transformtoancestor(layoutroot).transform(new Point(0, 0)) _popup.verticaloffset = p.y _popup.horizontaloffset = relativepoint.x content.text = String.Format("Row number is 0", _flex.viewrange.toprow) Private Function IsVerticalScrollBar(obj As DependencyObject) As Boolean Dim scrollbar As ScrollBar = DirectCast(obj, ScrollBar) If scrollbar IsNot Nothing Then Return scrollbar.orientation = Orientation.Vertical Return False End Function Public Shared Function FindInVisualTreeDown(obj As DependencyObject, type As Type, func As Func(Of DependencyObject, Boolean)) As DependencyObject If obj IsNot Nothing Then If obj.[gettype]() = type AndAlso func(obj) Then Return obj For i As Integer = 0 To VisualTreeHelper.GetChildrenCount(obj) - 1 Dim childreturn As DependencyObject = FindInVisualTreeDown(VisualTreeHelper.GetChild(obj, i), type, func) If childreturn IsNot Nothing Then Return childreturn Next Return Nothing End Function C# public MainWindow() InitializeComponent(); this.loaded += MainWindow_Loaded; _flex.itemssource = Product.GetProducts(100); ScrollBar _vsb; private void MainWindow_Loaded(object sender, RoutedEventArgs e) var scroll = FindInVisualTreeDown(_flex, typeof(scrollbar), IsVerticalScrollBar); _vsb = scroll as ScrollBar; _vsb.valuechanged += _vsb_valuechanged; _vsb.track.thumb.mouseleave += Thumb_MouseLeave; void Thumb_MouseLeave(object sender, MouseEventArgs e) _popup.isopen = false; void _vsb_valuechanged(object sender, RoutedPropertyChangedEventArgs<double> e) if (_vsb.track.thumb.ismouseover && Mouse.LeftButton == MouseButtonState.Pressed) _popup.isopen = true; var p = Mouse.GetPosition(layoutRoot); Point relativepoint = _vsb.transformtoancestor(layoutroot).transform(new Point(0, 0)); _popup.verticaloffset = p.y; 99 Copyright GrapeCity inc. All rights reserved.

101 _popup.horizontaloffset = relativepoint.x; content.text = string.format(" 行 インデックス:0", _flex.viewrange.toprow); private bool IsVerticalScrollBar(DependencyObject obj) var scrollbar = obj as ScrollBar; if (scrollbar!= null) return scrollbar.orientation == Orientation.Vertical; return false; public static DependencyObject FindInVisualTreeDown(DependencyObject obj, Type type, Func<DependencyObject, bool> func) if (obj!= null) if (obj.gettype() == type && func(obj)) return obj; for (int i = 0; i < VisualTreeHelper.GetChildrenCount(obj); i++) DependencyObject childreturn = FindInVisualTreeDown(VisualTreeHelper.GetChild(obj, i), type, func); if (childreturn!= null) return childreturn; return null; ソート ソートを 許 可 する C1FlexGrid の AllowSorting プロパティはブール 型 ですので 各 列 の AllowSorting プロパティを TrueやFalseに 設 定 する ことで ユーザーが 特 定 の 列 を 基 準 にしたソートを 許 可 不 可 にすることができます たとえば 次 のコードでは グリッドをデータソースと 連 結 していることを 前 提 として ユーザーによるソートを 許 可 します 100 Copyright GrapeCity inc. All rights reserved.

102 VisualBasic Private Sub sortchk_checked(sender As Object, e As RoutedEventArgs) Dim chk = TryCast(sender, CheckBox) Dim ischked = If(chk.IsChecked, False) If _flex IsNot Nothing Then _flex.allowsorting = ischked C# private void sortchk_checked(object sender, RoutedEventArgs e) var chk = sender as CheckBox; var ischked = chk.ischecked?? false; if (_flex!= null) _flex.allowsorting = ischked; ソートを 実 行 する ほとんどのグリッドと 同 様 に C1FlexGrid はソートをサポートします 列 ヘッダをクリックすると データは 昇 順 または 降 順 で ソートされます グリッドをソートすると 対 応 する 列 に 現 在 のソート 方 向 を 示 す 三 角 形 が 表 示 されます 101 Copyright GrapeCity inc. All rights reserved.

103 C1FlexGrid では 一 般 的 なソート 切 り 替 え 動 作 に 加 えて [Ctrl]キーを 押 しながら 列 ヘッダをクリックすることでソートを 解 除 で きます これにより 列 に 適 用 されているソートは 解 除 され データは 元 の 順 序 で 表 示 されます グループ 化 と 同 様 に 実 際 のソートは データソースとして 使 用 される ICollectionView によって 実 行 されます グリッドは 単 にマウスクリックを 検 出 するだけであり ソートはこのデータソースオブジェクトに 委 任 されます また コードを 使 ってデータを ソートすることもできます たとえば 次 のコードは データを 氏 名 および 都 道 府 県 に 基 づいてソートします Visual Basic ' 初 期 状 態 にします view.sortdescriptions.clear() ' 氏 名 に 基 づいてソートします view.sortdescriptions.add(new SortDescription(" 氏 名 ", ListSortDirection.Ascending)) ' 次 に 都 道 府 県 に 基 づいてソートします view.sortdescriptions.add(new SortDescription(" 都 道 府 県 ", ListSortDirection.Ascending)) C# // 初 期 状 態 にします view.sortdescriptions.clear(); // 氏 名 に 基 づいてソートします view.sortdescriptions.add( new SortDescription(" 氏 名 ", ListSortDirection.Ascending)); // 次 に 都 道 府 県 に 基 づいてソートします view.sortdescriptions.add( new SortDescription(" 都 道 府 県 ", ListSortDirection.Ascending)); このコードが 呼 び 出 されると グリッドは 自 動 的 にデータを 新 しいソート 順 で 表 示 し 都 道 府 県 の 列 ヘッダに 三 角 形 のソートイ ンジケータを 表 示 します グリッドのソートを 無 効 にするには AllowSorting プロパティを false に 設 定 します 特 定 の 列 のソートを 無 効 にするに は Column.AllowSorting プロパティを false に 設 定 します また ShowSort プロパティを false に 設 定 することで 三 角 形 のソートインジケータを 非 表 示 にすることもできます 102 Copyright GrapeCity inc. All rights reserved.

104 複 数 列 のソートを 実 行 する グリッドで 複 数 列 をソートできるように ICollectionView.SortDescriptions に 対 象 列 の 名 前 を 指 定 して 実 現 できます たとえば 次 のコードでは グリッドはデータソースと 連 結 していることを 前 提 として Name と Rating 列 に 基 づいてソートする 方 法 を 示 します メモ:グリッドで 列 の 表 示 順 番 によってソート 結 果 が 異 なりますのでご 注 意 ください たとえば Rating 列 は Name の 先 に 表 示 されている 場 合 Rating のソート 順 番 が 優 先 されてその 後 Name に 基 づいてソートさ れます VisualBasic Public Sub New() InitializeComponent() _flex.itemssource = Product.GetProducts(30) 'ICollectionView.SortDescriptions を 使 用 します _flex.collectionview.sortdescriptions.add(new System.ComponentModel.SortDescription("Rating", System.ComponentModel.ListSortDirection.Ascending)) _flex.collectionview.sortdescriptions.add(new System.ComponentModel.SortDescription("Name", System.ComponentModel.ListSortDirection.Ascending)) C# public MainWindow() InitializeComponent(); _flex.itemssource = Product.GetProducts(30); //ICollectionView.SortDescriptions を 使 用 します _flex.collectionview.sortdescriptions.add(new System.ComponentModel.SortDescription("Rating", System.ComponentModel.ListSortDirection.Descending)); _flex.collectionview.sortdescriptions.add(new System.ComponentModel.SortDescription("Name", System.ComponentModel.ListSortDirection.Ascending)); ソートを 解 除 する C1FlexGrid でソートを 解 除 したい 場 合 は グリッドのソートの 記 述 (SortDescriptions)を 消 去 する 方 法 を 紹 介 します たとえば _flex と 指 定 した C1FlexGrid で _flex.collectionview.sortdescriptions.clear() 使 用 して 行 ったソート 処 理 を 無 効 にできます 1. DataTable を 作 成 してグリッドに 連 結 します VisualBasic InitializeComponent() _flex.itemssource = Product.GetProducts(30) _flex.collectionview.sortdescriptions.add(new System.ComponentModel.SortDescription("Name", System.ComponentModel.ListSortDirection.Descending)) C# InitializeComponent(); _flex.itemssource = Product.GetProducts(30); _flex.collectionview.sortdescriptions.add(new System.ComponentModel.SortDescription("Name", System.ComponentModel.ListSortDirection.Descending)); 2. クリックされたときテーブルのソートを 解 除 するボタンを 作 成 します 次 のコードを removebtn_click イベントに 追 加 します 103 Copyright GrapeCity inc. All rights reserved.

105 VisualBasic Private Sub removebtn_click(sender As Object, e As RoutedEventArgs) If _flex.collectionview.sortdescriptions.count > 0 Then _flex.collectionview.sortdescriptions.clear() C# private void removebtn_click(object sender, RoutedEventArgs e) if (_flex.collectionview.sortdescriptions.count > 0) _flex.collectionview.sortdescriptions.clear(); メモ:DataTable.DefaultView は DataTable の DataView を 返 します ソート 文 字 列 を null に 設 定 すると DataView は 直 前 のソートを 元 に 戻 します なお ( 列 ヘッダに 表 示 されている)ソート 方 向 を 示 すインジケータのみを 消 去 したい 場 合 は ShowSort プロパティを False に 設 定 してアイコンを 非 表 示 にします ShowSort プロパティを False に 設 定 した 場 合 は 再 度 ソー トを 行 ってもアイコンは 表 示 されなくなりますので 注 意 してください 非 連 結 モードのグリッドでも 使 用 可 能 です フィルタリング フィルタリングを 許 可 する C1FlexGridFilter 拡 張 クラスを 使 用 し C1FlexGrid コントロールで 列 フィルタを 実 現 する 方 法 を 紹 介 します C1FlexGridFilter 拡 張 クラスは C1FlexGrid を 拡 張 して Excel 形 式 のフィルタ 処 理 を 提 供 します フィルタ 処 理 を 有 効 にすれば グリッドの 列 ヘッ ダ 上 にマウスポインタを 置 いた 際 に ドロップダウンアイコンが 表 示 されます このドロップダウンでは 列 のフィルタを 編 集 でき ます フィルタには2 種 類 のモードがあります 値 モード:このモードでは 列 のすべての 値 がリストに 表 示 されます ユーザーは 表 示 する 値 の1つまたは2つをリストから 選 択 できます 条 件 モード:このモードでは エディタが 演 算 子 と 比 較 パラメータ( 例 えば より 大 きい 2.5 )から 成 る2つの 条 件 を 指 定 しま す これらの 条 件 自 体 は AND または OR 演 算 子 で 組 み 合 わされます エディタを 使 用 してフィルタ 処 理 の 方 法 を 指 定 できますし コードで 設 定 することも 可 能 です デフォルト 設 定 として 各 行 に Visible プロパティを 設 定 するとフィルタ 処 理 はグリッドに 適 用 されます そして フィルタ 基 準 を 満 たす 行 は 表 示 し 満 たさない 行 は 非 表 示 になります このモードでは フィルタ 処 理 は 全 行 数 に 影 響 は 及 ぼしませんので 簡 単 な LINQ 表 現 を 用 いてフィルタ 基 準 を 満 たした 行 の 数 を 計 算 できます なお グリッドがフィルタ 対 応 のデータソースと 連 結 されている 場 合 フィルタの UseCollectionView プロパティを true に 設 定 すると フィルタをデータソースに 直 接 適 用 できます(ICollectionView.Filter プロパティを 使 用 ) そして このモードを 使 用 する 場 合 はフィルタでの 変 更 は 行 数 に( 同 じデータソースと 連 結 されている 他 のコントロールの 項 目 数 にも) 影 響 を 及 ぼします 実 行 例 値 フィルタ (Default) 104 Copyright GrapeCity inc. All rights reserved.

106 実 行 例 条 件 フィルタ(ByCondition) フィルタリングを 実 現 するサンプルコードについては 製 品 付 属 サンプル ColumnFilter をご 参 照 ください 105 Copyright GrapeCity inc. All rights reserved.

107 フィルタリングを 適 用 する(C1FlexGridFilter を 使 用 ) C1FlexGrid には Excel 形 式 のフィルタ 処 理 を 提 供 する ' 拡 張 アセンブリ' C1.WPF.FlexGridFilter が 付 属 します これらの アセンブリを 使 用 するには それをプロジェクトに 追 加 し C1FlexGridFilter オブジェクトを 作 成 して 既 存 のグリッドに 関 連 付 け ます 次 に 例 を 示 します C# // C1FlexGrid を 作 成 します var flex = new C1FlexGrid(); // グリッドでフィルタ 処 理 を 有 効 にします var gridfilter = new C1FlexGridFilter(flex); FlexGrid for WPF/Silverlight さらに C1FlexGrid コントロールでグループ 化 を 操 作 できるように C1.WPF.FlexGrid.GroupPanel アセンブリも 提 供 されてい ます 直 接 コントロールに 機 能 を 追 加 する 代 わりに 拡 張 アセンブリを 使 用 するという 決 定 は 2つの 理 由 があります 1. グリッドのアセンブリサイズを 小 型 で 維 持 することができます 開 発 者 は 各 プロジェクトに 使 用 する 拡 張 機 能 を 選 択 す ることができます 2. カスタムコードを 使 用 することで グリッドの 機 能 を 拡 張 することを 有 効 とします 詳 細 については 製 品 付 属 サンプル ExcelGridをご 参 照 ください また グリッドが 宣 言 されている XAML ファイルでフィルタ 処 理 を 有 効 にすることもできます その 構 文 を 次 に 示 します XAML <c1:c1flexgrid Name="_flex" > <!-- コントロールにフィルタ 処 理 のサポートを 追 加 します --> <c1:c1flexgridfilterservice.flexgridfilter> <c1:c1flexgridfilter /> </c1:c1flexgridfilterservice.flexgridfilter> </c1:c1flexgrid> フィルタ 処 理 を 有 効 にしたら グリッドの 列 ヘッダにマウスポインタを 置 くと ドロップダウンアイコンが 表 示 されます このドロッ プダウンは ユーザーが 列 のデータをフィルタ 処 理 する 方 法 を 指 定 するためのエディタを 表 示 します ユーザーは 2 種 類 の フィルタから 選 択 できます 1. 値 フィルタ:このフィルタを 使 用 すると ユーザーは 表 示 する 値 をリストから 選 択 できます 2. 条 件 フィルタ:このフィルタを 使 用 すると ユーザーは 演 算 子 (より 大 きい より 小 さいなど)とパラメータから 成 る2つの 条 件 を 指 定 できます これらの 条 件 自 体 は AND または OR 演 算 子 で 組 み 合 わされます 編 集 中 のフィルタは 次 の 画 像 のようになります 106 Copyright GrapeCity inc. All rights reserved.

108 値 フィルタ:リストから 値 を 選 択 してフィルタを 作 成 します 条 件 フィルタ:1つまたは2つの 条 件 を 設 定 してフィルタを 作 成 します ほとんどのアプリケーションにはデフォルトのフィルタ 設 定 で 十 分 ですが いくつかの 方 法 でフィルタをカスタマイズすることもで きます フィルタモードの 選 択 フィルタは UseCollectionView プロパティの 設 定 に 基 づいて 2つのモードで 機 能 します フィルタの UseCollectionView を false に 設 定 すると フィルタ 基 準 を 満 たさない 行 は 非 表 示 になります(それらの 行 の Visible プロパティが false に 設 定 されます) このモードでは フィルタは 行 数 に 影 響 を 及 ぼしません このモードは 連 結 およ び 非 連 結 グリッドで 使 用 できます フィルタの UseCollectionView プロパティを true に 設 定 すると フィルタがデータソースに 適 用 されます (ICollectionView.Filter プロパティを 使 用 ) このモードでは フィルタが 変 更 されると グリッドや 同 じデータソースに 連 結 さ れている 他 のすべてのコントロールに 対 してデータソースから 公 開 されている 項 目 の 数 に 影 響 を 及 ぼします このモードは 連 結 モードでのみ 使 用 できます 次 に 例 を 示 します 107 Copyright GrapeCity inc. All rights reserved.

109 C# // C1FlexGrid を 作 成 します var flex = new C1FlexGrid(); // グリッドでフィルタ 処 理 を 有 効 にします var gridfilter = new C1FlexGridFilter(flex); // データソースレベルでフィルタ 処 理 します gridfilter.usecollectionview = true; または XAML で 次 のように 設 定 します XAML <c1:c1flexgrid Name="_flex" > <!-- コントロールにフィルタ 処 理 のサポートを 追 加 します:--> <c1:c1flexgridfilterservice.flexgridfilter> <c1:c1flexgridfilter UseCollectionView= True /> </c1:c1flexgridfilterservice.flexgridfilter> </c1:c1flexgrid> 列 ごとのフィルタタイプのカスタマイズ デフォルトでは すべての 列 でフィルタが 有 効 です ブール 値 またはや 列 挙 型 データを 含 む 列 は 値 フィルタを 受 け 取 り その 他 のデータ 型 を 含 む 列 は 値 フィルタと 条 件 フィルタを 受 け 取 ります FilterType プロパティを 使 用 すると この 動 作 を 変 更 して 列 ごとに 有 効 なフィルタタイプを 指 定 できます 列 に 一 意 の 値 が 多 くある 場 合 や フィルタを 使 用 しない 連 結 が 列 に 含 まれる 場 合 には フィルタタイプの 指 定 が 重 要 です たとえば 画 像 を 含 む 列 は 値 フィルタまたは 条 件 フィルタでフィルタ 処 理 することはできません この 場 合 は FilterType プロ パティを None に 設 定 することで フィルタを 無 効 にします また 数 千 個 の 項 目 が 含 まれるグリッドに 一 意 の ID 列 がある 場 合 は 値 フィルタに 追 加 される 項 目 が 多 くなりすぎるため 処 理 が 遅 くなり あまり 役 に 立 ちません この 場 合 は FilterType プロパティを Condition に 設 定 することで 値 フィルタを 無 効 にします 次 のコードは この 方 法 を 示 します C# // C1FlexGrid を 作 成 します var flex = new C1FlexGrid(); // グリッドでフィルタ 処 理 を 有 効 にします var gridfilter = new C1FlexGridFilter(flex); // Image 列 のフィルタを 無 効 にします var columnfilter = gridfilter.getcolumnfilter(flex.columns[ Image ]); columnfilter.filtertype = FilterType.None; // ID 列 の 値 フィルタを 無 効 にします columnfilter = gridfilter.getcolumnfilter(flex.columns[ ID ]); columnfilter.filtertype = FilterType.Condition; コードでのフィルタの 指 定 ほとんどの 場 合 フィルタはユーザーによって 設 定 されますが ColumnFilter クラスは 開 発 者 がコードを 使 用 してフィルタ 条 件 を 判 定 したり 変 更 することができる 完 全 なオブジェクトモデルを 公 開 します 108 Copyright GrapeCity inc. All rights reserved.

110 たとえば 次 のコードは フィルタを2 番 目 の 列 に 適 用 します このフィルタにより グリッドには 2 番 目 の 列 の 値 に 文 字 Z が 含 まれる 項 目 が 表 示 されます C# // C1FlexGrid を 作 成 します var flex = new C1FlexGrid(); // グリッドでフィルタ 処 理 を 有 効 にします var gridfilter = new C1FlexGridFilter(flex); // 最 初 の 列 のフィルタを 取 得 します var columnfilter = gridfilter.getcolumnfilter(flex.columns[0]); // フィルタ 条 件 ("Z" を 含 む)を 作 成 します var condition = columnfilter.conditionfilter.condition1; condition.operator = ConditionOperator.Contains; condition.parameter = "Z"; // フィルタを 適 用 します gridfilter.apply(); フィルタの 保 存 C1FlexGridFilter クラスには 現 在 のフィルタ 状 態 を XML 文 字 列 として 取 得 または 設 定 する FilterDefinition プロパティが あります この 文 字 列 を 使 用 して ユーザーがアプリケーションを 終 了 したときのフィルタ 状 態 を 保 存 し 後 で 復 元 することがで きます 複 数 のフィルタ 定 義 を 保 存 することもできます ユーザーは これらの 設 定 済 みのフィルタを 選 択 してカスタマイズできます フィルタ 定 義 は SaveFilterDefinition メソッドと LoadFilterDefinition メソッドを 使 用 して ストリームに 保 存 したり 復 元 す ることもできます フィルタリングを 適 用 する(ICollectionView を 使 用 ) ICollectionView インターフェイスでは Filter プロパティを 使 用 したデータのフィルタ 処 理 がサポートされます Filter プロパ ティは コレクション 内 の 各 項 目 に 対 して 呼 び 出 されるメソッドを 指 定 します このメソッドが true を 返 す 場 合 その 項 目 は ビューに 含 まれます このメソッドが false を 返 す 場 合 その 項 目 はフィルタ 処 理 されて 非 表 示 になります ユーザーコントロールSearchBox をIcollectionViewフィルタの 例 とします このコントロールは 検 索 する 値 をユーザーが 入 力 する TextBox コントロールと 1つのタイマーから 構 成 されます このタイマーは 検 索 する 値 をユーザーが 入 力 する 際 に 1 文 字 ごとにフィルタが 適 用 し 直 されることがないように 短 時 間 の 遅 延 を 提 供 します ユーザーが 入 力 を 停 止 すると このタイマーが 次 のコードを 使 って 動 作 し フィルタを 適 用 します WPF View.Filter = null; View.Filter = (object item) => // 検 索 テキストを 取 得 します var srch = _txtsearch.text; //テキストがない 場 合 すべての 項 目 を 表 示 します if (string.isnullorempty(srch)) 109 Copyright GrapeCity inc. All rights reserved.

111 return true; // 任 意 の 指 定 したプロパティのテキストを 含 む 項 目 を 表 示 します foreach (PropertyInfo pi in _propertyinfo) var value = pi.getvalue(item, null) as string; if (value!= null && value.indexof(srch, StringComparison.OrdinalIgnoreCase) > -1) return true; //この 項 目 を 除 外 します return false; ; ラムダ 関 数 を 使 って Filter プロパティの 値 を 設 定 していることに 注 意 してください 独 立 したメソッドを 提 供 することもできました が この 表 記 は 簡 潔 であり 必 要 に 応 じてローカル 変 数 を 使 用 できるため こちらの 方 が 使 いやすい 場 合 も 数 多 く 存 在 します このラムダ 関 数 は 項 目 をパラメータとして 受 け 取 り オブジェクトの 指 定 されたプロパティの 値 を 取 得 し オブジェクトのいずれ かのプロパティに 検 索 対 象 の 文 字 列 が 含 まれる 場 合 は true を 返 します たとえば オブジェクトの 型 が "Song" であり 指 定 されたプロパティが "Title" "Album" および "Artist" である 場 合 この 関 数 は 曲 のタイトル アルバム またはアーティスト 内 に 検 索 対 象 の 文 字 列 が 見 つかった 場 合 に true を 返 します フィルタが 適 用 されると グリッド(および ICollectionView オブジェクトに 連 結 されているその 他 すべてのコントロール)には フィルタの 結 果 が 直 ちに 反 映 されて フィルタによって 選 択 された 項 目 のみが 表 示 されます フィルタ 処 理 とグループ 化 は 組 み 合 わせて 使 用 しても 適 切 に 機 能 することに 注 目 してください 次 の 図 (MainTestApplication サンプルより)に 非 常 に 多 い 曲 のリストにフィルタが 適 用 されている 様 子 を 示 します この 図 は フィルタが "Water" という 単 語 に 設 定 された 際 に 取 得 したものです フィルタは すべてのフィールド( 曲 アルバ ム アーティスト)で 一 致 を 検 索 します このため "Creedence Clearwater Revival" の 曲 はすべて 自 動 的 に 含 まれます グリッドの 上 に 表 示 されているステータスラベルに 注 目 してください リストが 変 更 されるたびに このラベルは 自 動 的 に 更 新 さ れます したがって フィルタが 適 用 されると このステータスは 新 しいフィルタを 反 映 して 更 新 されます ステータスを 更 新 する ルーチンは LINQ を 使 用 して 選 択 されたアーティスト アルバム および 曲 の 数 を 計 算 し 合 計 のストレージと 再 生 時 間 を 計 算 します 曲 のステータス 更 新 ルーチンは 次 のように 実 装 されます WPF 110 Copyright GrapeCity inc. All rights reserved.

112 // 曲 のステータスを 更 新 します void UpdateSongStatus() var view = _flexmlib.itemssource as ICollectionView; var songs = view.oftype<song>(); _txtsongs.text = string.format( "0:n0 アーティスト; 1:n0 アルバム; 2:n0 曲 ; " + "3:n0 MB; 4:n2 日 間 ", (from s in songs select s.artist).distinct().count(), (from s in songs select s.album).distinct().count(), (from s in songs select s.name).count(), (double)(from s in songs select s.size/1024.0/1024.0).sum(), (double)(from s in songs select s.duration/ /24.0).sum()); このルーチンは グリッドには 直 接 関 連 しませんが 大 きなデータソースに 連 結 されたグリッドを 表 示 する 際 に 情 報 の 取 得 が 必 要 になることが 多 いため LINQ 機 能 を 活 用 する 方 法 を 示 しました 上 の LINQ 文 は Distinct および Count コマンドを 使 用 して 現 在 データソースで 公 開 されているアーティスト アルバム お よび 曲 の 数 を 計 算 します また Sum コマンドを 使 用 して 現 在 の 選 択 範 囲 の 合 計 のストレージと 再 生 時 間 を 計 算 します ICollectionView のフィルタ 述 語 は 子 行 をフィルタできません 子 行 をフィルタできるには 子 行 のタイプはICollectionViewに 設 定 されている 必 要 があります 親 グリッドと 子 行 の 両 方 がICollectionViewタイプに 設 定 されている 場 合 両 方 をフィルタするこ とが 可 能 です ICollectionViewを 使 用 する 子 行 では ソートが 対 応 されていません グリッド パフォーマンスを 改 善 する WPFアプリケーションではごく 一 般 的 に 使 われる 仮 想 化 技 術 では セルは ユーザーがグリッドの 範 囲 をスクロール ソート 選 択 するたびに 作 成 され 破 棄 されます 同 じく C1FlexGrid の 場 合 も 仮 想 化 技 術 を 活 用 してパフォーマンスを 改 善 できます rows.defernotifications() を 使 用 します グリッドの RowCollection クラスを 取 得 し ICollectionView インターフェイスで 使 用 したメカニズムと 同 じDeferNotifications を 実 装 します このメカニズムは Windows フォームアプリケーションでよく 使 用 される BeginUpdate/EndUpdate パターンに 似 てお り パフォーマンスの 大 幅 な 向 上 をもたらします 次 の 例 では 連 結 グリッドおよび 非 連 結 グリッドの 場 合 DeferNotifications メカニズムを 使 用 してパフォーマンスを 向 上 します 非 連 結 グリッドの 場 合 コードは 次 のようになります VisualBasic Private Sub InitialUnboundFlexGrid() Dim rows = _flex1.rows 'グリッドの RowsCollection クラスを 取 得 して 'ICollectionView インターフェイスで 使 用 したメカニズムと 同 じDeferNotifications を 実 装 します Using rows.defernotifications() ' 非 連 結 グリッドに 行 / 列 を 追 加 します For i As Integer = 0 To 19 _flex1.columns.add(new Column()) Next 111 Copyright GrapeCity inc. All rights reserved.

113 For i As Integer = 0 To 499 _flex1.rows.add(new Row()) Next ' グリッドにデータを 挿 入 します For r As Integer = 0 To _flex1.rows.count - 1 For c As Integer = 0 To _flex1.columns.count - 1 _flex1(r, c) = String.Format("cell [0,1]", r, c) Next Next End Using C# private void InitialUnboundFlexGrid() var rows = _flex1.rows; //グリッドの RowsCollection クラスを 取 得 して //ICollectionView インターフェイスで 使 用 したメカニズムと 同 じDeferNotifications を 実 装 します using (rows.defernotifications()) // 非 連 結 グリッドに 行 / 列 を 追 加 します for (int i = 0; i < 20; i++) _flex1.columns.add(new Column()); for (int i = 0; i < 500; i++) _flex1.rows.add(new Row()); // グリッドにデータを 挿 入 します for (int r = 0; r < _flex1.rows.count; r++) for (int c = 0; c < _flex1.columns.count; c++) _flex1[r, c] = string.format("cell [0,1]", r, c); 連 結 グリッドの 場 合 コードは 次 のようになります VisualBasic Private Sub InitialBoundFlexGrid() Dim p = Product.GetProducts(100) 112 Copyright GrapeCity inc. All rights reserved.

114 _flex2.itemssource = p Dim view = _flex2.collectionview ''using (view.deferrefresh())' 文 はオプションです この 文 を 追 加 すると 'すべてのグループが 設 定 されるまでデータソースからの 通 知 が 保 留 になるため パフォーマンスが 向 上 します Using view.deferrefresh() view.groupdescriptions.clear() view.groupdescriptions.add(new PropertyGroupDescription("Rating")) view.groupdescriptions.add(new PropertyGroupDescription("Color")) End Using C# private void InitialBoundFlexGrid() var p = Product.GetProducts(100); ListCollectionView view = new ListCollectionView(p); //using (view.deferrefresh())' 文 はオプションです この 文 を 追 加 すると //すべてのグループが 設 定 されるまでデータソースからの 通 知 が 保 留 になるため パフォーマンスが 向 上 します using (view.deferrefresh()) view.groupdescriptions.clear(); view.groupdescriptions.add(new PropertyGroupDescription("Rating")); view.groupdescriptions.add(new PropertyGroupDescription("Color")); _flex2.itemssource = view; レイアウトを 復 元 する C1FlexGrid の SaveColumnLayout/LoadColumnLayout メソッドを 使 用 してSystem.Xml.XmlReader から 列 のレイアウト を 保 存 /ロードできます このプロパティを 使 用 すると 列 のレイアウト 文 字 列 は 列 の 位 置 表 示 / 非 表 示 および 幅 を 定 義 しま す しかし スタイルなどが 維 持 されませんのでご 注 意 ください SaveColumnLayout/LoadColumnLayout メソッドを 実 現 する 方 法 は 以 下 に 示 します 実 行 例 113 Copyright GrapeCity inc. All rights reserved.

115 Visual Basic Partial Public Class MainWindow Inherits Window Public Sub New() InitializeComponent() Dim p = Product.GetProducts(50) _flex.itemssource = p 'グリッドのスタイルを 設 定 します _flex.rows.frozen = 1 _flex.columns.frozen = 1 _flex.background = Brushes.YellowGreen _flex.rows(0).foreground = Brushes.Red _flex.rows(0).background = Brushes.Yellow Private Sub Save_Click(sender As Object, e As RoutedEventArgs) Dim settings As New XmlWriterSettings() settings.indent = True settings.indentchars = vbtab Dim writer As XmlWriter = XmlWriter.Create("products.xml", settings) _flex.savecolumnlayout(writer) writer.close() MessageBox.Show(" 正 常 に 保 存 しました!") Private Sub Load_Click(sender As Object, e As RoutedEventArgs) 114 Copyright GrapeCity inc. All rights reserved.

116 Dim reader As XmlReader = XmlReader.Create("products.xml") _flex.loadcolumnlayout(reader) reader.close() End Class C# public partial class MainWindow : Window public MainWindow() InitializeComponent(); var p = Product.GetProducts(50); _flex.itemssource = p; _flex.rows.frozen = 1; _flex.columns.frozen = 1; _flex.background = Brushes.YellowGreen; _flex.rows[0].foreground = Brushes.Red; _flex.rows[0].background = Brushes.Yellow; private void Save_Click(object sender, RoutedEventArgs e) XmlWriterSettings settings = new XmlWriterSettings(); settings.indent = true; settings.indentchars = "\t"; XmlWriter writer = XmlWriter.Create("producs.xml", settings); _flex.savecolumnlayout(writer); writer.close(); MessageBox.Show("Save completed!"); private void Load_Click(object sender, RoutedEventArgs e) XmlReader reader = XmlReader.Create("producs.xml"); _flex.loadcolumnlayout(reader); reader.close(); エクスポート Excelファイルを 保 存 する C1FlexGrid の 内 容 は デフォルトで CSV HTML 形 式 またはプレーンテキストとしてエクスポートできますが C1Excel を 使 用 してグリッドのデータをExcel 形 式 にエクスポートすることも 可 能 です また C1Excel ライブラリを 使 用 してエクセル(XLSX 形 式 )にもエクスポートできま す 次 の 例 では 通 常 の 連 結 グリッド C1FlexGrid に 対 して ExcelFilter のヘルパークラスを 使 用 してグリッドの 内 容 を XLSX 形 式 ファイルにエクスポートする 方 法 を 示 します 基 本 的 に これらのヘルパークラスをプロジェクトに 追 加 してクラスのメソッドを 使 用 することでデータをエ クセルファイルにエクスポートできます 115 Copyright GrapeCity inc. All rights reserved.

117 [ 実 行 例 ] [Excelファイルを 保 存 する] サンプルコードは 次 のようになります C# サンプルコード public partial class MainWindow : Window public MainWindow() InitializeComponent(); IEnumerable<Product> products = Product.GetProducts(250); products.elementat(0).price = -10; products.elementat(1).price = -10; C1FlexGrid1.ItemsSource = products; private void btnexport_click(object sender, RoutedEventArgs e) var dlg = new Microsoft.Win32.SaveFileDialog(); dlg.defaultext = "xlsx"; dlg.filter = "Excel Workbook (*.xlsx) *.xlsx " + "HTML File (*.htm;*.html) *.htm;*.html " + "Comma Separated Values (*.csv) *.csv " + "Text File (*.txt) *.txt"; if (dlg.showdialog() == true) var ext = System.IO.Path.GetExtension(dlg.SafeFileName).ToLower(); ext = ext == ".htm"? "ehtm" : ext == ".html"? "ehtm" : ext; switch (ext) case "ehtm": C1FlexGrid1.Save(dlg.FileName, C1.WPF.FlexGrid.FileFormat.Html, SaveOptions.Formatted); break; case ".csv": C1FlexGrid1.Save(dlg.FileName, C1.WPF.FlexGrid.FileFormat.Csv, SaveOptions.Formatted); break; case ".txt": C1FlexGrid1.Save(dlg.FileName, C1.WPF.FlexGrid.FileFormat.Text, SaveOptions.Formatted); break; default: Save(dlg.FileName,C1FlexGrid1); break; public void Save(string filename, C1FlexGrid flexgrid) // 保 存 するエクセルブックを 作 成 します var book = new C1XLBook(); book.sheets.clear(); 116 Copyright GrapeCity inc. All rights reserved.

118 var xlsheet = book.sheets.add("sheet1"); ExcelExport.ExcelFilter.Save(flexgrid, xlsheet); // エクセルブックを 保 存 します book.save(filename, C1.WPF.Excel.FileFormat.OpenXml); ExcelFilter.cs using System; using System.Collections; using System.Collections.Generic; using System.Data; using System.Diagnostics; using C1.WPF.Excel; using C1.WPF.FlexGrid; using C1.WPF; using System.Net; using System.Windows; using System.Windows.Controls; using System.Windows.Documents; using System.Windows.Ink; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Animation; using System.Windows.Shapes; namespace ExcelExport /// <summary> /// XLSheetとC1FlexGridの 間 にデータを 転 送 するための 方 法 を 提 供 するクラス /// </summary> internal sealed class ExcelFilter private static C1XLBook _lastbook; private static Dictionary<XLStyle, ExcelCellStyle> _cellstyles = new Dictionary<XLStyle, ExcelCellStyle>(); private static Dictionary<ExcelCellStyle, XLStyle> _excelstyles = new Dictionary<ExcelCellStyle, XLStyle>(); // #region "** object model" /// <summary> /// C1FlexGridのコンテンツをXLSheetに 保 存 します /// </summary> public static void Save(C1FlexGrid flex, XLSheet sheet) // 新 しいbookの 場 合 は スタイルのキャッシュをクリアします if (!object.referenceequals(sheet.book, _lastbook)) _cellstyles.clear(); _excelstyles.clear(); _lastbook = sheet.book; // グローバルパラメーターを 保 存 します sheet.defaultrowheight = PixelsToTwips(flex.Rows.DefaultSize); sheet.defaultcolumnwidth = PixelsToTwips(flex.Columns.DefaultSize); sheet.locked = flex.isreadonly; sheet.showgridlines = flex.gridlinesvisibility!= GridLinesVisibility.None; sheet.showheaders = flex.headersvisibility!= HeadersVisibility.None; sheet.outlinesbelow = flex.grouprowposition == GroupRowPosition.BelowData; // 列 を 保 存 します sheet.columns.clear(); foreach (Column col in flex.columns) dynamic c = sheet.columns.add(); if (!col.width.isauto) c.width = PixelsToTwips(col.ActualWidth); c.visible = col.visible; if (col.cellstyle is ExcelCellStyle) c.style = GetXLStyle(flex, sheet, (ExcelCellStyle)col.CellStyle); sheet.rows.clear(); // 列 ヘッダーを 保 存 します XLStyle headerstyle = default(xlstyle); headerstyle = new XLStyle(sheet.Book); headerstyle.font = new XLFont("Arial", 10, true, false); foreach (Row row in flex.columnheaders.rows) dynamic r = sheet.rows.add(); if (row.height > -1) r.height = PixelsToTwips(row.Height); if (row.cellstyle is ExcelCellStyle) r.style = GetXLStyle(flex, sheet, (ExcelCellStyle)row.CellStyle); if (row is ExcelRow) r.outlinelevel = ((ExcelRow)row).Level; for (int c = 0; c <= flex.columnheaders.columns.count - 1; c++) // セル 値 を 保 存 します dynamic cell = sheet[row.index, c]; string colheader = flex.columnheaders[row.index, c]!= null? flex.columnheaders[row.index, c].tostring() : flex.columns[c].columnname; cell.value = colheader; // 列 ヘッダーを 太 字 にします cell.style = headerstyle; 117 Copyright GrapeCity inc. All rights reserved.

119 r.visible = row.visible; // 行 を 保 存 します foreach (Row row in flex.rows) dynamic r = sheet.rows.add(); if (row.height > -1) r.height = PixelsToTwips(row.Height); if (row.cellstyle is ExcelCellStyle) r.style = GetXLStyle(flex, sheet, (ExcelCellStyle)row.CellStyle); if (row is ExcelRow) r.outlinelevel = ((ExcelRow)row).Level; r.visible = row.visible; // セルを 保 存 します for (int r = flex.columnheaders.rows.count; r <= flex.rows.count - 1; r++) for (int c = 0; c <= flex.columns.count - 1; c++) // セル 値 を 保 存 します dynamic cell = sheet[r, c]; dynamic obj = flex[r, c]; cell.value = obj is FrameworkElement? 0 : obj; // セルの 数 式 とスタイルを 保 存 します dynamic row = flex.rows[r] as ExcelRow; if (row!= null) // セルの 数 式 を 保 存 します dynamic col = flex.columns[c]; // セルのスタイルを 保 存 します dynamic cs = row.getcellstyle(col) as ExcelCellStyle; if (cs!= null) cell.style = GetXLStyle(flex, sheet, cs); // 選 択 範 囲 を 保 存 します dynamic sel = flex.selection; if (sel.isvalid) dynamic xlsel = new XLCellRange(sheet, sel.row, sel.row2, sel.column, sel.column2); sheet.selectedcells.clear(); sheet.selectedcells.add(xlsel); #endregion // #region "** implementation" private static double TwipsToPixels(double twips) return Convert.ToInt32(twips / * 96.0 * ); private static int PixelsToTwips(double pixels) return Convert.ToInt32(pixels * / 96.0 / ); private static double PointsToPixels(double points) return points / 72.0 * 96.0 * 1.2; private static double PixelsToPoints(double pixels) return pixels * 72.0 / 96.0 / 1.2; // Excelスタイルをクリッドスタイルに 変 更 します private static ExcelCellStyle GetCellStyle(XLStyle x) // キャッシュを 検 索 します ExcelCellStyle s = default(excelcellstyle); if (_cellstyles.trygetvalue(x, out s)) return s; // 見 つかりません スタイルを 作 成 します s = new ExcelCellStyle(); // 配 置 switch (x.alignhorz) case XLAlignHorzEnum.Left: s.horizontalalignment = HorizontalAlignment.Left; break; case XLAlignHorzEnum.Center: s.horizontalalignment = HorizontalAlignment.Center; break; case XLAlignHorzEnum.Right: s.horizontalalignment = HorizontalAlignment.Right; break; switch (x.alignvert) case XLAlignVertEnum.Top: s.verticalalignment = VerticalAlignment.Top; 118 Copyright GrapeCity inc. All rights reserved.

120 break; case XLAlignVertEnum.Center: s.verticalalignment = VerticalAlignment.Center; break; case XLAlignVertEnum.Bottom: s.verticalalignment = VerticalAlignment.Bottom; break; s.textwrapping = x.wordwrap; // カラー if (x.backpattern == XLPatternEnum.Solid && IsColorValid(x.BackColor)) s.background = new SolidColorBrush(x.BackColor); if (IsColorValid(x.ForeColor)) s.foreground = new SolidColorBrush(x.ForeColor); // フォント dynamic font = x.font; if (font!= null) s.fontfamily = new FontFamily(font.FontName); s.fontsize = PointsToPixels(font.FontSize); if (font.bold) s.fontweight = FontWeights.Bold; if (font.italic) s.fontstyle = FontStyles.Italic; if (font.underline!= XLUnderlineStyle.None) s.textdecorations = TextDecorations.Underline; // 書 式 if (!string.isnullorempty(x.format)) s.format = XLStyle.FormatXLToDotNet(x.Format); // 境 界 線 s.cellborderthickness = new Thickness(GetBorderThickness(x.BorderLeft), GetBorderThickness(x.BorderTop), GetBorderThickness(x.BorderRight), GetBorderThickness(x.BorderBottom)); s.cellborderbrushleft = GetBorderBrush(x.BorderColorLeft); s.cellborderbrushtop = GetBorderBrush(x.BorderColorTop); s.cellborderbrushright = GetBorderBrush(x.BorderColorRight); s.cellborderbrushbottom = GetBorderBrush(x.BorderColorBottom); // キャッシュに 保 存 して 戻 します _cellstyles[x] = s; return s; // グリッドスタイルをExcelスタイルに 変 更 します private static XLStyle GetXLStyle(C1FlexGrid flex, XLSheet sheet, ExcelCellStyle s) // キャッシュで 検 索 します XLStyle x = default(xlstyle); if (_excelstyles.trygetvalue(s,out x)) return x; // 見 つかりません スタイルを 作 成 します x = new XLStyle(sheet.Book); // 配 置 if (s.horizontalalignment.hasvalue) switch (s.horizontalalignment.value) case HorizontalAlignment.Left: x.alignhorz = XLAlignHorzEnum.Left; break; case HorizontalAlignment.Center: x.alignhorz = XLAlignHorzEnum.Center; break; case HorizontalAlignment.Right: x.alignhorz = XLAlignHorzEnum.Right; break; if (s.verticalalignment.hasvalue) switch (s.verticalalignment.value) case VerticalAlignment.Top: x.alignvert = XLAlignVertEnum.Top; break; case VerticalAlignment.Center: x.alignvert = XLAlignVertEnum.Center; break; case VerticalAlignment.Bottom: x.alignvert = XLAlignVertEnum.Bottom; break; if (s.textwrapping.hasvalue) x.wordwrap = s.textwrapping.value; // カラー if (s.background is SolidColorBrush) x.backcolor = ((SolidColorBrush)s.Background).Color; x.backpattern = XLPatternEnum.Solid; if (s.foreground is SolidColorBrush) 119 Copyright GrapeCity inc. All rights reserved.

121 x.forecolor = ((SolidColorBrush)s.Foreground).Color; // フォント dynamic fontname = flex.fontfamily.source; dynamic fontsize = flex.fontsize; dynamic bold = false; dynamic italic = false; bool underline = false; bool hasfont = false; if (s.fontfamily!= null) fontname = s.fontfamily.source; hasfont = true; if (s.fontsize.hasvalue) fontsize = s.fontsize.value; hasfont = true; if (s.fontweight.hasvalue) bold = s.fontweight.value == FontWeights.Bold s.fontweight.value == FontWeights.ExtraBold s.fontweight.value == FontWeights.SemiBold; hasfont = true; if (s.fontstyle.hasvalue) italic = s.fontstyle.value == FontStyles.Italic; hasfont = true; if (s.textdecorations!= null) underline = true; hasfont = true; if (hasfont) fontsize = PixelsToPoints(fontSize); if (underline) dynamic color = Colors.Black; if (flex.foreground is SolidColorBrush) color = ((SolidColorBrush)flex.Foreground).Color; if (s.foreground is SolidColorBrush) color = ((SolidColorBrush)s.Foreground).Color; x.font = new XLFont(fontName, Convert.ToSingle(fontSize), bold, italic, false, XLFontScript.None, XLUnderlineStyle.Single, color); else x.font = new XLFont(fontName, Convert.ToSingle(fontSize), bold, italic); // 書 式 if (!string.isnullorempty(s.format)) x.format = XLStyle.FormatDotNetToXL(s.Format); // 境 界 線 if (s.cellborderthickness.left > 0 && s.cellborderbrushleft is SolidColorBrush) x.borderleft = GetBorderLineStyle(s.CellBorderThickness.Left); x.bordercolorleft = ((SolidColorBrush)s.CellBorderBrushLeft).Color; if (s.cellborderthickness.top > 0 && s.cellborderbrushtop is SolidColorBrush) x.bordertop = GetBorderLineStyle(s.CellBorderThickness.Top); x.bordercolortop = ((SolidColorBrush)s.CellBorderBrushTop).Color; if (s.cellborderthickness.right > 0 && s.cellborderbrushright is SolidColorBrush) x.borderright = GetBorderLineStyle(s.CellBorderThickness.Right); x.bordercolorright = ((SolidColorBrush)s.CellBorderBrushRight).Color; if (s.cellborderthickness.bottom > 0 && s.cellborderbrushbottom is SolidColorBrush) x.borderbottom = GetBorderLineStyle(s.CellBorderThickness.Bottom); x.bordercolorbottom = ((SolidColorBrush)s.CellBorderBrushBottom).Color; // キャッシュに 保 存 して 返 します _excelstyles[s] = x; return x; private static double GetBorderThickness(XLLineStyleEnum ls) switch (ls) case XLLineStyleEnum.None: return 0; case XLLineStyleEnum.Hair: return 0.5; case XLLineStyleEnum.Thin: case XLLineStyleEnum.ThinDashDotDotted: case XLLineStyleEnum.ThinDashDotted: case XLLineStyleEnum.Dashed: case XLLineStyleEnum.Dotted: return 1; case XLLineStyleEnum.Medium: case XLLineStyleEnum.MediumDashDotDotted: case XLLineStyleEnum.MediumDashDotted: case XLLineStyleEnum.MediumDashed: case XLLineStyleEnum.SlantedMediumDashDotted: return 2; case XLLineStyleEnum.Double: case XLLineStyleEnum.Thick: return 3; return 0; 120 Copyright GrapeCity inc. All rights reserved.

122 private static XLLineStyleEnum GetBorderLineStyle(double t) if (t == 0) return XLLineStyleEnum.None; if (t < 1) return XLLineStyleEnum.Hair; if (t < 2) return XLLineStyleEnum.Thin; if (t < 3) return XLLineStyleEnum.Medium; return XLLineStyleEnum.Thick; private static Brush GetBorderBrush(Color color) return IsColorValid(color)? new SolidColorBrush(color) : null; private static bool IsColorValid(Color color) return color.a > 0; // == 0xff; #endregion ExcelCellStyle.cs using System; using System.Collections; using System.Collections.Generic; using System.Data; using System.Diagnostics; using System.Net; using System.Windows; using System.Windows.Controls; using System.Windows.Documents; using System.Windows.Ink; using System.Windows.Input; using System.Windows.Media; using System.ComponentModel; using C1.WPF.FlexGrid; namespace ExcelExport /// <summary> /// Excelスタイルのセル 境 界 線 と 書 式 指 定 文 字 列 を 提 供 するためのCellStyleクラスを 拡 張 します /// </summary> public class ExcelCellStyle : CellStyle // ** フィールド private string _format; private Thickness _bdrthickness; private Brush _bdrleft; private Brush _bdrtop; private Brush _bdrright; private Brush _bdrbottom; private static Thickness _thicknessempty = new Thickness(0); // ** オブジェクト モデル public string Format get return _format; set if (value!= _format) _format = value; OnPropertyChanged(new PropertyChangedEventArgs("Format")); public Thickness CellBorderThickness get return _bdrthickness; set if (value!= _bdrthickness) _bdrthickness = value; OnPropertyChanged(new PropertyChangedEventArgs("BorderThickness")); public Brush CellBorderBrushLeft get return _bdrleft; set if (!object.referenceequals(value, _bdrleft)) _bdrleft = value; OnPropertyChanged(new PropertyChangedEventArgs("BorderColorLeft")); public Brush CellBorderBrushTop get return _bdrtop; set if (!object.referenceequals(value, _bdrtop)) 121 Copyright GrapeCity inc. All rights reserved.

123 _bdrtop = value; OnPropertyChanged(new PropertyChangedEventArgs("BorderColorTop")); public Brush CellBorderBrushRight get return _bdrright; set if (!object.referenceequals(value, _bdrright)) _bdrright = value; OnPropertyChanged(new PropertyChangedEventArgs("BorderColorRight")); public Brush CellBorderBrushBottom get return _bdrbottom; set if (!object.referenceequals(value, _bdrbottom)) _bdrbottom = value; OnPropertyChanged(new PropertyChangedEventArgs("BorderColorBottom")); // ** オーバーライド public override void Apply(Border bdr, SelectedState selstate) base.apply(bdr, selstate); ApplyBorder(bdr, _bdrleft, new Thickness(_bdrThickness.Left, 0, 0, 0)); ApplyBorder(bdr, _bdrtop, new Thickness(0, _bdrthickness.top, 0, 0)); ApplyBorder(bdr, _bdrright, new Thickness(0, 0, _bdrthickness.right, 0)); ApplyBorder(bdr, _bdrbottom, new Thickness(0, 0, 0, _bdrthickness.bottom)); private void ApplyBorder(Border bdr, Brush br, Thickness t) if (br!= null && t!= _thicknessempty) // 内 部 の 境 界 線 を 作 成 します dynamic inner = new Border(); inner.borderthickness = t; inner.borderbrush = br; // コンテンツに 拡 張 します dynamic content = bdr.child; bdr.child = inner; inner.child = content; // パディングします inner.padding = bdr.padding; bdr.padding = _thicknessempty; ExcelRow.cs using Microsoft.VisualBasic; using System; using System.Collections; using System.Collections.Generic; using System.Data; using System.Diagnostics; using C1.WPF.FlexGrid; using C1.WPF.Excel; using System.Globalization; using System.Windows; namespace ExcelExport /// <summary> /// 編 集 可 能 ツリー ノードとして 使 用 でき 各 列 と 関 連 するセルの /// スタイルのコレクションを 保 守 するグリッド 行 /// </summary> public class ExcelRow : GroupRow // ** フィールド private Dictionary<Column, CellStyle> _cellstyles; // 既 定 の 有 効 桁 数 を6 桁 に 設 定 します private const string DEFAULT_FORMAT = "#,##0.######"; // ** ctor public ExcelRow(ExcelRow stylerow) IsReadOnly = false; if (stylerow!= null && stylerow.grid!= null) foreach (var c in stylerow.grid.columns) dynamic cs = stylerow.getcellstyle(c); if (cs!= null) this.setcellstyle(c, cs.clone()); public ExcelRow() : this(null) // ** オブジェクト モデル /// <summary> /// データを 取 得 する 場 合 書 式 を 適 用 するためにオーバーライドされる 122 Copyright GrapeCity inc. All rights reserved.

124 /// </summary> public override string GetDataFormatted(Column col) // データを 取 得 します dynamic data = GetDataRaw(col); // 書 式 を 適 用 します dynamic ifmt = data as IFormattable; if (ifmt!= null) // セルの 書 式 を 取 得 します dynamic s = GetCellStyle(col) as ExcelCellStyle; dynamic fmt = s!= null && (!string.isnullorempty(s.format))? s.format : DEFAULT_FORMAT; data = ifmt.tostring(fmt, CultureInfo.CurrentUICulture); // 完 了 return data!= null? data.tostring() : string.empty; // ** オブジェクト モデル /// <summary> /// この 行 では セルにスタイルを 適 用 します /// </summary> public void SetCellStyle(Column col, CellStyle style) if (!object.referenceequals(style, GetCellStyle(col))) if (_cellstyles == null) _cellstyles = new Dictionary<Column, CellStyle>(); _cellstyles[col] = style; if (Grid!= null) Grid.Invalidate(new CellRange(this.Index, col.index)); /// <summary> /// この 行 では セルに 適 用 したスタイルを 取 得 します /// </summary> public CellStyle GetCellStyle(Column col) CellStyle s = null; if (_cellstyles!= null) _cellstyles.trygetvalue(col,out s); return s; VB サンプルコード Class MainWindow Inherits Window Public Sub New() InitializeComponent() Dim products As ListCollectionView = Product.GetProducts(250) TryCast(products.GetItemAt(0), Product).Price = -10 TryCast(products.GetItemAt(1), Product).Price = -10 C1FlexGrid1.ItemsSource = products Private Sub btnexport_click(sender As Object, e As RoutedEventArgs) Dim dlg = New Microsoft.Win32.SaveFileDialog() dlg.defaultext = "xlsx" dlg.filter = "Excel Workbook (*.xlsx) *.xlsx " + "HTML File (*.htm;*.html) *.htm;*.html " + "Comma Separated Values (*.csv) *.csv " + "Text File (*.txt) *.txt" If dlg.showdialog() = True Then Dim ext = System.IO.Path.GetExtension(dlg.SafeFileName).ToLower() ext = If(ext = ".htm", "ehtm", If(ext = ".html", "ehtm", ext)) Select Case ext Case "ehtm" If True Then C1FlexGrid1.Save(dlg.FileName, C1.WPF.FlexGrid.FileFormat.Html, C1.WPF.FlexGrid.SaveOptions.Formatted) Exit Select Case ".csv" If True Then C1FlexGrid1.Save(dlg.FileName, C1.WPF.FlexGrid.FileFormat.Csv, C1.WPF.FlexGrid.SaveOptions.Formatted) Exit Select Case ".txt" If True Then C1FlexGrid1.Save(dlg.FileName, C1.WPF.FlexGrid.FileFormat.Text, C1.WPF.FlexGrid.SaveOptions.Formatted) Exit Select Case Else If True Then Save(dlg.FileName, C1FlexGrid1) Exit Select End Select Public Sub Save(filename As String, flexgrid As C1.WPF.FlexGrid.C1FlexGrid) ' 保 存 するBookを 作 成 します Dim book = New C1XLBook() book.sheets.clear() Dim xlsheet = book.sheets.add("sheet1") ExcelFilter.Save(flexgrid, xlsheet) ' Bookを 保 存 します book.save(filename, C1.WPF.Excel.FileFormat.OpenXml) 123 Copyright GrapeCity inc. All rights reserved.

125 End Class ExcelFilter.vb Imports C1.WPF.Excel Imports C1.WPF.FlexGrid Friend NotInheritable Class ExcelFilter Private Shared _lastbook As C1XLBook Private Shared _cellstyles As New Dictionary(Of XLStyle, ExcelCellStyle)() Private Shared _excelstyles As New Dictionary(Of ExcelCellStyle, XLStyle)() ' #Region "** object model" ''' <summary> ''' C1FlexGridのコンテンツをXLSheetに 保 存 します ''' </summary> Public Shared Sub Save(flex As C1FlexGrid, sheet As XLSheet) ' 新 しいbookの 場 合 は スタイルのキャッシュをクリアします If Not Object.ReferenceEquals(sheet.Book, _lastbook) Then _cellstyles.clear() _excelstyles.clear() _lastbook = sheet.book ' グローバルパラメーターを 保 存 します sheet.defaultrowheight = PixelsToTwips(flex.Rows.DefaultSize) sheet.defaultcolumnwidth = PixelsToTwips(flex.Columns.DefaultSize) sheet.locked = flex.isreadonly sheet.showgridlines = flex.gridlinesvisibility <> GridLinesVisibility.None sheet.showheaders = flex.headersvisibility <> HeadersVisibility.None sheet.outlinesbelow = flex.grouprowposition = GroupRowPosition.BelowData ' 列 を 保 存 します sheet.columns.clear() For Each col As Column In flex.columns Dim c As XLColumn = sheet.columns.add() If Not col.width.isauto Then c.width = PixelsToTwips(col.ActualWidth) c.visible = col.visible If TypeOf col.cellstyle Is ExcelCellStyle Then c.style = GetXLStyle(flex, sheet, DirectCast(col.CellStyle, ExcelCellStyle)) Next sheet.rows.clear() ' 列 ヘッダーを 保 存 します Dim headerstyle As XLStyle = Nothing headerstyle = New XLStyle(sheet.Book) headerstyle.font = New XLFont("Arial", 10, True, False) For Each row As Row In flex.columnheaders.rows Dim r As XLRow = sheet.rows.add() If row.height > -1 Then r.height = PixelsToTwips(row.Height) If TypeOf row.cellstyle Is ExcelCellStyle Then r.style = GetXLStyle(flex, sheet, DirectCast(row.CellStyle, ExcelCellStyle)) If TypeOf row Is ExcelRow Then r.outlinelevel = DirectCast(row, ExcelRow).Level For c As Integer = 0 To flex.columnheaders.columns.count - 1 ' セル 値 を 保 存 します Dim cell As XLCell = sheet(row.index, c) Dim colheader As String = If(flex.ColumnHeaders(row.Index, c) IsNot Nothing, flex.columnheaders(row.index, c).tostring(), flex.columns(c).columnname) cell.value = colheader ' 列 ヘッダーを 太 字 にします cell.style = headerstyle Next r.visible = row.visible Next ' 行 を 保 存 します For Each row As Row In flex.rows Dim r As XLRow = sheet.rows.add() If row.height > -1 Then r.height = PixelsToTwips(row.Height) If TypeOf row.cellstyle Is ExcelCellStyle Then r.style = GetXLStyle(flex, sheet, DirectCast(row.CellStyle, ExcelCellStyle)) If TypeOf row Is ExcelRow Then r.outlinelevel = DirectCast(row, ExcelRow).Level r.visible = row.visible Next ' 選 択 範 囲 を 保 存 します For r As Integer = flex.columnheaders.rows.count To flex.rows.count - 1 For c As Integer = 0 To flex.columns.count - 1 ' セル 値 を 保 存 します Dim cell As XLCell = sheet(r, c) Dim obj As Object = flex(r, c) cell.value = If(TypeOf obj Is FrameworkElement, 0, obj) ' セルの 数 式 とスタイルを 保 存 します Dim row As ExcelRow = TryCast(flex.Rows(r), ExcelRow) If row IsNot Nothing Then ' セルの 数 式 を 保 存 します Dim col As Column = flex.columns(c) ' セルのスタイルを 保 存 します 124 Copyright GrapeCity inc. All rights reserved.

126 Dim cs As ExcelCellStyle = TryCast(row.GetCellStyle(col), ExcelCellStyle) If cs IsNot Nothing Then cell.style = GetXLStyle(flex, sheet, cs) Next Next ' 選 択 範 囲 を 保 存 します Dim sel As CellRange = flex.selection If sel.isvalid Then Dim xlsel As XLCellRange = New XLCellRange(sheet, sel.row, sel.row2, sel.column, sel.column2) sheet.selectedcells.clear() sheet.selectedcells.add(xlsel) #End Region ' #Region "** implementation" Private Shared Function TwipsToPixels(twips As Double) As Double Return Convert.ToInt32(twips / * 96.0 * ) End Function Private Shared Function PixelsToTwips(pixels As Double) As Integer Return Convert.ToInt32(pixels * / 96.0 / ) End Function Private Shared Function PointsToPixels(points As Double) As Double Return points / 72.0 * 96.0 * 1.2 End Function Private Shared Function PixelsToPoints(pixels As Double) As Double Return pixels * 72.0 / 96.0 / 1.2 End Function ' Excelスタイルをクリッドスタイルに 変 更 します Private Shared Function GetCellStyle(x As XLStyle) As ExcelCellStyle ' キャッシュを 検 索 します Dim s As ExcelCellStyle = Nothing If _cellstyles.trygetvalue(x, s) Then Return s ' 見 つかりません スタイルを 作 成 します s = New ExcelCellStyle() ' 配 置 Select Case x.alignhorz Case XLAlignHorzEnum.Left s.horizontalalignment = HorizontalAlignment.Left Exit Select Case XLAlignHorzEnum.Center s.horizontalalignment = HorizontalAlignment.Center Exit Select Case XLAlignHorzEnum.Right s.horizontalalignment = HorizontalAlignment.Right Exit Select End Select Select Case x.alignvert Case XLAlignVertEnum.Top s.verticalalignment = VerticalAlignment.Top Exit Select Case XLAlignVertEnum.Center s.verticalalignment = VerticalAlignment.Center Exit Select Case XLAlignVertEnum.Bottom s.verticalalignment = VerticalAlignment.Bottom Exit Select End Select s.textwrapping = x.wordwrap ' カラー If x.backpattern = XLPatternEnum.Solid AndAlso IsColorValid(x.BackColor) Then s.background = New SolidColorBrush(x.BackColor) If IsColorValid(x.ForeColor) Then s.foreground = New SolidColorBrush(x.ForeColor) ' フォント Dim font As XLFont = x.font If font IsNot Nothing Then s.fontfamily = New FontFamily(font.FontName) s.fontsize = PointsToPixels(font.FontSize) If font.bold Then s.fontweight = FontWeights.Bold If font.italic Then s.fontstyle = FontStyles.Italic If font.underline <> XLUnderlineStyle.None Then s.textdecorations = TextDecorations.Underline ' 書 式 If Not String.IsNullOrEmpty(x.Format) Then s.format = XLStyle.FormatXLToDotNet(x.Format) ' 境 界 線 s.cellborderthickness = New Thickness(GetBorderThickness(x.BorderLeft), GetBorderThickness(x.BorderTop), GetBorderThickness(x.BorderRight), GetBorderThickness(x.BorderBottom)) s.cellborderbrushleft = GetBorderBrush(x.BorderColorLeft) s.cellborderbrushtop = GetBorderBrush(x.BorderColorTop) s.cellborderbrushright = GetBorderBrush(x.BorderColorRight) s.cellborderbrushbottom = GetBorderBrush(x.BorderColorBottom) ' キャッシュに 保 存 して 戻 します _cellstyles(x) = s Return s End Function ' グリッドスタイルをExcelスタイルに 変 更 します Private Shared Function GetXLStyle(flex As C1FlexGrid, sheet As XLSheet, s As ExcelCellStyle) As XLStyle ' キャッシュで 検 索 します 125 Copyright GrapeCity inc. All rights reserved.

127 Dim x As XLStyle = Nothing If _excelstyles.trygetvalue(s, x) Then Return x ' 見 つかりません スタイルを 作 成 します x = New XLStyle(sheet.Book) ' 配 置 If s.horizontalalignment.hasvalue Then Select Case s.horizontalalignment.value Case HorizontalAlignment.Left x.alignhorz = XLAlignHorzEnum.Left Exit Select Case HorizontalAlignment.Center x.alignhorz = XLAlignHorzEnum.Center Exit Select Case HorizontalAlignment.Right x.alignhorz = XLAlignHorzEnum.Right Exit Select End Select If s.verticalalignment.hasvalue Then Select Case s.verticalalignment.value Case VerticalAlignment.Top x.alignvert = XLAlignVertEnum.Top Exit Select Case VerticalAlignment.Center x.alignvert = XLAlignVertEnum.Center Exit Select Case VerticalAlignment.Bottom x.alignvert = XLAlignVertEnum.Bottom Exit Select End Select If s.textwrapping.hasvalue Then x.wordwrap = s.textwrapping.value ' カラー If TypeOf s.background Is SolidColorBrush Then x.backcolor = DirectCast(s.Background, SolidColorBrush).Color x.backpattern = XLPatternEnum.Solid If TypeOf s.foreground Is SolidColorBrush Then x.forecolor = DirectCast(s.Foreground, SolidColorBrush).Color ' フォント Dim fontname As String = flex.fontfamily.source Dim fontsize As Double = flex.fontsize Dim bold As Boolean = False Dim italic As Boolean = False Dim underline As Boolean = False Dim hasfont As Boolean = False If s.fontfamily IsNot Nothing Then fontname = s.fontfamily.source hasfont = True If s.fontsize.hasvalue Then fontsize = s.fontsize.value hasfont = True If s.fontweight.hasvalue Then bold = s.fontweight.value = FontWeights.Bold OrElse s.fontweight.value = FontWeights.ExtraBold OrElse s.fontweight.value = FontWeights.SemiBold hasfont = True If s.fontstyle.hasvalue Then italic = s.fontstyle.value = FontStyles.Italic hasfont = True If s.textdecorations IsNot Nothing Then underline = True hasfont = True If hasfont Then fontsize = PixelsToPoints(fontSize) If underline Then Dim color As Color = Colors.Black If TypeOf flex.foreground Is SolidColorBrush Then color = DirectCast(flex.Foreground, SolidColorBrush).Color If TypeOf s.foreground Is SolidColorBrush Then color = DirectCast(s.Foreground, SolidColorBrush).Color x.font = New XLFont(fontName, Convert.ToSingle(fontSize), bold, italic, False, XLFontScript.None, _ XLUnderlineStyle.[Single], color) Else x.font = New XLFont(fontName, Convert.ToSingle(fontSize), bold, italic) ' 書 式 If Not String.IsNullOrEmpty(s.Format) Then x.format = XLStyle.FormatDotNetToXL(s.Format) ' 境 界 線 If s.cellborderthickness.left > 0 AndAlso TypeOf s.cellborderbrushleft Is SolidColorBrush Then x.borderleft = GetBorderLineStyle(s.CellBorderThickness.Left) x.bordercolorleft = DirectCast(s.CellBorderBrushLeft, SolidColorBrush).Color If s.cellborderthickness.top > 0 AndAlso TypeOf s.cellborderbrushtop Is SolidColorBrush Then x.bordertop = GetBorderLineStyle(s.CellBorderThickness.Top) x.bordercolortop = DirectCast(s.CellBorderBrushTop, SolidColorBrush).Color If s.cellborderthickness.right > 0 AndAlso TypeOf s.cellborderbrushright Is SolidColorBrush Then x.borderright = GetBorderLineStyle(s.CellBorderThickness.Right) x.bordercolorright = DirectCast(s.CellBorderBrushRight, SolidColorBrush).Color If s.cellborderthickness.bottom > 0 AndAlso TypeOf s.cellborderbrushbottom Is SolidColorBrush Then x.borderbottom = GetBorderLineStyle(s.CellBorderThickness.Bottom) x.bordercolorbottom = DirectCast(s.CellBorderBrushBottom, SolidColorBrush).Color 126 Copyright GrapeCity inc. All rights reserved.

128 ' キャッシュに 保 存 して 戻 します _excelstyles(s) = x Return x End Function Private Shared Function GetBorderThickness(ls As XLLineStyleEnum) As Double Select Case ls Case XLLineStyleEnum.None Return 0 Case XLLineStyleEnum.Hair Return 0.5 Case XLLineStyleEnum.Thin, XLLineStyleEnum.ThinDashDotDotted, XLLineStyleEnum.ThinDashDotted, XLLineStyleEnum.Dashed, XLLineStyleEnum.Dotted Return 1 Case XLLineStyleEnum.Medium, XLLineStyleEnum.MediumDashDotDotted, XLLineStyleEnum.MediumDashDotted, XLLineStyleEnum.MediumDashed, XLLineStyleEnum.SlantedMediumDashDotted Return 2 Case XLLineStyleEnum.[Double], XLLineStyleEnum.Thick Return 3 End Select Return 0 End Function Private Shared Function GetBorderLineStyle(t As Double) As XLLineStyleEnum If t = 0 Then Return XLLineStyleEnum.None If t < 1 Then Return XLLineStyleEnum.Hair If t < 2 Then Return XLLineStyleEnum.Thin If t < 3 Then Return XLLineStyleEnum.Medium Return XLLineStyleEnum.Thick End Function Private Shared Function GetBorderBrush(color As Color) As Brush Return If(IsColorValid(color), New SolidColorBrush(color), Nothing) End Function Private Shared Function IsColorValid(color As Color) As Boolean Return color.a > 0 ' == 0xff; End Function #End Region End Class ExcelCellStyle.vb Imports C1.WPF.FlexGrid Imports System.ComponentModel Public Class ExcelCellStyle Inherits CellStyle ' ** フィールド Private _format As String Private _bdrthickness As Thickness Private _bdrleft As Brush Private _bdrtop As Brush Private _bdrright As Brush Private _bdrbottom As Brush Private Shared _thicknessempty As New Thickness(0) ' ** オブジェクト モデル Public Property Format() As String Get Return _format End Get Set(value As String) If value <> _format Then _format = value OnPropertyChanged(New PropertyChangedEventArgs("Format")) End Set End Property Public Property CellBorderThickness() As Thickness Get Return _bdrthickness End Get Set(value As Thickness) If value <> _bdrthickness Then _bdrthickness = value OnPropertyChanged(New PropertyChangedEventArgs("BorderThickness")) End Set End Property Public Property CellBorderBrushLeft() As Brush Get Return _bdrleft End Get Set(value As Brush) If Not Object.ReferenceEquals(value, _bdrleft) Then _bdrleft = value OnPropertyChanged(New PropertyChangedEventArgs("BorderColorLeft")) End Set End Property Public Property CellBorderBrushTop() As Brush Get Return _bdrtop End Get Set(value As Brush) If Not Object.ReferenceEquals(value, _bdrtop) Then _bdrtop = value OnPropertyChanged(New PropertyChangedEventArgs("BorderColorTop")) End Set End Property Public Property CellBorderBrushRight() As Brush Get Return _bdrright End Get Set(value As Brush) If Not Object.ReferenceEquals(value, _bdrright) Then _bdrright = value 127 Copyright GrapeCity inc. All rights reserved.

129 OnPropertyChanged(New PropertyChangedEventArgs("BorderColorRight")) End Set End Property Public Property CellBorderBrushBottom() As Brush Get Return _bdrbottom End Get Set(value As Brush) If Not Object.ReferenceEquals(value, _bdrbottom) Then _bdrbottom = value OnPropertyChanged(New PropertyChangedEventArgs("BorderColorBottom")) End Set End Property ' ** オーバーライド Public Overrides Sub Apply(bdr As Border, selstate As SelectedState) MyBase.Apply(bdr, selstate) ApplyBorder(bdr, _bdrleft, New Thickness(_bdrThickness.Left, 0, 0, 0)) ApplyBorder(bdr, _bdrtop, New Thickness(0, _bdrthickness.top, 0, 0)) ApplyBorder(bdr, _bdrright, New Thickness(0, 0, _bdrthickness.right, 0)) ApplyBorder(bdr, _bdrbottom, New Thickness(0, 0, 0, _bdrthickness.bottom)) Private Sub ApplyBorder(bdr As Border, br As Brush, t As Thickness) If br IsNot Nothing AndAlso t <> _thicknessempty Then ' 内 部 の 境 界 線 を 作 成 します Dim inner As Border = New Border() inner.borderthickness = t inner.borderbrush = br ' コンテンツに 拡 張 します Dim content As Border = bdr.child bdr.child = inner inner.child = content ' パディングします inner.padding = bdr.padding bdr.padding = _thicknessempty End Class ExcelRow.vb Imports C1.WPF.FlexGrid Imports System.Globalization Public Class ExcelRow Inherits GroupRow ' ** フィールド Private _cellstyles As Dictionary(Of Column, CellStyle) ' 既 定 の 有 効 桁 数 を6 桁 に 設 定 します Private Const DEFAULT_FORMAT As String = "#,##0.######" ' ** ctor Public Sub New(styleRow As ExcelRow) IsReadOnly = False If stylerow IsNot Nothing AndAlso stylerow.grid IsNot Nothing Then For Each c As Column In stylerow.grid.columns Dim cs As CellStyle = stylerow.getcellstyle(c) If cs IsNot Nothing Then Me.SetCellStyle(c, cs.clone()) Next Public Sub New() Me.New(Nothing) ' ** オブジェクト モデル ''' <summary> ''' データを 取 得 する 場 合 書 式 を 適 用 するためにオーバーライドされる ''' </summary> Public Overrides Function GetDataFormatted(col As Column) As String ' データを 取 得 します Dim data As Object = GetDataRaw(col) ' 書 式 を 適 用 します Dim ifmt As IFormattable = TryCast(data, IFormattable) If ifmt IsNot Nothing Then ' セルの 書 式 を 取 得 します Dim s As ExcelCellStyle = TryCast(GetCellStyle(col), ExcelCellStyle) Dim fmt As String = If(s IsNot Nothing AndAlso (Not String.IsNullOrEmpty(s.Format)), s.format, DEFAULT_FORMAT) data = ifmt.tostring(fmt, CultureInfo.CurrentUICulture) ' 完 了 Return If(data IsNot Nothing, data.tostring(), String.Empty) End Function ' ** オブジェクト モデル ''' <summary> ''' この 行 では セルにスタイルを 適 用 します ''' </summary> Public Sub SetCellStyle(col As Column, style As CellStyle) If Not Object.ReferenceEquals(style, GetCellStyle(col)) Then If _cellstyles Is Nothing Then _cellstyles = New Dictionary(Of Column, CellStyle)() _cellstyles(col) = style If Grid IsNot Nothing Then Grid.Invalidate(New CellRange(Me.Index, col.index)) ''' <summary> ''' この 行 では セルに 適 用 したスタイルを 取 得 します ''' </summary> 128 Copyright GrapeCity inc. All rights reserved.

130 Public Function GetCellStyle(col As Column) As CellStyle Dim s As CellStyle = Nothing If _cellstyles IsNot Nothing Then _cellstyles.trygetvalue(col, s) Return s End Function End Class PDFファイルを 保 存 する C1FlexGrid のデータをPDFファイルにエクスポートする 方 法 として Helperクラス たとえばGridExport を 使 用 してグリッドの 内 容 をPDF 内 に 描 画 する 方 法 があります 具 体 的 には GridExportクラス 内 に SavePdf というメソッドで FlexGrid を PDFストリーム 内 に 直 接 描 画 します この 方 法 は 次 のように 簡 単 に 実 現 できます また ここはヘルパークラス 内 に RenderGrid というメソッドでグリッドを 既 存 の C1PdfDocument 上 に 描 画 する 方 式 も 含 みます RenderGrid は 複 数 グリッドを 文 書 に 追 加 してグラフ テキスト 画 像 と 他 のUI 要 素 も 組 み 合 わせる 場 合 よく 使 いこなします 詳 細 方 法 については 次 に 示 すコードをご 確 認 ください 以 下 に 示 す GridExport のヘルパークラスは 必 要 に 応 じてカスタマイズできますので 活 用 してみてください [ 実 行 例 ] PDF ファイルを 保 存 します サンプルコードは 次 のようになります C# サンプルコード public partial class MainWindow : Window public MainWindow() InitializeComponent(); // グリッドにデータを 挿 入 します _flex1.itemssource = Product.GetProducts(20); private void Button_Click(object sender, RoutedEventArgs e) var dlg = new Microsoft.Win32.SaveFileDialog(); dlg.filter = "PDF files (*.pdf) *.pdf"; //var t = dlg.showdialog(); if (dlg.showdialog().value) // PDF 文 書 を 作 成 します 129 Copyright GrapeCity inc. All rights reserved.

131 var pdf = new C1PdfDocument(); pdf.landscape = true; pdf.compression = CompressionLevel.NoCompression; // グリッドをPDFに 描 画 します var options = new PdfExportOptions(); options.scalemode = ScaleMode.ActualSize; GridExport.RenderGrid(pdf, _flex1, options); pdf.newpage(); // 文 書 を 保 存 します using (var stream = dlg.openfile()) pdf.save(stream); GridExport.cs namespace MultiGridPdf internal static class GridExport // #region ** object model public static void SavePdf(C1FlexGrid flex, Stream s) var options = new PdfExportOptions(); SavePdf(flex, s, options); public static void SavePdf(C1FlexGrid flex, Stream s, PdfExportOptions options) var pdf = new C1PdfDocument(); options.knownpagecount = false; RenderGrid(pdf, flex, options); // PDF 文 書 を 保 存 してストリームを 閉 じます pdf.save(s); s.close(); public static void RenderGrid(C1PdfDocument pdf, C1FlexGrid flex) RenderGrid(pdf, flex, null); public static void RenderGrid(C1PdfDocument pdf, C1FlexGrid flex, PdfExportOptions options) // 描 画 オプションを 取 得 します if (options == null) options = new PdfExportOptions(); // PDFページをレイアウトするためにルート 要 素 を 取 得 します Panel root = null; for (var parent = flex.parent as FrameworkElement; parent!= null; parent = parent.parent as FrameworkElement) if (parent is Panel) root = parent as Panel; // ページサイズを 取 得 します var rc = pdf.pagerectangle; // 描 画 する 間 に 要 素 を 保 持 するためにパネルを 作 成 します var pagetemplate = new PageTemplate(); pagetemplate.width = rc.width; pagetemplate.height = rc.height; pagetemplate.setpagemargin(options.margin); root.children.add(pagetemplate); // PDF 文 書 にグリッドを 描 画 します var m = options.margin; var sz = new Size(rc.Width - m.left - m.right, rc.height - m.top - m.bottom); var pages = flex.getpageimages(options.scalemode, sz, 100); for (int i = 0; i < pages.count; i++) // 必 要 な 場 合 ページをスキップします if (i > 0) pdf.newpage(); // コンテンツを 設 定 します pagetemplate.pagecontent.child = pages[i]; pagetemplate.pagecontent.stretch = options.scalemode == ScaleMode.ActualSize? System.Windows.Media.Stretch.None : System.Windows.Media.Stretch.Uniform; // ヘッダー フッターのテキストを 設 定 します pagetemplate.headerleft.text = options.documenttitle; if (options.knownpagecount) 130 Copyright GrapeCity inc. All rights reserved.

132 pagetemplate.footerright.text = string.format("page 0 of 1", pdf.currentpage + 1, pages.count); else pagetemplate.footerright.text = string.format("page 0", pdf.currentpage + 1); // ページの 要 素 を 測 定 します pagetemplate.updatelayout(); pagetemplate.arrange(new Rect(0, 0, rc.width, rc.height)); // PDFに 追 加 します pdf.drawelement(pagetemplate, rc); // テンプレート 完 了 root.children.remove(pagetemplate); PdfExportOptions.cs namespace MultiGridPdf public class PdfExportOptions public PdfExportOptions() Margin = new Thickness(96); ScaleMode = ScaleMode.PageWidth; DocumentTitle = "ComponentOne FlexGrid"; public Thickness Margin get; set; public ScaleMode ScaleMode get; set; public string DocumentTitle get; set; public bool KnownPageCount get; set; PageTemplate.xaml <!-- ヘッダー --> <Border Grid.Column="1" HorizontalAlignment="Stretch" VerticalAlignment="Bottom" Margin="0 12" BorderBrush="Black" BorderThickness=" " > <Grid> <TextBlock x:name="headerleft" Text="ComponentOne FlexGrid" FontWeight="Bold" FontSize="14" VerticalAlignment="Bottom" HorizontalAlignment="Left" /> <TextBlock x:name="headerright" Text="Printing Demo" FontWeight="Bold" FontSize="14" HorizontalAlignment="Right" Height="18" VerticalAlignment="Bottom" /> </Grid> </Border> <!-- フッター --> <Border Grid.Column="1" Grid.Row="2" HorizontalAlignment="Stretch" VerticalAlignment="Top" Margin="0 12" BorderBrush="Black" BorderThickness=" " > <Grid> <TextBlock x:name="footerleft" Text="Today" VerticalAlignment="Bottom" HorizontalAlignment="Left" /> <TextBlock x:name="footerright" Text="Page 0 of 1" VerticalAlignment="Bottom" HorizontalAlignment="Right" /> </Grid> </Border> <!-- コンテンツ --> <Viewbox Name="PageContent" Grid.Row="1" Grid.Column="1" VerticalAlignment="Top" HorizontalAlignment="Left" /> VB サンプルコード Class MainWindow Inherits Window Public Sub New() InitializeComponent() ' グリッドにデータを 挿 入 します _flex1.itemssource = Product.GetProducts(10) _flex1.collectionview.filter = AddressOf FilterComputers Private Function FilterComputers(item As Object) As Boolean Dim p = TryCast(item, Product) Return p.line = "Computers" End Function Private Function FilterStoves(item As Object) As Boolean Dim p = TryCast(item, Product) Return p.line = "Stoves" End Function Private Function FilterWashers(item As Object) As Boolean Dim p = TryCast(item, Product) 131 Copyright GrapeCity inc. All rights reserved.

133 Return p.line = "Washers" End Function Private Sub Button_Click(sender As Object, e As RoutedEventArgs) Dim dlg = New Microsoft.Win32.SaveFileDialog() dlg.filter = "PDF files (*.pdf) *.pdf" 'var t = dlg.showdialog(); If dlg.showdialog().value Then ' PDF 文 書 を 作 成 します Dim pdf = New C1PdfDocument() pdf.landscape = True pdf.compression = CompressionLevel.NoCompression ' グリッドをPDFに 描 画 します Dim options = New PdfExportOptions() options.scalemode = ScaleMode.ActualSize GridExport.RenderGrid(pdf, _flex1, options) ' 文 書 を 保 存 します Using stream = dlg.openfile() pdf.save(stream) End Using End Class GridExport.vb Public Class GridExport Public Shared Sub SavePdf(flex As C1FlexGrid, s As Stream) Dim options = New PdfExportOptions() SavePdf(flex, s, options) Public Shared Sub SavePdf(flex As C1FlexGrid, s As Stream, options As PdfExportOptions) Dim pdf = New C1PdfDocument() options.knownpagecount = False RenderGrid(pdf, flex, options) ' PDF 文 書 を 保 存 してストリームを 閉 じます pdf.save(s) s.close() Public Shared Sub RenderGrid(pdf As C1PdfDocument, flex As C1FlexGrid) RenderGrid(pdf, flex, Nothing) Public Shared Sub RenderGrid(pdf As C1PdfDocument, flex As C1FlexGrid, options As PdfExportOptions) ' 描 画 オプションを 取 得 します If options Is Nothing Then options = New PdfExportOptions() ' PDFページをレイアウトするためにルート 要 素 を 取 得 します Dim root As Panel = Nothing Dim parent = TryCast(flex.Parent, FrameworkElement) While parent IsNot Nothing If TypeOf parent Is Panel Then root = TryCast(parent, Panel) parent = TryCast(parent.Parent, FrameworkElement) End While ' ページサイズを 取 得 します Dim rc = pdf.pagerectangle ' 描 画 する 間 に 要 素 を 保 持 するためにパネルを 作 成 します Dim pagetemplate = New PageTemplate() pagetemplate.width = rc.width pagetemplate.height = rc.height pagetemplate.setpagemargin(options.margin) root.children.add(pagetemplate) ' PDF 文 書 にグリッドを 描 画 します Dim m = options.margin Dim sz = New Size(rc.Width - m.left - m.right, rc.height - m.top - m.bottom) Dim pages = flex.getpageimages(options.scalemode, sz, 100) For i As Integer = 0 To pages.count - 1 ' 必 要 な 場 合 ページをスキップします If i > 0 Then pdf.newpage() ' コンテンツを 設 定 します pagetemplate.pagecontent.child = pages(i) pagetemplate.pagecontent.stretch = If(options.ScaleMode = ScaleMode.ActualSize, System.Windows.Media.Stretch.None, System.Windows.Media.Stretch.Uniform) ' ヘッダー フッターのテキストを 設 定 します pagetemplate.headerleft.text = options.documenttitle If options.knownpagecount Then pagetemplate.footerright.text = String.Format("Page 0 of 1", pdf.currentpage + 1, pages.count) Else pagetemplate.footerright.text = String.Format("Page 0", pdf.currentpage + 1) ' ページの 要 素 を 測 定 します pagetemplate.updatelayout() pagetemplate.arrange(new Rect(0, 0, rc.width, rc.height)) 132 Copyright GrapeCity inc. All rights reserved.

134 ' PDFに 追 加 します pdf.drawelement(pagetemplate, rc) Next ' テンプレート 完 了 root.children.remove(pagetemplate) End Class PdfExportOptions.vb Public Class PdfExportOptions Public Sub New() Margin = New Thickness(96) ScaleMode = ScaleMode.PageWidth DocumentTitle = "ComponentOne FlexGrid" Public Property Margin() As Thickness Get Return m_margin End Get Set(value As Thickness) m_margin = value End Set End Property Private m_margin As Thickness Public Property ScaleMode() As ScaleMode Get Return m_scalemode End Get Set(value As ScaleMode) m_scalemode = value End Set End Property Private m_scalemode As ScaleMode Public Property DocumentTitle() As String Get Return m_documenttitle End Get Set(value As String) m_documenttitle = value End Set End Property Private m_documenttitle As String Public Property KnownPageCount() As Boolean Get Return m_knownpagecount End Get Set(value As Boolean) m_knownpagecount = value End Set End Property Private m_knownpagecount As Boolean End Class CSVファイルを 保 存 する グリッドの 内 容 をCSV 形 式 ファイルにエクスポートするには C1FlexGrid の Save メソッドを 使 用 します 次 の 例 では グリッドはデータソースと 連 結 されていることを 前 提 として ボタンクリックでグリッドの 内 容 をCSV 形 式 ファイルに エクスポートする 方 法 を 示 します [ 実 行 例 ] 133 Copyright GrapeCity inc. All rights reserved.

135 コードは 次 のようになります VisualBasic ' ボタンクリックでCSVファイルを 保 存 します Private Sub exportbtn_click(sender As Object, e As RoutedEventArgs) Dim dlg = New Microsoft.Win32.SaveFileDialog() dlg.filter = "CSV files (*.csv) *.csv" If dlg.showdialog().value Then _flex.save(dlg.filename, C1.WPF.FlexGrid.FileFormat.Csv) C# //ボタンクリックでCSVファイルを 保 存 します private void exportbtn_click(object sender, RoutedEventArgs e) var dlg = new Microsoft.Win32.SaveFileDialog(); dlg.filter = "CSV files (*.csv) *.csv"; if (dlg.showdialog().value) _flex.save(dlg.filename, C1.WPF.FlexGrid.FileFormat.Csv); 134 Copyright GrapeCity inc. All rights reserved.

136 カスタムセル Microsoft のデータグリッドコントロール(Windows フォーム Silverlight または WPF)を 使 用 したことがあればわかるよう に 大 きなカスタマイズを 実 行 するためには コードを 使 ってカスタム Column オブジェクトを 作 成 し いくつかのメソッドをオー バーライドし カスタム 列 をグリッドに 追 加 する 必 要 があります この 方 法 は 十 分 に 実 用 的 です(ComponentOne Studio に 含 まれる DataGrid for WPF とSilverlight も 主 に Microsoft のグリッドとの 互 換 性 を 保 つために このモデルに 準 拠 していま す) コードでのカスタムセル:CellFactory クラス C1FlexGrid コントロールは 前 述 とは 大 きく 異 なる 方 法 を 使 用 します C1FlexGrid には グリッドに 表 示 されるすべてのセル を 作 成 する CellFactory クラスが 含 まれます カスタムセルを 作 成 するには ICellFactory インターフェイスを 実 装 するクラス を 作 成 し このクラスをグリッドの CellFactory プロパティに 割 り 当 てる 必 要 があります カスタム 列 と 同 様 に カスタム ICellFactory クラスは 極 めて 特 殊 なアプリケーション 固 有 のクラスである 場 合 も 一 般 的 で 再 利 用 可 能 な 構 成 可 能 なクラス である 場 合 も 考 えられます 通 常 カスタム ICellFactory クラスは セルを 直 接 処 理 するため カスタム 列 よりもかなり 簡 単 に なります(カスタム 列 は 列 自 体 のほか その 列 に 含 まれるセルなどの 他 のオブジェクトを 処 理 する 必 要 があります) また こ の 方 法 を 使 用 すると カスタムセルを 列 単 位 で 設 定 するだけでなく セル 単 位 で 設 定 することが 可 能 になります ICellFactory インターフェイスは 極 めて 単 純 です WPF public interface ICellFactory FrameworkElement CreateCell( C1FlexGrid grid, CellType celltype, CellRange range); FrameworkElement CreateCellEditor( C1FlexGrid grid, CellType celltype, CellRange range) void DisposeCell( C1FlexGrid grid, CellType celltype, FrameworkElement cell); 最 初 の CreateCell メソッドは セルを 表 すために 使 用 される FrameworkElement オブジェクトを 作 成 します このパラメータ には セルを 所 有 するグリッド 作 成 するセルの 種 類 および 複 数 のセルで 表 される CellRange が 含 まれます CellType パ ラメータは 作 成 されるセルが 通 常 のデータセル 行 ヘッダまたは 列 ヘッダ グリッドの 左 上 および 右 下 の 固 定 セルのどれなの かを 指 定 します 2つ 目 の CreateCellEditor メソッドは 最 初 のメソッドに 似 ていますが セルを 編 集 モードで 作 成 します 最 後 の DisposeCell メソッドは グリッドからセルが 削 除 された 後 で 呼 び 出 されます これにより 呼 び 出 し 元 は セルオブジェ クトに 関 連 付 けられているすべてのリソースを 破 棄 できます カスタムセルを 使 用 する 際 は グリッドセルが 一 時 的 であることを 理 解 しておく 必 要 があります セルは ユーザーがグリッドの 範 囲 をスクロール ソート 選 択 するたびに 作 成 され 破 棄 されます このプロセスは 仮 想 化 と 呼 ばれ WPF アプリケーショ ンではごく 一 般 的 です 仮 想 化 を 使 用 しないと グリッドは 通 常 数 千 個 ものビジュアル 要 素 を 同 時 に 作 成 しなければならなく なり パフォーマンスが 低 下 します カスタム ICellFactory クラスは C1FlexGrid に 含 まれるデフォルトの CellFactory クラスから 継 承 できるため 比 較 的 簡 単 135 Copyright GrapeCity inc. All rights reserved.

137 に 実 装 することができます デフォルトの CellFactory クラスは 拡 張 可 能 なクラスになるように 設 計 されているため セル 作 成 の 詳 細 処 理 はすべてこのクラスに 任 せて 必 要 な 部 分 のみをカスタマイズすることができます XAML でのカスタムセル:CellTemplate および CellEditingTemplate コードを 記 述 するのではなく XAML によってカスタムセルを 作 成 することもできます C1FlexGrid の Column オブジェクトに は CellTemplate および CellEditingTemplate プロパティが 含 まれます これらのプロパティを 使 用 して 列 内 のセルを 表 示 および 編 集 するためのビジュアル 要 素 を 指 定 できます たとえば 次 の XAML コードは 列 内 の 値 を 表 示 および 編 集 するために 使 用 されるカスタムビジュアル 要 素 を 定 義 します こ の 列 内 のセルは 緑 色 太 字 中 央 揃 えのテキストで 表 示 されます テキストは テキストボックスの 横 にある 編 集 アイコンを 使 って 編 集 します XAML for WPF <c1:c1flexgrid x:name="_fgtemplated"> <c1:c1flexgrid.columns> <!-- テンプレート 列 を 追 加 します --> <c1:column ColumnName="_colTemplated" Header="テンプレート" Width="200"> <!-- 表 示 モードのセルのテンプレート --> <c1:column.celltemplate> <DataTemplate> <TextBlock Text="Binding Name" Foreground="Green" FontWeight="Bold" VerticalAlignment="Center"/> </DataTemplate> </c1:column.celltemplate> <!-- 編 集 モードのセルのテンプレート --> <c1:column.celleditingtemplate> <DataTemplate> <Grid> <Grid.ColumnDefinitions> <ColumnDefinition Width="Auto" /> <ColumnDefinition Width="*" /> </Grid.ColumnDefinitions> <Image Source="edit_icon.png" Grid.Column="0" /> <TextBox Text="Binding Name, Mode=TwoWay" Grid.Column="1" /> </Grid> </DataTemplate> </c1:column.celleditingtemplate> </c1:column> </c1:c1flexgrid.columns> </c1:c1flexgrid> なお この 方 法 は 列 単 位 でカスタムセルを 作 成 します セルごとに 設 定 する 場 合 には 前 述 の CellFactory クラスによるカ スタムセルの 作 成 方 法 を 使 用 します 136 Copyright GrapeCity inc. All rights reserved.

138 印 刷 のサポート 基 本 的 な 印 刷 Print メソッドは C1FlexGrid を 簡 単 に 印 刷 できる 方 法 です Print メソッドを 使 用 すると 印 刷 するドキュメント 名 ページのマージン 拡 大 / 縮 小 および 最 大 ページ 数 を 指 定 できます グ リッドは 忠 実 にレンダリングされ すべてのスタイル 要 素 フォント グラデーション 画 像 などが 出 力 されます 各 ページに 行 ヘッダーと 列 ヘッダーが 表 示 されます 高 度 な 印 刷 印 刷 処 理 をさらに 細 かく 制 御 する 場 合 は GetPageImages メソッドを 使 用 してグリッドを 自 動 的 にいくつかの 画 像 に 分 割 し 各 画 像 を 個 別 のページにレンダリングできます 各 画 像 はグリッドの 一 部 を 100% 正 確 に 表 現 し スタイル カスタム 要 素 各 ページに 繰 り 返 し 表 示 される 行 ヘッダーと 列 ヘッダーなどを 含 みます GetPageImages メソッドを 使 用 して 呼 び 出 し 元 は 画 像 を 拡 大 縮 小 することもできます これにより グリッド 全 体 を 実 際 の サイズでレンダリングしたり 1ページに 収 まるように または1ページの 幅 に 合 わせて 拡 大 縮 小 することができます ページ 画 像 を 取 得 したら WPF の 印 刷 のサポートを 使 用 して それらを 柔 軟 にドキュメントにレンダリングできます たとえば 複 数 のグリッド チャートなどのコンテンツを 含 むドキュメントを 作 成 できます また ヘッダーやフッターをカスタマイズしたり レ ターヘッドを 追 加 することもできます WPF の 印 刷 フレームワークは 異 なっています 以 下 のセクションでは GetPageImages を 使 用 して 印 刷 ドキュメントに C1FlexGrid をレンダリングする 方 法 を 示 します WPF での C1FlexGrid の 印 刷 WPF でドキュメントを 印 刷 する 場 合 は Silverlight の 場 合 と 多 少 異 なる 手 順 を 実 行 する 必 要 があります 1. PrintDialog オブジェクトを 作 成 します 2. ダイアログボックスの ShowDialog メソッドが true を 返 す 場 合 は 次 の 手 順 を 実 行 します 3. ドキュメントのコンテンツを 提 供 する Paginator オブジェクトを 作 成 します 4. ダイアログの PrintDocument メソッドを 呼 び 出 します 次 のコードは このメカニズムのサンプル 実 装 です XAML // 詳 細 な 印 刷 操 作 void _btnadvancedprint_click(object sender, RoutedEventArgs e) var pd = new PrintDialog(); if (pd.showdialog().value) // スケールモードと 余 白 を 取 得 します var margin = _cmbmargins.selectedindex == 0? 96.0 / 4 : _cmbmargins.selectedindex == 1? 96.0 / 2 : 96.0; var scalemode = _cmbzoom.selectedindex == 0? ScaleMode.ActualSize : _cmbzoom.selectedindex == 1? ScaleMode.PageWidth : ScaleMode.SinglePage; // ページサイズを 計 算 します 137 Copyright GrapeCity inc. All rights reserved.

139 var sz = new Size(pd.PrintableAreaWidth, pd.printableareaheight); // ページングを 設 定 します var paginator = new FlexPaginator( _flex, ScaleMode, sz, new Thickness(margin), 100); // ドキュメントを 印 刷 します pd.printdocument(paginator, "C1FlexGrid 印 刷 デモ"); FlexPaginator クラスは ページ 画 像 を 提 供 し 概 念 的 には Silverlight で 使 用 される PrintPage イベントハンドラに 似 ていま す このクラスは 次 のように 実 装 されます XAML /// <summary> /// C1FlexGrid コントロールをレンダリングするために 使 用 される DocumentPaginator クラス /// </summary> public class FlexPaginator : DocumentPaginator Thickness _margin; Size _pagesize; ScaleMode _scalemode; List<FrameworkElement> _pages; public FlexPaginator(C1FlexGrid flex, ScaleMode scalemode, Size pagesize, Thickness margin, int maxpages) // 引 数 を 保 存 します _margin = margin; _scalemode = scalemode; _pagesize = pagesize; // グリッド 画 像 を 作 成 する 前 に ページサイズで 余 白 を 調 整 します pagesize.width -= (margin.left + margin.right); pagesize.height -= (margin.top + margin.bottom); // 各 ページのグリッド 画 像 を 取 得 します _pages = flex.getpageimages(scalemode, pagesize, maxpages); このコンストラクタは ページ 画 像 を 作 成 します これらの 画 像 は 後 で 印 刷 フレームワークがページネータの GetPage メソッ ドを 呼 び 出 すときに ページにレンダリングされます XAML public override DocumentPage GetPage(int pagenumber) // ページ 要 素 を 作 成 します var pagetemplate = new PageTemplate(); // 余 白 を 設 定 します 138 Copyright GrapeCity inc. All rights reserved.

140 pagetemplate.setpagemargin(_margin); // 内 容 を 設 定 します pagetemplate.pagecontent.child = _pages[pagenumber]; pagetemplate.pagecontent.stretch = _scalemode == ScaleMode.ActualSize? System.Windows.Media.Stretch.None : System.Windows.Media.Stretch.Uniform; // フッタテキストを 設 定 します pagetemplate.footerright.text = string.format("ページ 0 / 1", pagenumber + 1, _pages.count); // ページ 要 素 を 整 理 します pagetemplate.arrange( new Rect(0, 0, _pagesize.width, _pagesize.height)); // 新 しいドキュメントを 作 成 します return new DocumentPage(pageTemplate); 前 の 例 と 同 様 に PageTemplate ヘルパークラスを 使 用 して グリッド 画 像 を 保 持 し マージン ヘッダ およびフッタを 提 供 し ます 残 りのページネータメソッドは 細 かい 実 装 を 行 います XAML public override int PageCount get return _pages.count; public override IDocumentPaginatorSource Source get return null; public override Size PageSize get return _pagesize; set throw new NotImplementedException(); public override bool IsPageCountValid get return true; 次 の 図 は グリッドが XPS ファイルにレンダリングされた 場 合 のドキュメントです このサンプルで 使 用 したカスタムの 評 価 セル も 含 めて 正 確 に 示 されています 行 および 列 ヘッダ 単 純 なページヘッダ および 標 準 の "ページ n/m" ページフッタは 自 動 的 にすべてのページに 含 まれます 139 Copyright GrapeCity inc. All rights reserved.

141 140 Copyright GrapeCity inc. All rights reserved.

142 レイアウトおよび 外 観 ComponentOne ClearStyle 技 術 ComponentOne ClearStyle は WPF コントロールのスタイル 設 定 をすばやく 簡 単 に 実 行 できる 新 技 術 です ClearStyle を 使 用 すると 面 倒 な XAML テンプレートやスタイルリソースを 操 作 しなくても コントロールのカスタムスタイルを 作 成 できます 現 在 のところ すべての 標 準 WPF コントロールにテーマを 追 加 するには スタイルリソーステンプレートを 作 成 する 必 要 があり ます Microsoft Visual Studio ではこの 処 理 は 困 難 であるため Microsoft は このタスクを 簡 単 に 実 行 できるように Expression Blend を 導 入 しました ただし Blend に 不 慣 れであったり 十 分 な 学 習 時 間 を 取 れない 開 発 者 にとっては この2 つの 環 境 を 行 き 来 することはかなり 困 難 な 作 業 です デザイナに 作 業 を 任 せることも 考 えられますが デザイナと 開 発 者 が XAML ファイルを 共 有 すると かえって 煩 雑 になる 可 能 性 があります このような 場 合 に ClearStyle を 使 用 します ClearStyle は Visual Studio を 使 用 して 直 感 的 な 方 法 でスタイル 設 定 を 実 行 で きるようにします ほとんどの 場 合 は アプリケーション 内 のコントロールに 対 して 単 純 なスタイル 変 更 を 行 うだけなので この 処 理 は 簡 単 に 行 えるべきです たとえば データグリッドの 行 の 色 を 変 更 するだけであれば 1つのプロパティを 設 定 するだけ で 簡 単 に 行 えるようにする 必 要 があります 一 部 の 色 を 変 更 するためだけに 完 全 で 複 雑 なテンプレートを 作 成 する 必 要 はあ りません ClearStyle の 仕 組 み コントロールのスタイルの 主 な 要 素 は それぞれ 単 純 な 色 プロパティとして 表 されます これが 集 まって コントロール 固 有 のス タイルプロパティセットを 形 成 します たとえば Gauge には PointerFill プロパティや PointerStroke プロパティがあ り DataGrid の 行 には SelectedBrush や MouseOverBrush があります たとえば フォーム 上 に ClearStyle をサポートしていないコントロールがあるとします その 場 合 は ClearStyle によって 作 成 さ れた XAML リソースを 使 用 して フォーム 上 の 他 のコントロールを 調 整 して 合 わせることができます( 正 確 な 色 合 わせなど) ま た スタイルセットの 一 部 を ClearStyle(カスタムスクロールバーなど)で 上 書 きしたいとします ClearStyle は 拡 張 可 能 なので これも 可 能 です 必 要 な 場 所 でスタイルを 上 書 きできます ClearStyle は すばやく 簡 単 にスタイルを 変 更 することを 意 図 したソリューションですが ComponentOne のコントロールには 引 き 続 き 従 来 の 方 法 を 使 用 して 必 要 なスタイルを 細 かく 指 定 して 作 成 できます 完 全 なカスタム 設 計 が 必 要 になる 特 別 な 状 況 で ClearStyle が 邪 魔 になることはありません ClearStyle プロパティ FlexGrid for WPF は コントロールのテンプレートを 変 更 することなくコントロールの 色 を 簡 単 に 変 更 できる ComponentOne の 新 しい ClearStyle 技 術 をサポートします 色 のプロパティをいくつか 設 定 するだけで コントロールのスタイルを 速 く 設 定 で きます 次 の 表 に C1FlexGrid コントロールのブラシのプロパティの 概 要 を 示 します ブラシ 説 明 Background コントロールの 背 景 のブラシを 取 得 または 設 定 します AlternatingRowBackground 奇 数 行 の 背 景 の 描 画 に 使 用 する Brush を 取 得 または 設 定 します BottomRightCellBackground グリッドの 右 下 隅 にあるセルの 背 景 の 描 画 に 使 用 する Brush を 取 得 または 設 定 し ます ColumnHeaderBackground 列 ヘッダーの 背 景 の 描 画 に 使 用 する Brush を 取 得 または 設 定 します ColumnHeaderForeground 列 ヘッダーのコンテンツの 描 画 に 使 用 する Brush を 取 得 または 設 定 します ColumnHeaderSelectedBackground 選 択 されているセルの 列 ヘッダーの 背 景 の 描 画 に 使 用 する Brush を 取 得 または 設 定 します 141 Copyright GrapeCity inc. All rights reserved.

143 CursorBackground カーソルセルの 背 景 の 描 画 に 使 用 する Brush を 取 得 または 設 定 します CursorForeground カーソルセルのコンテンツの 描 画 に 使 用 する Brush を 取 得 または 設 定 します EditorBackground 編 集 モードのセルの 背 景 の 描 画 に 使 用 する Brush を 取 得 または 設 定 します EditorForeground 編 集 モードのセルのコンテンツの 描 画 に 使 用 する Brush を 取 得 または 設 定 します FrozenLinesBrush グリッドの 固 定 領 域 とスクロール 可 能 領 域 の 間 にある 線 の 描 画 に 使 用 する Brush を 取 得 または 設 定 します GridLinesBrush セル 間 にある 線 の 描 画 に 使 用 する Brush を 取 得 または 設 定 します GroupRowBackground グループ 行 の 背 景 の 描 画 に 使 用 する Brush を 取 得 または 設 定 します GroupRowForeground グループ 行 のコンテンツの 描 画 に 使 用 する Brush を 取 得 または 設 定 します HeaderGridLinesBrush 行 ヘッダーセルと 列 ヘッダーセルの 間 にある 線 の 描 画 に 使 用 する Brush を 取 得 ま たは 設 定 します RowBackground 行 の 背 景 の 描 画 に 使 用 する Brush を 取 得 または 設 定 します RowHeaderBackground 行 ヘッダーの 背 景 の 描 画 に 使 用 する Brush を 取 得 または 設 定 します RowHeaderForeground 行 ヘッダーのコンテンツの 描 画 に 使 用 する Brush を 取 得 または 設 定 します RowHeaderSelectedBackground 選 択 されているセルの 行 ヘッダーの 背 景 の 描 画 に 使 用 する Brush を 取 得 または 設 定 します SelectionBackground カーソルセル 以 外 の 選 択 されているセルの 背 景 の 描 画 に 使 用 する Brush を 取 得 ま たは 設 定 します SelectionForeground カーソルセル 以 外 の 選 択 されているセルのコンテンツの 描 画 に 使 用 する Brush を 取 得 または 設 定 します TopLeftCellBackground グリッドの 左 上 隅 にあるセルの 背 景 の 描 画 に 使 用 する Brush を 取 得 または 設 定 し ます いくつかのプロパティを 設 定 することで C1FlexGrid コントロールの 外 観 を 完 全 に 変 更 できます たとえ ば AlternatingRowBackground プロパティを "#FFC3F2F2" に 設 定 すると C1FlexGrid コントロールは 次 のように 展 開 され ない 状 態 になります 142 Copyright GrapeCity inc. All rights reserved.

144 FlexGrid for WPF と Windows フォームの 違 い FlexGrid for WPF と Windows フォームバージョンの 間 には ほとんどのオブジェクトモデルを 含 めて 多 くの 共 通 部 分 があり ますが まったく 同 じではありません コントロールが 対 象 とするプラットフォームが 異 なる Windows フォームと WPF では たとえばマウスとキーボードの 扱 いが 異 なり イメージモデル データ 連 結 依 存 プロパティなども 異 なります したがって 次 のトピックより この 違 いをまとめた 表 を 示 します オブジェクトモデルの 比 較 次 の 表 に FlexGrid for Windows Forms の 主 なプロパティ メソッド およびイベントと FlexGrid for WPF でそれに 対 応 する メンバをまとめます C1FlexGrid のプロパティ Windows フォーム WPF/Silverlight コメント AllowAddNew データソースレベルでサポートされますが FlexGrid for WPF に は それに 対 応 する 専 用 の 組 み 込 み UI はありません AllowDelete データソースレベルでサポートされますが FlexGrid for WPF に は それに 対 応 する 専 用 の 組 み 込 み UI はありません AllowDragging AllowDragging AllowEditing IsReadOnly WPF の 他 のほとんどのコントロールとの 整 合 性 のために 名 前 が 変 更 されています AllowFiltering データソースレベルでサポートされますが FlexGrid for WPF に は それに 対 応 する 専 用 の 組 み 込 み UI はありません AllowFreezing Rows.Frozen プロパティと Columns.Frozen プロパティを 参 照 して ください AllowMerging AllowMerging AllowResizing AllowResizing AllowSorting AllowSorting AutoClipboard ClipboardCopyMode ClipboardPasteMode のプロパティと Copy Pasteのメソッドを 参 照 してください AutoGenerateColumns AutoGenerateColumns AutoResize AutoSizeRows メソッドと AutoSizeColumns メソッドを 参 照 してくだ さい AutoSearch サポートされていません AutoSearchDelay サポートされていません BackColor Background BottomRow ViewRange.BottomRow ClipboardCopyMode ClipboardCopyMode Cols Columns DataSource ItemsSource 143 Copyright GrapeCity inc. All rights reserved.

145 DrawMode CellFactory プロパティを 参 照 してください EditOptions CellFactory プロパティと PrepareCellForEdit イベントを 参 照 してく ださい Enabled IsEnabled ExtendLastCol 最 後 の 列 の 幅 を "*" に 設 定 します アスタリスクによるサイズ 指 定 は 複 数 の 列 の 幅 を 変 更 し 幅 を 相 対 的 に 指 定 できるので はる かに 柔 軟 で 強 力 です FocusRect サポートされていません HighLight サポートされていません KeyActionEnter KeyActionEnter KeyActionTab KeyActionTab LeftColumn ViewRange.LeftColumn NewRowWatermark サポートされていません RightColumn ViewRange.RightColumn Rows Rows Scrollbars HorizontalScrollbarVisibility VerticalScrollbarVisibility ScrollOptions サポートされていません ScrollPosition ScrollPosition SelectionMode SelectionMode ShowButtons サポートされていません ShowCellLabels サポートされていません ShowCursor サポートされていません ShowErrors サポートされていません ShowSort ShowSort Subtotal Column.GroupAggregate データソースの GroupDescriptors コレクションを 使 用 して データ をグループ 化 します GroupAggregate プロパティを 個 別 の 列 に 設 定 して 各 グループの 合 計 または 平 均 などの 集 計 を 表 示 します SubtotalPosition サポートされていません TopRow ViewRange.TopRow Tree サポートされていません C1FlexGrid.Column のプロパティ Windows フォーム WPF/Silverlight コメント AllowDragging AllowDragging AllowEditing IsReadOnly AllowFiltering サポートされていません(フィルタ 処 理 はデータソースレベルで 実 行 できますが FlexGrid for WPF にはそれをサポートする UI がありません) 144 Copyright GrapeCity inc. All rights reserved.

146 AllowMerging AllowMerging AllowResizing AllowResizing AllowSorting AllowSorting Caption Header ComboList ColumnValueConverter オブジェクトを 作 成 し 列 の ValueConverter プロパティに 割 り 当 てます DataMap ColumnValueConverter オブジェクトを 作 成 し 列 の ValueConverter プロパティに 割 り 当 てます DataType DataType EditMask サポートされていません Editor サポートされていません(PrepareCellForEdit イベントは 起 動 中 のセルエディタにア クセスします) Filter サポートされていません(フィルタ 処 理 はデータソースレベルで 実 行 できますが FlexGrid for WPF にはそれをサポートする UI がありません) Format Format ImageMap サポートされていません Index Index IsCollapsed IsCollapsed IsVisible IsVisible Left GetCellRect().Left Name ColumnName Right GetCellRect().Right Selected Selected UserData Tag Visible Visible Width Width Width プロパティは GridLength 型 で 動 的 な 列 幅 に 対 してスターサイズをサポート します(これまでの ExtendLastCol プロパティは 古 い 形 式 になります) メソッド Windows フォーム WPF/Silverlight コメント BeginUpdate() // 更 新 を 実 行 します EndUpdate() using (Rows.DeferNotifications()) // 更 新 を 実 行 し ます FindRow( ) サポートされていません(コードを 使 って 簡 単 に 実 行 できます) FinishEditing(bool cancel)/td> FinishEditing(bool cancel) LoadExcel(string サポートされていません 145 Copyright GrapeCity inc. All rights reserved.

147 file) SaveExcel(string file) サポートされていません Select(int row, int col, bool scrollintoview) ShowCell(int row, int col) Select(int row, int col, bool scrollintoview) ScrollIntoView Sort(order, int col, int col2) StartEditing(row, col) StartEditing(bool fulledit, row, col) サポートされていません(データソースレベルで 実 行 する 必 要 があります) fulledit パラメータは ユーザーが 方 向 キーを 使 用 して 編 集 モードを 終 了 できるかどうかを 決 定 しま す イベント Windows フォーム WPF/Silverlight コメント AfterScroll ScrollPositionChanged AfterSelChange SelectionChanged AfterSort SortedColumn AfterSubtotal サポートされていません BeforeScroll ScrollPositionChanging BeforeSelChange SelectionChanging BeforeSubtotal サポートされていません EnterCell SelectionChanged LeaveCell SelectionChanging RowValidated OnRowEditEnded RowValidating OnRowEditEnding SelChange SelectionChanged SetupEditor PrepareCellForEdit StartEdit BeginningEdit 146 Copyright GrapeCity inc. All rights reserved.

148 ミュージックライブラリサンプル 製 品 に 付 属 の MainTestApplication サンプルにある ミュージックライブラリ は 約 10,000 曲 のライブラリをアーティストと アルバムによってグループ 化 して 表 示 します アルバムとアーティストは 折 りたたみ 可 能 なノード 行 によって 示 されます この アプリケーションは ユーザーがすばやく 簡 単 に 曲 アルバム またはアーティストを 探 すための 検 索 ボックスを 備 えています フィルタを 適 用 すると ステータスインジケータには 選 択 されたアーティスト アルバム および 曲 と 共 に 選 択 内 容 のサイズと 再 生 時 間 の 合 計 が 表 示 されます グリッドの 各 項 目 は アーティスト アルバム または 曲 を 表 し タイトル 再 生 時 間 サイズ およびレーティングが 含 まれま す 0 ~ 5 の 間 の 整 数 で 表 されるレーティングデータは 0~5 個 の 星 を 使 ってグラフィカル 表 示 されます グループ 行 では 展 開 / 折 りたたみのボタンに( 標 準 の 三 角 形 のアイコンの 代 わりに) 従 来 のプラスとマイナスのアイコンが 使 用 されます アー ティストとアルバムについて 表 示 される 再 生 時 間 とサイズは 対 応 するグループ(アルバムまたはアーティスト)のすべての 曲 を 足 し 合 わせることによって 動 的 に 計 算 されます アーティストとアルバムのレーティングは 対 応 するグループ(アルバムまた はアーティスト)の 曲 のレーティングを 平 均 することによって 計 算 されます グリッドの 上 には すべてのグループ 行 を 折 りたたんでアーティストまたはアルバムのみを 表 示 するためのボタンと 展 開 して グリッド 全 体 を 表 示 するためのボタンがあります グリッドの 作 成 次 に C1FlexGrid を 定 義 する XAML を 示 します XAML for WPF <!-- FlexGrid に 曲 を 表 示 します --> <fg:c1flexgrid x:name="_flexmlib" Grid.Row="1" AreRowGroupHeadersFrozen="False" HeadersVisibility="Column" GridLinesVisibility="None" Background="White" RowBackground="White" AlternatingRowBackground="White" GroupRowBackground="White" MinColumnWidth="30" SelectionBackground="#a0eaeff4" CursorBackground="#ffeaeff4" AutoGenerateColumns="False" > <fg:c1flexgrid.columns> 147 Copyright GrapeCity inc. All rights reserved.

149 <fg:column Binding="Binding Name" AllowDragging="False" Width="300" /> <fg:column Binding="Binding Duration" HorizontalAlignment ="Right" /> <fg:column Binding="Binding Size" HorizontalAlignment ="Right" /> <fg:column Binding="Binding Rating" HorizontalAlignment="Center" Width="200" /> </fg:c1flexgrid.columns> </fg:c1flexgrid> XAML でスタイルに 関 するプロパティをいくつか 設 定 します グリッドではいくつかのプロパティが 公 開 されているため カスタ ムセルや XAML テンプレートを 使 用 しなくても 外 観 のかなりの 部 分 をカスタマイズできることを 認 識 してください コードでは AutoGenerateColumns プロパティを False に 設 定 し 列 を 明 示 的 に 定 義 していることにも 注 意 してください こ れにより 列 の 外 観 と 動 作 をさらに 制 御 することができます 最 後 に この XAML コードは AreRowGroupHeadersFrozen プロパティを False に 設 定 します 通 常 の 場 合 グループ 行 は 水 平 方 向 にスクロールしません そのため グループ 情 報 は 常 に 表 示 されています しかし このミュージックライブラリアプリ ケーションでは グループ 行 のすべての 列 に 関 する 情 報 が 表 示 されるので 他 のすべての 行 と 同 様 にこの 行 も 水 平 方 向 にス クロールできるようにする 必 要 があります それには AreRowGroupHeadersFrozen プロパティを False に 設 定 します データの 読 み 込 み グリッドのデータは ICollectionView オブジェクトに 簡 単 に 読 み 込 むことができます コードは 次 のようになります WPF var songs = MediaLibrary.Load(); var view = new MyCollectionView(songs); using (view.deferrefresh()) view.groupdescriptions.clear(); view.groupdescriptions.add(new PropertyGroupDescription("Artist")); view.groupdescriptions.add(new PropertyGroupDescription("Album")); var fg = _flexmlib; fg.cellfactory = new MusicCellFactory(); fg.mergemanager = null; fg.columns["duration"].valueconverter = new SongDurationConverter(); fg.columns["size"].valueconverter = new SongSizeConverter(); fg.itemssource = view; このコードは リソースとして 格 納 されている XML ファイルから 曲 を 読 み 込 む Load ヘルパーメソッドを 使 用 しています 実 際 のアプリケーションでは この 部 分 はサーバーから 曲 目 カタログを 読 み 込 む Web サービスに 置 き 換 えると 考 えられます 次 に Load メソッドの 実 装 を 示 します WPF public static List<Song> Load() var asm = Assembly.GetExecutingAssembly(); 148 Copyright GrapeCity inc. All rights reserved.

150 foreach (var res in asm.getmanifestresourcenames()) if (res.endswith("songs.xml")) using (var stream = asm.getmanifestresourcestream(res)) var xmls = new XmlSerializer(typeof(List<Song>)); return (List<Song>)xmls.Deserialize(stream); throw new Exception(" 組 み 込 まれたリソース songs.xml は 存 在 しません "); Song クラスには 曲 の 再 生 時 間 (ミリ 秒 )とサイズ(バイト)が 格 納 されます これはユーザーへの 表 示 に 適 した 書 式 ではなく また ここでの 目 的 に 適 した 形 式 に 値 を 変 換 できるシンプルな.NET 書 式 文 字 列 はありません 上 のコードで は Column.Format プロパティを 設 定 する 代 わりに Duration 列 と Size 列 に Column.ValueConverter プロパティを 設 定 します Column.ValueConverter プロパティには 未 加 工 データ 値 を 列 に 表 示 する 値 に 変 換 するために 使 用 する IValueConverter オブジェクトを 指 定 します 次 に 曲 の 再 生 時 間 (ミリ 秒 )とサイズ(バイト)のコンバータの 実 装 のサンプルを 示 します WPF // 曲 の 期 間 のコンバーター(ミリ 秒 ) class SongDurationConverter : IValueConverter public object Convert(object value, Type targettype, object parameter, System.Globalization.CultureInfo culture) var ts = TimeSpan.FromMilliseconds((long)value); return ts.hours == 0? string.format("0:00:1:00", ts.minutes, ts.seconds) : string.format("0:00:1:00:2:00", ts.hours, ts.minutes, ts.seconds); public object ConvertBack(object value, Type targettype, object parameter, System.Globalization.CultureInfo culture) throw new NotImplementedException(); // 曲 のサイズのコンバーター(x.xx MB を 返 す) class SongSizeConverter : IValueConverter public object Convert(object value, Type targettype, object parameter, System.Globalization.CultureInfo culture) return string.format("0:n2 MB", (long)value / / ); 149 Copyright GrapeCity inc. All rights reserved.

151 public object ConvertBack(object value, Type targettype, object parameter, System.Globalization.CultureInfo culture) throw new NotImplementedException(); 最 初 の 値 コンバータは 1 時 間 を 超 える 再 生 時 間 に 異 なる 書 式 を 使 用 します 2 番 目 の 値 コンバータは バイトをメガバイトに 変 換 します IValueConverter オブジェクトは 柔 軟 でシンプルなので WPF プログラミングではよく 使 用 されます データ 連 結 に 関 して 実 行 する 必 要 があるのは これですべてです 以 上 で 適 切 な ICollectionView データソース 便 利 な 書 式 を 使 って 曲 名 再 生 時 間 およびサイズを 表 示 する 列 の 準 備 ができました グループ 化 データ 連 結 コードは データソースの GroupDescriptions プロパティに 値 を 挿 入 することにより 既 に 基 本 的 なグループ 化 機 能 をカバーしています これによってグリッドは アルバムとアーティストによって 曲 をグループ 化 し グループに 関 する 基 本 情 報 を 含 む 折 りたたみ 可 能 なグループ 行 を 表 示 することができます ここでは カタログを 自 動 的 に 折 りたたみ/ 展 開 するボタンを 追 加 して アーティストのみ( 完 全 に 折 りたたまれたグループ) アーティストとアルバム( 中 間 状 態 ) またはアーティスト アルバム および 曲 ( 完 全 に 展 開 されたグループ)を 表 示 することに より グループ 化 機 能 をさらに 強 化 します そのために グリッド 上 にアーティスト アルバム および 曲 の3つのボタンを 追 加 しました これらのボタンのイベントハンドラ は 以 下 のように 実 装 されます WPF // グループの 展 開 折 りたたみ void _btnshowartists_click(object sender, RoutedEventArgs e) ShowOutline(0); void _btnshowalbums_click(object sender, RoutedEventArgs e) ShowOutline(1); void _btnshowsongs_click(object sender, RoutedEventArgs e) ShowOutline(int.MaxValue); これによってわかるように すべてのイベントハンドラは 同 じ ShowOutline ヘルパーメソッドを 使 用 します 最 初 のボタンはレ ベルゼロのすべてのグループ 行 (アーティスト)を 折 りたたみ 2つ 目 のボタンはレベルゼロのグループ(アーティスト)を 展 開 し てレベル 1(アルバム)を 折 りたたみます 3つ 目 のボタンはすべてのグループ 行 を 展 開 します 次 に ShowOutline メソッド の 実 装 を 示 します WPF void ShowOutline(int level) 150 Copyright GrapeCity inc. All rights reserved.

152 var rows = _flexmlib.rows; using (rows.defernotifications()) foreach (var gr in rows.oftype<grouprow>()) gr.iscollapsed = gr.level >= level; このメソッドは 簡 単 です まず グリッドの RowCollection クラスを 取 得 し ICollectionView インターフェイスで 使 用 したメカ ニズムと 同 じ DeferNotifications を 実 装 します このメカニズムは Windows フォームアプリケーションでよく 使 用 される BeginUpdate/EndUpdate パターンに 似 ており パフォーマンスの 大 幅 な 向 上 をもたらします 次 に このコードは LINQ OfType 演 算 子 を 使 用 して Rows コレクションからすべての GroupRow オブジェクトを 取 得 しま す これは 通 常 の 行 が 自 動 的 に 除 外 されるので すべてのグループ 行 のレベルをチェックし 各 グループ 行 のレベルに 基 づい てその IsCollapsed 状 態 を 更 新 できます 検 索 とフィルタ 処 理 このサンプルには 数 千 曲 が 含 まれています 曲 はアーティストとアルバムによって 分 類 されていますが スクロールして 特 定 の 曲 を 探 すことは 実 用 的 ではありません このサンプルでは 検 索 機 能 を 実 装 することにより これに 対 処 します 検 索 ボックスに 文 字 列 を 入 力 すると コンテンツが 自 動 的 にフィルタされて 指 定 した 文 字 列 を 含 むタイトルの 曲 アーティスト またはアルバムのみが 表 示 されます ここで は SearchBox コントロールの 外 観 と 動 作 について 簡 単 に 説 明 します このコントロールには 次 の2つのプロパティがあります View:フィルタ 処 理 するデータを 含 む ICollectionView オブジェクト FilterProperties:フィルタが 適 用 されたときに 使 用 するデータ 項 目 のプロパティを 指 定 する PropertyInfo オブジェ クトのリスト ユーザーが SearchBox コントロールに 入 力 すると タイマーが 動 き 始 めます 入 力 が 短 時 間 (800 ミリ 秒 ) 中 断 すると フィル タがデータソースに 適 用 されます すべての 文 字 について 入 力 の 直 後 にフィルタ 処 理 すると 効 率 が 悪 く ユーザーにとっては 煩 わしいので 行 われません この 処 理 に 使 用 されるタイマーのクラスは C1FlexGrid アセンブリで 定 義 されます フィルタを 適 用 するために SearchBox コントロールは View.Filter プロパティに 対 して 各 データ 項 目 をチェックするメソッド を 設 定 し FilterProperties メンバによって 指 定 されたプロパティの 少 なくとも1つに ユーザーが 入 力 した 検 索 文 字 列 が 含 ま れている 項 目 のみを 保 持 します コードは 次 のようになります WPF void _timer_tick(object sender, EventArgs e) _timer.stop(); if (View!= null && _propertyinfo.count > 0) View.Filter = null; 151 Copyright GrapeCity inc. All rights reserved.

153 View.Filter = (object item) => // 検 索 テキストを 取 得 します var srch = _txtsearch.text; // テキストがない 場 合 すべての 項 目 を 表 示 します if (string.isnullorempty(srch)) return true; // 任 意 の 指 定 したプロパティのテキストを 含 む 項 目 を 表 示 します foreach (PropertyInfo pi in _propertyinfo) var value = pi.getvalue(item, null) as string; if (value!= null && value.indexof(srch, StringComparison.OrdinalIgnoreCase) > -1) return true; // この 項 目 を 除 外 します return false; ; このコードで 注 目 する 部 分 は フィルタを 適 用 するブロックです そこでは 通 常 のメソッドの 代 わりにラムダ 関 数 を 使 用 してい ますが 効 果 は 同 じです ラムダ 関 数 は リフレクションを 使 用 することにより 指 定 された 各 プロパティの 値 を 取 得 し 検 索 文 字 列 を 含 むかどうかをチェックします 一 致 が 見 つかると その 項 目 が 表 示 されます 見 つからなければ フィルタで 除 外 され ます SearchBox コントロールをアプリケーションに 接 続 するには View プロパティと FilterProperties プロパティを 設 定 する 必 要 があります このサンプルでは View プロパティを 曲 のデータソースに 設 定 し Artist Album Name の 各 プロパティを FilterProperties コレクションに 追 加 して ユーザーがこれらの 要 素 を 検 索 できるようにします SearchBox をアプリケーショ ンに 接 続 するコードは 次 のとおりです WPF // 検 索 ボックスを 設 定 します _srchtunes.view = view; foreach (string name in "Artist Album Name".Split(' ')) _srchtunes.filterproperties.add(typeof(song).getproperty(name)); カスタムセル これで アプリケーションで 最 も 注 目 する 部 分 を 作 成 する 準 備 ができました 以 下 の 要 素 を 表 示 するためのカスタムセルを 作 成 する ICellFactory オブジェクトを 作 成 します アーティスト アルバム および 曲 の 横 に 表 示 する 画 像 グループの 折 りたたみと 展 開 のためのカスタム 画 像 曲 アルバム およびアーティストのレーティングを 表 示 するためのカスタム 画 像 152 Copyright GrapeCity inc. All rights reserved.

154 これらすべての 作 業 は ICellFactory インターフェイスを 実 装 するカスタム MusicCellFactory クラスによって 実 行 されます カスタムセルファクトリは それをグリッドの CellFactory プロパティに 割 り 当 てるだけで 使 用 できます WPF _flexitunes.cellfactory = new MusicCellFactory() MusicCellFactory クラスはデフォルトの CellFactory クラスから 継 承 され CreateCellContent メソッドをオーバーライドする ことにより 各 セルのコンテンツを 表 示 するために 使 用 する 要 素 を 作 成 します CreateCellContent メソッドは パラメータとして 親 グリッド 基 本 クラスによって 作 成 されてセルの 背 景 と 境 界 を 提 供 する Border 要 素 および 作 成 する 必 要 があるセル( 単 一 のセル またはマージされている 場 合 は 複 数 のセル)を 指 定 する CellRange オブジェクトを 受 け 取 ります CreateCellContent は セルコンテンツのみを 作 成 します 境 界 と 背 景 も 含 めてセル 全 体 を 作 成 する 場 合 は 代 わりに CreateCell メソッドをオーバーライドします この 例 では CreateCellContent メソッドは 通 常 のセルとグループ 行 内 のセルという2つの 主 要 なケースを 処 理 します 通 常 のセルの 処 理 は 簡 単 です メソッドは 作 成 される 列 に 基 づいて 新 しい SongCell 要 素 または RatingCell 要 素 を 返 すだ けです これらは StackPanel から 派 生 するカスタム 要 素 で セルが 表 すデータ 項 目 に 連 結 される 画 像 とテキストを 含 みます グループ 行 のセルは 多 少 複 雑 です このアプリケーションでは グループ 行 はアーティストとアルバムを 表 すために 使 用 され ます これらの 項 目 は ソースコレクションのデータ 項 目 に 対 応 していません ここで 使 用 する CreateCellContent メソッドは フェイクの Song オブジェクトを 作 成 してアーティストとアルバムを 表 します このフェイクの Song オブジェクトには グループ に 含 まれる 曲 に 基 づいて 計 算 されたプロパティが 含 まれます アルバムの Duration は アルバムの 各 曲 の Duration の 合 計 として 計 算 され Rating は アルバムの 各 曲 の Rating の 平 均 として 計 算 されます このフェイクの Song オブジェクトが 作 成 されると SongCell 要 素 と RatingCell 要 素 を 通 常 どおりに 使 用 できます 次 に MusicCellFactory クラスとその CreateCellContent の 実 装 を 多 少 簡 略 化 して 示 します WPF // ミュージックライブラリ セルを 作 成 するために 使 用 されるセルファクトリー public class MusicCellFactory : CellFactory static Thickness _emptythickness = new Thickness(0); public List<RatingCell> _ratings = new List<RatingCell>(); // セルを 範 囲 に 連 結 します public override void CreateCellContent( C1FlexGrid grid, Border bdr, CellRange range) // 行 列 を 取 得 します var row = grid.rows[range.row]; var col = grid.columns[range.column]; var gr = row as GroupRow; // グループ 行 に 罫 線 を 表 示 しません if (gr!= null) bdr.borderthickness = _emptythickness; // ツリーのセルを 連 結 します if (gr!= null && range.column == 0) 153 Copyright GrapeCity inc. All rights reserved.

155 BindGroupRowCell(grid, bdr, range); return; // 標 準 のデータ 行 のセルを 連 結 します var colname = col.columnname; if (colname == "Name") bdr.child = new SongCell(row); return; if (colname == "Rating") var song = row.dataitem as Song; if (song!= null) // このセルを 表 すレートコントロールを 作 成 します // 注 : // - データコンテキストとして 罫 線 要 素 を 使 用 します // - 連 結 するために 列 を 使 用 します var cell = new RatingCell(); cell.setbinding(ratingcell.ratingproperty, col.binding); bdr.child = Cell; return; // デフォルトの 連 結 base.createcellcontent(grid, bdr, range); BindGroupRowCell メソッドは 前 述 のフェイクの Song オブジェクトを 作 成 し それらを 行 の DataItem プロパティに 割 り 当 てて CreateCellContent メソッドで 使 用 できるようにし グループ 行 の 最 初 のセルに 特 別 な 処 理 を 行 います 各 グループ 行 の 最 初 のセルは 他 と 異 なり 通 常 のセルのコンテンツに 加 えてグループの 折 りたたみ/ 展 開 のボタンが 含 まれています 次 に 各 グループ 行 の 最 初 の 項 目 を 処 理 するコードを 示 します WPF // グループ 行 にセルを 連 結 します void BindGroupRowCell(C1FlexGrid grid, Border bdr, CellRange range) // 行 とグループ 行 を 取 得 します var row = grid.rows[range.row]; var gr = row as GroupRow; // グループのキャプション 画 像 を 最 初 列 に 表 示 します if (range.column == 0) // 必 要 であれば カスタムデータアイテムを 作 成 します if (gr.dataitem == null) gr.dataitem = BuildGroupDataItem(gr); // 必 要 なセル 型 を 取 得 します 154 Copyright GrapeCity inc. All rights reserved.

156 Type celltype = gr.level == 0? typeof(artistcell) : typeof(albumcell); // セルを 作 成 します bdr.child = gr.level == 0? (ImageCell)new ArtistCell(row) : (ImageCell)new AlbumCell(row); 最 後 に アーティストとアルバムを 表 す Song オブジェクトを 作 成 するコードを 示 します このメソッドで は GroupRow.GetDataItems メソッドを 使 用 して グループに 含 まれるすべてのデータ 項 目 のリストを 取 得 します 次 に LINQ ステートメントを 使 用 して グループ 内 の 曲 の 合 計 サイズ 再 生 時 間 およびレーティングの 平 均 を 計 算 します WPF // グループを 示 す 曲 を 作 成 します // GetChildDataItems メソッドはこのノードに 付 属 するすべての 曲 を 返 します // 以 下 の LINQ ステートメントは アルバム アーティスト 別 にの 合 計 のサイズ 長 さおよび // 平 均 レートを 計 算 します Song BuildGroupDataItem(GroupRow gr) var gs = gr.getdataitems().oftype<song>(); return new Song() Name = gr.group.name.tostring(), Size = (long)gs.sum(s => s.size), Duration = (long)gs.sum(s => s.duration), Rating = (int)(gs.average(s => s.rating) + 0.5) ; これが 必 要 な 作 業 の 大 部 分 です 残 っている 部 分 は 個 々のセルを 表 すために 使 用 するカスタム 要 素 の 定 義 だけです 次 の 要 素 があります SongCell: 曲 のアイコン および 曲 名 を 表 示 します ArtistCell: 折 りたたみ/ 展 開 のアイコン アーティストのアイコン およびアーティスト 名 を 表 示 します AlbumCell: 折 りたたみ/ 展 開 のアイコン アルバムのアイコン およびアーティスト 名 を 表 示 します RatingCell:レーティング(0~5の 整 数 )をグラフィカル 要 素 として 表 示 します(1つの 星 が1つのレーティングポイントを 表 します) 次 の 図 に グリッドにどのように 要 素 が 表 示 されるかを 示 します 155 Copyright GrapeCity inc. All rights reserved.

157 これらはすべて 通 常 のWPF Framework の 要 素 で Microsoft Blend またはコードで 作 成 できます 次 に RatingCell 要 素 を 実 装 するコードを 示 します 他 の 要 素 も 同 様 で サンプルソースコードを 確 認 すれば 実 装 の 詳 細 がわ かります WPF /// /// 星 付 き 画 像 として 表 示 されるレートを 示 すセル /// public class RatingCell : StackPanel static ImageSource _star; const int MAXRATING = 5; const double OFF = 0.2; const double ON = 1.0; /// /// <see cref="itemssource"/> 依 存 プロパティを 示 します /// public static readonly DependencyProperty RatingProperty = DependencyProperty.Register( "Rating", typeof(int), typeof(ratingcell), new PropertyMetadata(0, OnRatingChanged)); public RatingCell() if (_star == null) _star = ImageCell.GetImageSource("star.png"); Orientation = Orientation.Horizontal; for (int i = 0; i < 5; i++) var img = GetStarImage(); img.opacity = OFF; img.mouseleftbuttondown += img_mouseleftbuttondown; Children.Add(img); 156 Copyright GrapeCity inc. All rights reserved.

158 public int Rating get return (int)getvalue(ratingproperty); set SetValue(RatingProperty, value); void img_mouseleftbuttondown(object sender, MouseButtonEventArgs e) // 星 レーティングのインデックスに 基 づいたレートを 計 算 します Image img = sender as Image; RatingCell cell = img.parent as RatingCell; int index = cell.children.indexof(img); if (index > 0 e.getposition(img).x > img.width / 3) index++; // 新 しいレートを 適 用 します cell.rating = index; Animate(img); static Image GetStarImage() var img = new Image(); img.source = _star; img.width = img.height = 17; img.stretch = Stretch.None; return img; RatingCell 要 素 は 簡 単 です これは いくつかの Image 要 素 を 含 む StackPanel で 構 成 されます Image 要 素 の 数 は 表 示 するレーティング(コンストラクタに 渡 される 値 )によって 定 義 されます 各 Image 要 素 によって1つの 星 アイコンが 表 示 され ます これは レーティングが 変 化 しないことを 前 提 とした 静 的 な 処 理 なので 動 的 な 連 結 は 必 要 ありません 157 Copyright GrapeCity inc. All rights reserved.

159 株 価 情 報 サンプル このセクションでは 株 価 情 報 に 特 化 したサンプルアプリケーションについて 説 明 します 株 価 情 報 アプリケーションは 通 常 大 量 のデータに 依 存 します データは 多 くの 場 合 強 力 な 専 用 サーバーからリアルタイムで 取 得 されます この 種 のアプリケーションは その 特 性 からリアルタイム 情 報 を 処 理 するので 迅 速 な 更 新 (アプリケーションはサーバーから 取 得 されるデータストリームに 追 従 する 必 要 があります) およびクリアで 効 率 的 な 方 法 で 変 化 をユーザーに 伝 達 するメカニズ ムが 必 要 です 変 更 をリアルタイムで 強 調 するために 一 般 的 に 使 用 される 方 法 の1つに 要 素 の 点 滅 があります たとえば 値 が 変 化 したと きにグリッドセルを 別 の 色 で 点 滅 させます 点 滅 は 短 時 間 だけでユーザーの 注 意 を 変 更 に 対 して 向 けさせることができます コンパクトな 形 式 で 迅 速 に 豊 富 な 内 容 の 情 報 を 伝 達 するもう1つのメカニズムとして 最 近 さらに 普 及 しているスパークライン があります スパークラインは 長 い 数 値 の 行 より 明 確 で 効 率 的 に トレンドやサマリー 情 報 を 表 示 するミニチャートです このセクションでは リアルタイムのデータ 更 新 点 滅 セル およびスパークラインを 使 用 する 株 価 情 報 アプリケーションについ て 説 明 します このサンプルアプリケーションでは WPF における C1FlexGrid のパフォーマンスに 焦 点 を 合 わせます 次 の 図 に 動 作 中 の 株 価 情 報 アプリケーションを 示 します 図 では 値 が 絶 えず 変 化 するアプリケーションの 動 的 な 動 作 を 伝 えることはできないので 機 会 があるときにサンプルアプリケーションを 実 行 することをお 勧 めします データの 生 成 この 株 価 情 報 アプリケーションは 常 に 更 新 される 動 的 なデータを 提 供 して 実 際 のサーバーをシミュレートするデータソースを 使 用 します 動 的 な 特 性 を 持 つデータを 取 得 するために このデータソースオブジェクトは FinancialDataList に 対 して 約 4,000 の FinancialData オブジェクト および 指 定 されたスケジュールに 基 づいてオブジェクトを 変 更 するタイマーを 提 供 します 呼 び 出 し 元 は 値 の 更 新 頻 度 および 一 度 に 更 新 する 数 を 指 定 できます FinancialDataList をグリッドに 連 結 し プログラムの 実 行 中 に 更 新 パラメータを 変 更 することにより データ 更 新 に 対 してグ リッドが 対 応 するパフォーマンスをチェックできます データソースの 実 装 の 詳 細 を 確 認 するには サンプルソースの FinancialData.cs ファイルを 参 照 してください グリッドは 株 価 情 報 データソースに 簡 単 に 連 結 できます グリッドを FinancialDataList に 直 接 連 結 する 代 わりに ここでは 仲 介 として 機 能 して 通 常 の 通 貨 ソート グループ 化 フィルタ 処 理 のサービスを 提 供 する ListCollectionView を 作 成 しま す このコードを 次 に 示 します WPF 158 Copyright GrapeCity inc. All rights reserved.

FlexGrid€for€WPF/Silverlight

FlexGrid€for€WPF/Silverlight 2018.04.11 更新 グレープシティ株式会社 目次 製品の概要 5 主な特長 5 機能の比較 6 WPF グリッドの比較 6-8 クイックスタート 9-12 オブジェクトモデルの概要 13 XAML クイックレファレンス 14 グリッドへの挿入 15-16 アンバウンドモード 17-18 基本操作 19 列 19 列のデータ型を設定する 19-20 列の書式を設定する 20-21 列幅を設定する

More information

オプション ボタンまたはチェック ボックスを 持 つリスト ボックス (ListBox) コントロールを 作 成 する 1. プロパティ ウィンドウで ListStyle プロパティを 選 択 します 2. 右 側 の 下 向 き 矢 印 をクリックして 選 択 可 能 なスタイルの 一 覧 を 表

オプション ボタンまたはチェック ボックスを 持 つリスト ボックス (ListBox) コントロールを 作 成 する 1. プロパティ ウィンドウで ListStyle プロパティを 選 択 します 2. 右 側 の 下 向 き 矢 印 をクリックして 選 択 可 能 なスタイルの 一 覧 を 表 テキスト ボックス (TextBox) コントロール 利 用 上 のヒント テキスト ボックス (TextBox ) コントロールは Text MultiLine WordWrap および AutoSize の 4 つのプロ パティにより 制 御 される 柔 軟 性 の 高 いコントロールです Text プロパティには テキスト ボックス (TextBox ) コントロールに 表 示 する 文 字

More information

1

1 Excelファイルアクセス 1. 概 要 Excel ファイルアクセスコンポーネントは Microsoft Excel のファイルを 開 いてセルの 値 や 書 式 を 取 得 変 更 したり テーブル 全 体 を 新 しいファイルと して 保 存 したりするために 用 います Excel ファイルアクセスコンポーネントは アプリケーションビルダーのメニューから 以 下 のように 選 びます [コンポーネント

More information

治 験 実 施 管 理 システム NMGCP 向 け Excel 形 式 プロトコール 作 成 手 順 書 V4.0.3 対 応 版 第 1 版 株 式 会 社 富 士 通 アドバンストエンジニアリング All Rights Reserved,Copyright 株 式 会 社 富 士 通 アドバン

治 験 実 施 管 理 システム NMGCP 向 け Excel 形 式 プロトコール 作 成 手 順 書 V4.0.3 対 応 版 第 1 版 株 式 会 社 富 士 通 アドバンストエンジニアリング All Rights Reserved,Copyright 株 式 会 社 富 士 通 アドバン 2014 年 1 月 7 日 治 験 依 頼 者 各 位 新 潟 市 民 病 院 治 験 管 理 室 Excel 形 式 の 電 子 プロトコール 提 出 の 御 依 頼 当 院 では 効 率 的 で 正 確 な 治 験 の 実 施 のため 電 子 カルテ 内 に 専 用 の Excel 形 式 による 電 子 プロトコールを 導 入 しております つきましては 治 験 依 頼 の 際 に 下 記

More information

2007 Microsoft Corporation. All rights reserved. 本 書 に 記 載 した 情 報 は 本 書 各 項 目 に 関 する 発 行 日 現 在 の Microsoft の 見 解 を 表 明 するものです Microsoft は 絶 えず 変 化 する

2007 Microsoft Corporation. All rights reserved. 本 書 に 記 載 した 情 報 は 本 書 各 項 目 に 関 する 発 行 日 現 在 の Microsoft の 見 解 を 表 明 するものです Microsoft は 絶 えず 変 化 する Microsoft Office Visio 2007 自 習 書 データリンク 2007 Microsoft Corporation. All rights reserved. 本 書 に 記 載 した 情 報 は 本 書 各 項 目 に 関 する 発 行 日 現 在 の Microsoft の 見 解 を 表 明 するものです Microsoft は 絶 えず 変 化 する 市 場 に 対 応

More information

目 次 1.はじめに... 3 2. 書 式 の 説 明... 3 3. 表 紙... 4 4.スケジュール... 5 5. 組 入 れ 基 準... 9 6. 併 用 禁 止 薬... 10 7. 併 用 注 意 薬... 10 8. 同 種 同 効 薬... 10 9. 医 師 モニタリング..

目 次 1.はじめに... 3 2. 書 式 の 説 明... 3 3. 表 紙... 4 4.スケジュール... 5 5. 組 入 れ 基 準... 9 6. 併 用 禁 止 薬... 10 7. 併 用 注 意 薬... 10 8. 同 種 同 効 薬... 10 9. 医 師 モニタリング.. 治 験 実 施 管 理 システム NMGCP 向 け Excel 形 式 プロトコール 作 成 手 順 書 V4.0.4 対 応 版 第 1 版 株 式 会 社 富 士 通 アドバンストエンジニアリング All Rights Reserved,Copyright 株 式 会 社 富 士 通 アドバンストエンジニアリング 2010 目 次 1.はじめに... 3 2. 書 式 の 説 明... 3 3.

More information

Microsoft Word - 第3章.doc

Microsoft Word - 第3章.doc 第 3 章 関 数 この 章 では 日 付 と 時 刻 を 扱 う 関 数 や 検 索 条 件 に 一 致 するデータを 取 り 出 す 関 数 の 使 い 方 また 複 数 の 関 数 を 組 み 合 わせてエラー 値 を 非 表 示 にする 方 法 を 学 習 します STEP 1: 日 付 / 時 刻 関 数 TODAY 関 数 NOW 関 数 TODAY 関 数 は パソコンの 内 蔵 時

More information

KINGSOFT Office 2016 動 作 環 境 対 応 日 本 語 版 版 共 通 利 用 上 記 動 作 以 上 以 上 空 容 量 以 上 他 接 続 環 境 推 奨 必 要 2

KINGSOFT Office 2016 動 作 環 境 対 応 日 本 語 版 版 共 通 利 用 上 記 動 作 以 上 以 上 空 容 量 以 上 他 接 続 環 境 推 奨 必 要 2 目 次 動 作 環 境 特 長 方 法 方 法 起 動 終 了 方 法 方 法 操 作 方 法 使 方 使 方 使 方 詳 細 設 定 使 方 KINGSOFT Office 2016 動 作 環 境 対 応 日 本 語 版 版 共 通 利 用 上 記 動 作 以 上 以 上 空 容 量 以 上 他 接 続 環 境 推 奨 必 要 2 KINGSOFT Office 2016 特 長 主 特 長 以

More information

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション 自 由 HTMLでコンテンツを 追 加 する Copyright Diverta inc. All right reserved. 目 次. 自 由 HTMLとは - 自 由 HTMLとは - 機 能 概 要. 自 由 HTMLでコンテンツを 追 加 する - 自 由 HTMLを 開 く - カテゴリを 追 加 する - 自 由 HTMLでコンテンツを 作 成 する -4 閲 覧 編 集 制 限 を

More information

ez_meishi.ppt

ez_meishi.ppt 名 刺 登 録 名 刺 登 録 ~ 目 次 ~ 1. 名 刺 登 録 とは 3 2. 準 備 2-1.まず 最 初 に 確 認 5 2-2. 新 しいアプリの 作 成 6 2-3.アプリケーションのダウンロードとインストール 8 2-4.サービス 利 用 者 登 録 10 2-5. 所 有 者 管 理 DBの 発 行 設 定 12 3. 登 録 3-1. 名 刺 情 報 を 読 み 取 る 18 3-2.

More information

<4D6963726F736F667420576F7264202D20819C486F70658F6F93588ED297708AC7979D89E696CA837D836A83858341838B8169342E33566572816A2E646F63>

<4D6963726F736F667420576F7264202D20819C486F70658F6F93588ED297708AC7979D89E696CA837D836A83858341838B8169342E33566572816A2E646F63> 商 品 管 理 商 品 管 理 を 行 うためのメニューです 4.1 商 品 管 理 のサイドメニュー 商 品 管 理 には 以 下 のサイドメニューがあります 商 品 一 覧 登 録 済 みの 商 品 の 一 覧 を 表 示 します 既 に 登 録 済 みの 商 品 の 検 索 検 索 した 商 品 を 編 集 する 際 に 使 用 します 新 規 作 成 商 品 を 新 規 登 録 する 画 面

More information

Acrobat早分かりガイド

Acrobat早分かりガイド Adobe PDF を 加 工 編 集 する PDF を 再 利 用 する PDF ファイルの Word 文 書 書 き 出 し [ 名 前 を 付 けて 保 存 ] ダイアログが 開 くので ファイルの 書 き 出 し 先 を 指 定 し [ 保 存 ] ボタンをクリックします Acrobat を 使 用 すると Adobe PDF から Word の フォーマットに 書 き 出 してファイルを

More information

DN6(R04).vin

DN6(R04).vin page 1 / 2 DataNature6(R04)リリースノート 新 機 能 機 能 改 良 (1) 期 間 項 目 への 締 め 日 の 反 映 年 度 上 期 / 下 期 四 半 期 において 設 定 した 締 め 日 を 反 映 させるかどうかの 設 定 を 追 加 (2) 週 の 設 定 方 法 の 追 加 日 付 から 期 間 の 設 定 で 週 を 追 加 する 場 合 に 週 の"

More information

地域ポータルサイト「こむねっと ひろしま」

地域ポータルサイト「こむねっと ひろしま」 5. エディタの 使 い 方 5.1. エディタとは? NetCommons の 全 モジュールで 共 通 する 編 集 画 面 です 5.2. 通 常 のエディタの 使 い 方 (1) (2) (3) (4) (5) (6) (7) (8) (9) (10) (11) (12) (13) (14) (15) (16) (17)(18) (19)(20)(21) (22) (23) (24) (25)

More information

<4D6963726F736F667420576F7264202D20457863656C97F195CF8AB72091808DEC90E096BE8F912091E6312E313294C52E646F63>

<4D6963726F736F667420576F7264202D20457863656C97F195CF8AB72091808DEC90E096BE8F912091E6312E313294C52E646F63> Excel 列 変 換 Ver.1.0.3 操 作 説 明 書 第 1.1 版 Copyright (C) 2008 株 式 会 社 恒 河 沙 変 更 履 歴 版 作 成 日 作 成 者 主 な 変 更 点 第 1.0 版 2008/10/29 ( 株 ) 恒 河 沙 東 野 貴 行 新 規 作 成 第 1.1 版 2008/11/04 ( 株 ) 恒 河 沙 東 野 貴 行 - 2 - 目 次

More information

006-021_責)Wordトレ2-1章_斉

006-021_責)Wordトレ2-1章_斉 . Wordの 起 動 Wordの 基 礎 知 識. Wordの 起 動 Wordの 起 動 は 次 のように 行 います 他 のアプリケーションソフトのように いくつかの 起 動 方 法 があります スタートメニューからの 起 動 スタートメニューから 起 動 する 方 法 は 次 の 通 りです [スタート]メニューの[すべてのプログラム]から[Microsoft-Office]の [Microsoft-Word]を

More information

R4財務対応障害一覧

R4財務対応障害一覧 1 仕 訳 入 力 仕 訳 入 力 時 摘 要 欄 で. + Enter を 押 すと アプリケーションでエラーが 発 生 しまインデックスが 配 列 の 境 界 外 です が 出 る 場 合 がある 問 題 に 対 応 しま 2 仕 訳 入 力 仕 訳 入 力 主 科 目 と 補 助 科 目 を 固 定 にすると2 行 目 以 降 の 補 助 科 目 コピーが 動 作 しない 問 題 に 対 応

More information

医 療 費 自 己 負 担 額 支 払 明 細 書 入 力 シート - 目 次 - < 第 1 章 > 共 通 事 項 説 明 医 療 費 自 己 負 担 額 支 払 明 細 書 入 力 シート 目 次 1.1 本 システムの 注 意 点 1 1.2 入 力 項 目 について 1.2.1 基 本 情

医 療 費 自 己 負 担 額 支 払 明 細 書 入 力 シート - 目 次 - < 第 1 章 > 共 通 事 項 説 明 医 療 費 自 己 負 担 額 支 払 明 細 書 入 力 シート 目 次 1.1 本 システムの 注 意 点 1 1.2 入 力 項 目 について 1.2.1 基 本 情 医 療 費 自 己 負 担 額 支 払 明 細 書 入 力 シート - 目 次 - < 第 1 章 > 共 通 事 項 説 明 医 療 費 自 己 負 担 額 支 払 明 細 書 入 力 シート 目 次 1.1 本 システムの 注 意 点 1 1.2 入 力 項 目 について 1.2.1 基 本 情 報 入 力 項 目 2 1.2.2 子 ども 医 療 費 明 細 入 力 項 目 3 1.2.3 ひとり

More information

(Microsoft PowerPoint -

(Microsoft PowerPoint - 図 面 作 成 は 各 ユーザ 様 の 各 規 定 によって 異 なってきますが その 中 でも 共 通 して 使 用 されると 思 われる 幾 つかの 機 能 作 成 方 法 についてご 紹 介 します オリジナル 図 面 シートの 作 成 について 図 面 シートの 作 成 新 規 のドラフトファイルを 開 き メインメニューの ファイル-シートの 設 定 ダイアログボックスの サイズ タブから

More information

POWER EGG V2.01 ユーザーズマニュアル ファイル管理編

POWER EGG V2.01 ユーザーズマニュアル ファイル管理編 POWER EGG V2.0 ユーザーズマニュアル ファイル 管 理 編 Copyright 2009 D-CIRCLE,INC. All Rights Reserved 2009.4 はじめに 本 書 では POWER EGG 利 用 者 向 けに 以 下 の POWER EGG のファイル 管 理 機 能 に 関 する 操 作 を 説 明 しま す なお 当 マニュアルでは ファイル 管 理 機

More information

計算式の取り扱い

計算式の取り扱い 4.データ 入 力 と 表 計 算 4-1 計 算 式 の 取 り 扱 い 1) 数 式 の 基 本 Excelのような 表 計 算 ソフトでは セルに 入 力 されたデータ( 定 数 )を 計 算 式 ( 数 式 )によって 計 算 することで さまざまな 処 理 が 行 えます 数 式 バーには 数 式 の 内 容 が 表 示 されます セルには 計 算 結 果 が 表 示 されます 数 式 の

More information

平成21年1月21日 1

平成21年1月21日 1 eコミマップ 表 画 面 操 作 マニュアル Ver. 2.4.1 2015/06/30 国 立 研 究 開 発 法 人 防 災 科 学 技 術 研 究 所 目 次 1 はじめに... 3 2 システムの 説 明... 3 3 操 作 マニュアル... 4 3.1 E コミマップ 一 覧 画 面... 4 1 ログイン 画 面... 4 2 項 目 一 覧 タブ... 5 3 項 目 一 覧 タブ(ログインしていない

More information

Microsoft PowerPoint - webサイト更新マニュアル20150306.ppt [互換モード]

Microsoft PowerPoint - webサイト更新マニュアル20150306.ppt [互換モード] 目 次 目 次 2 全 体 概 要 3 管 理 画 面 へのログイン 4 ページの 種 類 5 新 規 投 稿 の 流 れ 7 記 事 を 投 稿 する( 各 要 素 のパターン) 8 記 事 を 投 稿 する( 要 素 の 順 番 入 れ 替 え 削 除 の 方 法 ) 10 画 像 追 加 11 投 稿 の 編 集 14 サイドエリアの 編 集 16 投 稿 の 削 除 17 新 規 カテゴリの

More information

GRIDY SFA カスタム 項 目 操 作 ガイド 用 本 書 はに 必 要 な 操 作 を 解 説 しております は GRIDY SFA ののことです GRIDY SFA へ 申 し 込 み 最 初 に 登 録 を 行 った 方 がそのままとなります カスタム 項 目 はの 方 のみ 操 作 可

GRIDY SFA カスタム 項 目 操 作 ガイド 用 本 書 はに 必 要 な 操 作 を 解 説 しております は GRIDY SFA ののことです GRIDY SFA へ 申 し 込 み 最 初 に 登 録 を 行 った 方 がそのままとなります カスタム 項 目 はの 方 のみ 操 作 可 GRIDY SFA カスタム 項 目 操 作 ガイド 2016 年 1 月 20 日 ナレッジスイート 株 式 会 社 1 GRIDY SFA カスタム 項 目 操 作 ガイド 用 本 書 はに 必 要 な 操 作 を 解 説 しております は GRIDY SFA ののことです GRIDY SFA へ 申 し 込 み 最 初 に 登 録 を 行 った 方 がそのままとなります カスタム 項 目 はの

More information

1.2. ご 利 用 環 境 1.2.1. 推 奨 ブラウザ Internet Explorer 10 11 Google Chrome(バージョン 32 時 点 で 動 作 確 認 済 み) Mozilla Firefox(バージョン 26 時 点 で 動 作 確 認 済 み) Safari 7

1.2. ご 利 用 環 境 1.2.1. 推 奨 ブラウザ Internet Explorer 10 11 Google Chrome(バージョン 32 時 点 で 動 作 確 認 済 み) Mozilla Firefox(バージョン 26 時 点 で 動 作 確 認 済 み) Safari 7 1. アーカイブデータベースを 検 索 / 閲 覧 する 1.1. データの 検 索 方 法 東 京 アーカイブ では 以 下 に 分 類 されるカテゴリの 画 像 データ 資 料 データを 閲 覧 できます 江 戸 城 浮 世 絵 双 六 和 漢 書 江 戸 東 京 の 災 害 記 録 絵 葉 書 写 真 帖 近 代 の 地 図 東 京 府 東 京 市 関 係 資 料 番 付 建 築 図 面 書

More information

目 次 1. Web メールのご 利 用 について... 2 2. Web メール 画 面 のフロー 図... 3 3. Web メールへのアクセス... 4 4. ログイン 画 面... 5 5. ログイン 後 (メール 一 覧 画 面 )... 6 6. 画 面 共 通 項 目... 7 7.

目 次 1. Web メールのご 利 用 について... 2 2. Web メール 画 面 のフロー 図... 3 3. Web メールへのアクセス... 4 4. ログイン 画 面... 5 5. ログイン 後 (メール 一 覧 画 面 )... 6 6. 画 面 共 通 項 目... 7 7. Web メール 操 作 説 明 書 京 都 与 謝 野 町 有 線 テレビ 0 目 次 1. Web メールのご 利 用 について... 2 2. Web メール 画 面 のフロー 図... 3 3. Web メールへのアクセス... 4 4. ログイン 画 面... 5 5. ログイン 後 (メール 一 覧 画 面 )... 6 6. 画 面 共 通 項 目... 7 7. メール 一 覧 画 面...

More information

01_07_01 データのインポート_エクスポート_1

01_07_01 データのインポート_エクスポート_1 データのインポート/エクスポートについて 概 要 スタッフエクスプレスでは 他 のソフトウェアで 作 成 されたスタッフデータ 得 意 先 データなどを 取 り 込 む(インポートする)ことができます また スタッフエクスプレスに 登 録 済 みのデータを Excel 形 式 CSV 形 式 で 出 力 (エクスポート)す ることができます 注 意 インポートできるデータは 次 の 条 件 を 満

More information

目 次 1.ログイン 方 法 P2 2.ログアウト 方 法 P3 3. 基 本 設 定 変 更 サイトネーム スローガンの 設 定 P10~11 カラーバリエーションの 選 択 P12 メニュースタイル 色 の 設 定 P12 4.トップページの 画 像 編 集 画 像 の 変 更 P13~14 T

目 次 1.ログイン 方 法 P2 2.ログアウト 方 法 P3 3. 基 本 設 定 変 更 サイトネーム スローガンの 設 定 P10~11 カラーバリエーションの 選 択 P12 メニュースタイル 色 の 設 定 P12 4.トップページの 画 像 編 集 画 像 の 変 更 P13~14 T ホームページングサービス G o o d P a g e E a s y GoodPageASPシリーズ 操 作 マニュアル 基 本 操 作 編 (EASY+のメニュー 操 作 については メニュー 操 作 編 をご 覧 下 さい) ASPシリーズ(SUPERLITE EASY EASY+)の 基 本 操 作 手 順 は 共 通 ですが マニュアルではGoodPageEASYの 画 面 で 説 明

More information

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション 1 山 都 町 移 住 定 住 サイト マイホームページ 操 作 説 明 書 平 成 26 年 3 月 10 日 2 会 員 登 録 からホームページ 公 開 まで 会 員 仮 登 録 本 登 録 申 請 ログイン センター 承 認 ホームページ 公 開 センター 承 認 公 開 申 請 ホームページ 作 成 ホームページ 作 成 の4つのステップ 1 ホームページの 設 定 (p4) 2 レイアウト

More information

TIPS - 棚 割 りを 開 始 するまで Liteを 起 動 し 企 業 情 報 の 追 加 を 行 い 棚 割 を 行 う 企 業 の 追 加 をして 下 さい 企 業 情 報 の 追 加 時 に エラーメッセージが 表 示 された 場 合 別 途 TIPS トラブルが 発 生 した 場 合

TIPS - 棚 割 りを 開 始 するまで Liteを 起 動 し 企 業 情 報 の 追 加 を 行 い 棚 割 を 行 う 企 業 の 追 加 をして 下 さい 企 業 情 報 の 追 加 時 に エラーメッセージが 表 示 された 場 合 別 途 TIPS トラブルが 発 生 した 場 合 TIPS 目 次 TIPS 項 目 棚 割 りを 開 始 するまで 商 品 画 像 の 追 加 方 法 商 品 情 報 の 一 括 更 新 登 録 方 法 棚 割 情 報 の 連 携 方 法 小 売 様 棚 割 ソフトとの 棚 割 情 報 連 携 について 他 棚 割 ソフトとの 棚 割 情 報 連 携 について 棚 割 情 報 のExcel 取 込 について 棚 板 設 定 の 詳 細 商 品 設

More information

検 索 文 字 列 が 住 所 にマッチするならば 地 図 画 面 を 表 示 します 検 索 文 字 列 が 住 所 の 一 部 ならば キーワードを 含 む 検 索 結 果 画 面 を 表 示 します

検 索 文 字 列 が 住 所 にマッチするならば 地 図 画 面 を 表 示 します 検 索 文 字 列 が 住 所 の 一 部 ならば キーワードを 含 む 検 索 結 果 画 面 を 表 示 します 名 古 屋 市 都 市 計 画 情 報 提 供 システム 操 作 方 法 検 索 方 法 キーワードから 探 す 住 所 または 住 所 の 一 部 から 地 図 を 検 索 する 事 が 出 来 ます [ 名 古 屋 市 ] 以 降 の 住 所 施 設 名 またはその 一 部 を 入 力 し 検 索 をクリックします 検 索 文 字 列 が 住 所 にマッチするならば 地 図 画 面 を 表 示

More information

Excel basics

Excel basics Excel 入 門 Excel は 表 計 算 およびデータ 分 析 のための 効 果 的 なアプリケーションです 最 も 効 果 的 に 使 用 するためには 最 初 にその 基 礎 を 理 解 する 必 要 があります このチュートリ アルでは すべてのブックで 使 用 する 作 業 と 機 能 をいくつか 紹 介 します 開 始 する 前 に... 1 1. 新 しい 空 白 のブックを 作

More information

目 次 1. 論 理 関 数 IF... 1 2. IF の 概 要... 1 3. 論 理 式 の 種 類... 2 3.1.1. 等 号... 2 3.1.2. 不 等 号... 2 4. 具 体 的 な 使 い 方... 2 5. ネスト... 3 6. 複 数 の 条 件 を 記 述...

目 次 1. 論 理 関 数 IF... 1 2. IF の 概 要... 1 3. 論 理 式 の 種 類... 2 3.1.1. 等 号... 2 3.1.2. 不 等 号... 2 4. 具 体 的 な 使 い 方... 2 5. ネスト... 3 6. 複 数 の 条 件 を 記 述... 平 成 26 年 12 月 6 日 跡 見 学 園 女 子 大 学 公 開 講 座 パソコンセミナー Excel 入 門 第 1 回 応 用 編 文 学 部 現 代 文 化 表 現 学 科 准 教 授 伊 藤 穣 j-ito@atomi.ac.jp http://www2.mmc.atomi.ac.jp/~j-ito/ 目 次 1. 論 理 関 数 IF... 1 2. IF の 概 要... 1

More information

研究者情報データベース

研究者情報データベース 研 究 者 情 報 管 理 システム 研 究 者 向 けデータ 一 括 登 録 機 能 操 作 マニュアル 2013 年 6 月 4 日 目 次 1. はじめに... 1 1.1 本 マニュアルの 注 意 事 項... 1 2. 操 作 手 順... 2 2.1 データ 登 録 手 順... 2 2.2 データ 読 み 込 みエラー 時 の 対 応 手 順... 13 3. 登 録 データ 一 覧...

More information

目 次 1. 積 算 内 訳 書 に 関 する 留 意 事 項 1 ページ 2. 積 算 内 訳 書 のダウンロード 3 ページ 3. 積 算 内 訳 書 の 作 成 (Excel 2003の 場 合 ) 6 ページ 4. 積 算 内 訳 書 の 作 成 (Excel 2007の 場 合 ) 13

目 次 1. 積 算 内 訳 書 に 関 する 留 意 事 項 1 ページ 2. 積 算 内 訳 書 のダウンロード 3 ページ 3. 積 算 内 訳 書 の 作 成 (Excel 2003の 場 合 ) 6 ページ 4. 積 算 内 訳 書 の 作 成 (Excel 2007の 場 合 ) 13 積 算 内 訳 書 の 作 成 マニュアル 平 成 26 年 1 形 県 県 整 備 部 建 設 企 画 課 目 次 1. 積 算 内 訳 書 に 関 する 留 意 事 項 1 ページ 2. 積 算 内 訳 書 のダウンロード 3 ページ 3. 積 算 内 訳 書 の 作 成 (Excel 2003の 場 合 ) 6 ページ 4. 積 算 内 訳 書 の 作 成 (Excel 2007の 場 合 )

More information

す 選 択 範 囲 を 移 動 する エクセルでは 選 択 したセル 範 囲 の 境 界 をドラッグして 移 動 するのに 対 して Calc では 選 択 範 囲 そのものをドラッグして 移 動 できます そのため マウスポインタの 位 置 合 わせが 少 し 簡 単 になっ ています ただし 1

す 選 択 範 囲 を 移 動 する エクセルでは 選 択 したセル 範 囲 の 境 界 をドラッグして 移 動 するのに 対 して Calc では 選 択 範 囲 そのものをドラッグして 移 動 できます そのため マウスポインタの 位 置 合 わせが 少 し 簡 単 になっ ています ただし 1 OpenOffice.org の 表 計 算 機 能 表 計 算 ツールの 基 本 操 作 OpenOffice.org の 表 計 算 ツール Calc(カルク)の 基 本 操 作 を 紹 介 します ここでは 請 求 書 の 作 り 方 を 通 して 基 本 操 作 を 学 びます サンプルファイル :calc calc_basic_01.odt 完 成 版 ファイル :calc calc_basic.odt

More information

ノートをクラウドで 管 理 する [ 共 有 ] タブについて OneNote を 初 めて 起 動 すると クラウドに 接 続 するように 求 められ そのクラウドに 最 初 のノートブックが 作 成 されます OneNote では Microsoft アカウント (MSN Hotmail Mes

ノートをクラウドで 管 理 する [ 共 有 ] タブについて OneNote を 初 めて 起 動 すると クラウドに 接 続 するように 求 められ そのクラウドに 最 初 のノートブックが 作 成 されます OneNote では Microsoft アカウント (MSN Hotmail Mes クイック スタート ガイド Microsoft OneNote 2013 は レイアウトがこれまでのバージョンから 変 わりました このガイドは 少 しでも 早 く 慣 れることができるようにそれらの 違 いをまとめたものです タッチとマウスを 切 り 替 える タッチ デバイスで OneNote を 使 う 場 合 クイック アクセス ツール バーにこのスイッチを 追 加 できます リボンの 表

More information

<4D6963726F736F667420576F7264202D20457863656C82CC8AEE91625F87542D825181408F9182AB8AB782A68CE32E646F63>

<4D6963726F736F667420576F7264202D20457863656C82CC8AEE91625F87542D825181408F9182AB8AB782A68CE32E646F63> EXCEL 0 データベース 機 能 について データベースとは 関 連 する 個 々のデータをまとめたものです 例 えば 学 生 名 簿 学 生 の 成 績 簿 教 員 と 担 当 教 科 成 績 表 など あるいは 商 品 台 帳 社 員 名 簿 顧 客 台 帳 などが データベースになります これらデータベースは 管 理 され また 運 用 できなければなりま せん Excel では データベースをリストで

More information

(Microsoft PowerPoint - Ver12\203o\201[\203W\203\207\203\223\203A\203b\203v\216\221\227\277.ppt)

(Microsoft PowerPoint - Ver12\203o\201[\203W\203\207\203\223\203A\203b\203v\216\221\227\277.ppt) ACAD-DENKI DENKI Ver.12 新 機 能 / 改 善 機 能 アルファテック 株 式 会 社 1 新 機 能 改 善 機 能 一 覧 ACAD-DENKI/EL Ver.12 新 機 能 と 改 善 機 能 新 メニュー/ 新 機 能 拡 張 プロジェクト 管 理 外 部 端 子 コネクタ 端 子 ネット 分 割 化 リアルタイム 線 番 挿 入 改 善 項 目 図 題 情 報 編

More information

2016 年 度 情 報 リテラシー 変 更 された 状 態 同 様 に 価 格 のセルを 書 式 設 定 する 場 合 は 金 額 のセルをすべて 選 択 し [ 書 式 ]のプルダウンメニューか ら[ 会 計 ]を 選 択 する すると が 追 加 され 金 額 としての 書 式 が 設 定 さ

2016 年 度 情 報 リテラシー 変 更 された 状 態 同 様 に 価 格 のセルを 書 式 設 定 する 場 合 は 金 額 のセルをすべて 選 択 し [ 書 式 ]のプルダウンメニューか ら[ 会 計 ]を 選 択 する すると が 追 加 され 金 額 としての 書 式 が 設 定 さ ( 第 11 回 )2016/06/27 表 計 算 を 利 用 した 集 計 作 業 この 回 では Excel を 用 いた 集 計 作 業 を 行 う 集 計 は 企 業 などで 事 実 を 記 録 したデータを 目 的 に 従 って 整 理 する 作 業 である Excel では 集 計 に 特 化 した 機 能 として テーブル ピポットテーブル という 機 能 がある 1. 課 題 の

More information

やさしく名刺ファイリング v.3.0 操作マニュアル

やさしく名刺ファイリング v.3.0 操作マニュアル 操 作 マニュアル やさしく 名 刺 ファイリング 基 本 操 作 目 次 1. はじめに 2. やさしく 名 刺 ファイリングの 起 動 2-1.データベースの 作 成 2-2.スキャナの 設 定 3. 名 刺 の 読 み 込 み 3-1. 専 用 スキャナでの 読 み 込 み 3-2. 市 販 スキャナでの 読 み 込 み 4. 名 刺 の 認 識 修 正 登 録 4-1. 名 刺 の 認 識

More information

企業のおけるWebガバナンスの構築

企業のおけるWebガバナンスの構築 0 記 事 編 集 マニュアル:index リンクをクリックすると 該 当 のページへ 遷 移 します 1. 記 事 編 集 (wysywigエディタ)について 1-1はじめに 1-2 記 事 編 集 (wysywigエディタの 利 用 上 の 注 意 ) 必 ずお 読 みください 1-3 テンプレート 挿 入 から 編 集 まで 流 れ 2. テンプレートについて 2-1 テンプレートの 種 類

More information

1. アクセスする 2. 簡 易 検 索 画 面 (fig. 1) アクセスすると 最 初 に 出 る 画 面 です 検 索 語 入 力 ボックスにキーワードを 入 力 して 論 文 検 索 ボタンをクリックし ます 3. ボックス 下 部 のチェック 項

1. アクセスする  2. 簡 易 検 索 画 面 (fig. 1) アクセスすると 最 初 に 出 る 画 面 です 検 索 語 入 力 ボックスにキーワードを 入 力 して 論 文 検 索 ボタンをクリックし ます 3. ボックス 下 部 のチェック 項 CiNii Articles を 使 う 2013 芳 野 明 / 京 都 嵯 峨 芸 術 大 学 西 洋 美 術 史 博 物 館 学 研 究 室 1. アクセスする http://ci.nii.ac.jp/ 2. 簡 易 検 索 画 面 (fig. 1) アクセスすると 最 初 に 出 る 画 面 です 検 索 語 入 力 ボックスにキーワードを 入 力 して 論 文 検 索 ボタンをクリックし

More information

Microsoft Word - FrontMatter.doc

Microsoft Word - FrontMatter.doc SAS 認 定 プロフェッショナルのための Base Programming for SAS 9 完 全 ガイド ii このマニュアルの 正 確 な 書 誌 情 報 は 以 下 のとおりです SAS 認 定 プロフェッショナルのための Base Programming for SAS 9 完 全 ガイド Copyright 2009, SAS Institute Inc., Cary, NC, USA

More information

目 次 1. 大 学 情 報 データベースシステムの 使 用 方 法 について... 1 1.1.EXCEL 一 括 登 録... 1 1.2.EXCEL ダウンロード... 2 1.2.1. 検 索 条 件 の 指 定 プレビュー... 3 1.2.2.EXCEL ダウンロード(データ 抽 出 あ

目 次 1. 大 学 情 報 データベースシステムの 使 用 方 法 について... 1 1.1.EXCEL 一 括 登 録... 1 1.2.EXCEL ダウンロード... 2 1.2.1. 検 索 条 件 の 指 定 プレビュー... 3 1.2.2.EXCEL ダウンロード(データ 抽 出 あ 大 学 情 報 データベースシステム EXCEL 一 括 登 録 マニュアル 目 次 1. 大 学 情 報 データベースシステムの 使 用 方 法 について... 1 1.1.EXCEL 一 括 登 録... 1 1.2.EXCEL ダウンロード... 2 1.2.1. 検 索 条 件 の 指 定 プレビュー... 3 1.2.2.EXCEL ダウンロード(データ 抽 出 あり)... 5 1.2.3.EXCEL

More information

2016 年 度 情 報 リテラシー 次 に Excel のメニューから[ 挿 入 ]タブをクリックし 表 示 されたメニュー 内 の[グラフ]にある[ 折 れ 線 グラフ]のボタンをクリックする するとサブメニューが 表 示 されるので 左 上 の[ 折 れ 線 ]を 選 択 する [ 挿 入 ]

2016 年 度 情 報 リテラシー 次 に Excel のメニューから[ 挿 入 ]タブをクリックし 表 示 されたメニュー 内 の[グラフ]にある[ 折 れ 線 グラフ]のボタンをクリックする するとサブメニューが 表 示 されるので 左 上 の[ 折 れ 線 ]を 選 択 する [ 挿 入 ] ( 第 10 回 )2016/06/20 Excel によるグラフ 作 成 この 回 では Excel を 用 いたグラフ 作 成 の 演 習 を 行 う 新 聞 記 事 等 で 利 用 されているような 一 般 的 なグラ フを 題 材 にし Excel に 備 わっているグラフ 作 成 機 能 を 知 る 1. 課 題 の 確 認 いくつかのグラフの 例 を 参 考 に Excel の 機 能

More information

返還同意書作成支援 操作説明書

返還同意書作成支援 操作説明書 返 還 金 同 意 書 等 作 成 支 援 操 作 説 明 書 当 EXCELを 使 用 することにより 以 下 のものを 作 成 できます 返 還 同 意 書 保 険 者 別 返 還 金 額 一 覧 表 返 還 内 訳 表 返 還 集 計 表 1 返 還 金 同 意 書 等 作 成 支 援 (EXCEL 形 式 )を 開 きます 2 タイトル 画 面 が 数 秒 間 表 示 されますので 注 意

More information

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション 問 い 合 せフォームを 作 成 する Copyright Diverta inc. All right reserved. 1 目 次 1. 管 理 画 面 の 説 明 1-1 問 い 合 わせモジュールとは 1-2 機 能 概 要 1-3 基 本 設 定 1-3-1 基 本 設 定 - 管 理 画 面 のアクセス 制 限 - 1-3-2 基 本 設 定 -メール 設 定 - 2. 問 い 合 わせフォームを

More information

目 次 JAVIS Appli の 基 本 機 能... 3 JAVIS Appli について... 3 音 声 確 認 機 能 JAVIS Appli( 有 償 版 )の 機 能... 4 音 声 で 読 みの 確 認 をする... 4 辞 書 機 能... 5 単 語 を 登 録 する... 5

目 次 JAVIS Appli の 基 本 機 能... 3 JAVIS Appli について... 3 音 声 確 認 機 能 JAVIS Appli( 有 償 版 )の 機 能... 4 音 声 で 読 みの 確 認 をする... 4 辞 書 機 能... 5 単 語 を 登 録 する... 5 アドイン 版 ********************************************* 操 作 説 明 書 ********************************************* 目 次 JAVIS Appli の 基 本 機 能... 3 JAVIS Appli について... 3 音 声 確 認 機 能 JAVIS Appli( 有 償 版 )の 機 能...

More information

1. 概 要 Webで 申 込 みした 手 続 きの 内 容 とNEXIでの 手 続 状 況 を Web 申 込 状 況 一 覧 で 確 認 することができます また 各 種 手 続 きにおいて 申 込 みを 完 了 せずに 保 存 状 態 にした 手 続 きを この 一 覧 から 再 開 すること

1. 概 要 Webで 申 込 みした 手 続 きの 内 容 とNEXIでの 手 続 状 況 を Web 申 込 状 況 一 覧 で 確 認 することができます また 各 種 手 続 きにおいて 申 込 みを 完 了 せずに 保 存 状 態 にした 手 続 きを この 一 覧 から 再 開 すること 日 本 貿 易 保 険 Webサービス 操 作 マニュアル 4. Web 申 込 状 況 一 覧 照 会 (C) Copyright Nippon Export and Investment Insurance. All rights reserved. 1. 概 要 Webで 申 込 みした 手 続 きの 内 容 とNEXIでの 手 続 状 況 を Web 申 込 状 況 一 覧 で 確 認 することができます

More information

Word 003 スキルブック 06 - オブジェクトの 利 用 0.Word で 作 る 表 : 行 幅 を 最 小 値 より 小 さく 設 定 する 3 表 の 左 右 のサイズを 適 宜 調 整 します Word で 表 を 作 成 するとき, 列 幅, 行 幅 ともに 基 本 的 に 自 由

Word 003 スキルブック 06 - オブジェクトの 利 用 0.Word で 作 る 表 : 行 幅 を 最 小 値 より 小 さく 設 定 する 3 表 の 左 右 のサイズを 適 宜 調 整 します Word で 表 を 作 成 するとき, 列 幅, 行 幅 ともに 基 本 的 に 自 由 Word 003 スキルブック 06 - オブジェクトの 利 用 Word 003 スキルブック 06 - オブジェクトの 利 用 ツールバーに 表 ( 罫 線 )の 作 成 機 能 を 追 加 する( 罫 線 ツールバーを 追 加 する) ツールバー 上 の,アイコンのない 空 白 箇 所 を 右 してメニューを 開 きます 0. 準 備 :ツールバーのカスタマイズ メニュー 内 の 罫 線 の

More information

Office 10 パッケージ版「リンク集」

Office 10 パッケージ版「リンク集」 Office 10 パッケージ 版 リンク 集 バージョン 10.3 Copyright (C) 2013-2015 Cybozu リンク 集 リンク 集 は よく 利 用 するWebサイトのURLを 登 録 するアプリケーションです リンク 集 には 次 の2 種 類 のリンクを 管 理 できます 共 有 リンク: すべてのユーザーが 共 有 して 使 用 できるリンクです システム 管 理 者

More information

スライド 1

スライド 1 アリババ ワールドパスポート 製 品 詳 細 ご 利 用 ガイド 2010/03/11 Ver1.00 2012/10/09 Ver1.50 お 問 い 合 わせ 先 アリババ 株 式 会 社 メール:infoggs@alibaba-inc.jp 103-0007 東 京 都 中 央 区 日 本 橋 浜 町 2-12-4 エスエス 製 薬 本 社 ビル4F 目 次 文 字 装 飾 の 追 加 変 更

More information

■ユーザ

■ユーザ Joruri CMS 2.0.0 基 本 マニュアル (2013.7.16) コンテンツ アンケート コンテンツ アンケート では 以 下 のような 機 能 特 徴 を 備 えたアンケートフォームペ ージの 作 成 を 行 うことが 出 来 ます TinyMCE の 使 用 で HTML 等 の 複 雑 な 知 識 を 必 要 とせず MS WORD のような 感 覚 でアンケ ートフォームのページを

More information

目 次 遺 失 物 管 理 プログラム 利 用 者 マニュアル 1. 動 作 条 件... 2 2. 遺 失 物 管 理 プログラムのインストール... 2 3. 運 用 の 流 れ... 3 3.1. 起 動 方 法... 3 4. 操 作 方 法 について... 4 4.1. 基 本 的 な 操

目 次 遺 失 物 管 理 プログラム 利 用 者 マニュアル 1. 動 作 条 件... 2 2. 遺 失 物 管 理 プログラムのインストール... 2 3. 運 用 の 流 れ... 3 3.1. 起 動 方 法... 3 4. 操 作 方 法 について... 4 4.1. 基 本 的 な 操 平 成 19 年 11 月 9 日 目 次 遺 失 物 管 理 プログラム 利 用 者 マニュアル 1. 動 作 条 件... 2 2. 遺 失 物 管 理 プログラムのインストール... 2 3. 運 用 の 流 れ... 3 3.1. 起 動 方 法... 3 4. 操 作 方 法 について... 4 4.1. 基 本 的 な 操 作 方 法... 4 4.2. 項 目 の 入 力 値 制 限

More information

目 次 動 作 環 境 について... 2 土 砂 災 害 情 報 マップとは... 3 更 新 情 報 を 見 る... 4 熊 本 県 の 防 災 災 害 情 報 を 見 る... 5 関 連 サイトのリンク 情 報 を 見 る... 6 用 語 を 調 べる... 7 利 用 上 の 留 意

目 次 動 作 環 境 について... 2 土 砂 災 害 情 報 マップとは... 3 更 新 情 報 を 見 る... 4 熊 本 県 の 防 災 災 害 情 報 を 見 る... 5 関 連 サイトのリンク 情 報 を 見 る... 6 用 語 を 調 べる... 7 利 用 上 の 留 意 熊 本 県 土 砂 災 害 情 報 マップ 操 作 ガイド 平 成 27 年 3 月 目 次 動 作 環 境 について... 2 土 砂 災 害 情 報 マップとは... 3 更 新 情 報 を 見 る... 4 熊 本 県 の 防 災 災 害 情 報 を 見 る... 5 関 連 サイトのリンク 情 報 を 見 る... 6 用 語 を 調 べる... 7 利 用 上 の 留 意 事 項 を 確

More information

12_02_02 帳票設定5

12_02_02 帳票設定5 帳 票 設 定 について 概 要 エクスプレスで 提 供 している 各 種 契 約 書 の 標 準 Excel テンプレートの 発 行 パターンを 変 更 したい 場 合 または Excel テンプレートをオリジナルに 編 集 され 標 準 Excel テンプレート 以 外 のファイ ルをご 利 用 頂 く 場 合 に 本 メニューより 設 定 登 録 を 行 います 基 本 操 作 [ツール]-[

More information

戦略担当者のための

戦略担当者のための アーカイブに 登 録 するための ナレッジ 作 成 方 法 1.ナレッジの 整 理 2.ナレッジの 文 章 化 (1)タイトルと 目 次 の 設 定 (2) 本 文 の 作 成 (3) 体 裁 の 整 備 と 校 正 (4)PDFの 作 成 2008 年 8 月 http://www.darecon.com 1.ナレッジの 整 理 初 めにナレッジ( 知 識 ノウハウ)を 整 理 します 以 下 の4

More information

Microsoft Word - ms-word

Microsoft Word - ms-word 日 本 語 ワードプロセッサ 1 Microsoft Word の 概 要 コンピュータの 特 徴 の 一 つは,ソフトウェアを 入 れ 替 えて 動 作 させることにより, 種 々の 機 械 に 変 えることができることです.とくにパーソナルコンピュータは, 日 本 語 ワードプロセッサとして 使 用 されることが 多 くあります. 総 合 メディアセンターの 教 育 シ ステムでは,Microsoft

More information

年齢別人数計算ツールマニュアル

年齢別人数計算ツールマニュアル 年 齢 別 人 数 計 算 ツールの 使 用 手 引 本 ツールは 学 校 基 本 調 査 の 調 査 項 目 である 年 齢 別 入 学 者 数 を 学 生 名 簿 等 の 既 存 データを 利 用 して 集 計 するものです < 対 象 となる 調 査 票 > 1 学 校 調 査 票 ( 大 学 ) 学 部 学 生 内 訳 票 ( 様 式 第 8 号 ) 2 学 校 調 査 票 ( 短 期 大

More information

Microsoft PowerPoint - 130522_リビジョンアップ案内_最終.pptx

Microsoft PowerPoint - 130522_リビジョンアップ案内_最終.pptx WaWaOfficeシリーズ バージョン8.2リビジョンアップ 2013 年 6 月 18 日 リリース 予 定 株 式 会 社 アイアットOEC ローカル 機 能 の 改 善 プレビュー 表 追 加 の 覧 表 にプレビュー 表 を 設 定 可 能 にしました 1 表 2 表 1 +プレビュー 表 から 選 択 設 定 法 個 設 定 個 設 定 基 本 設 定 PC 専 パラメータの 覧 表 時

More information

Microsoft Word - 教科書VBA_第1章2013_.doc

Microsoft Word - 教科書VBA_第1章2013_.doc 第 1 章 Excel のマクロ 機 能 VBA とは VBA(Visual Basic for Applications)は,Microsoft 社 の Word や Excel など,Microsoft Office ア プリケーションで 共 通 に 利 用 できるプログラミング 言 語 です. 例 えば Excel のようなアプリケーション で 作 成 された VBA プログラムは,そのアプリケーションのデータと

More information

C.1 共 有 フォルダ 接 続 操 作 の 概 要 アクセスが 許 可 されている 研 究 データ 交 換 システムの 個 人 用 共 有 フォルダまたは メーリングリストの 共 有 フォルダに 接 続 して フォルダを 作 成 したり ファイル をアップロードまたはダウンロードしたりすることがで

C.1 共 有 フォルダ 接 続 操 作 の 概 要 アクセスが 許 可 されている 研 究 データ 交 換 システムの 個 人 用 共 有 フォルダまたは メーリングリストの 共 有 フォルダに 接 続 して フォルダを 作 成 したり ファイル をアップロードまたはダウンロードしたりすることがで C.1 共 有 フォルダ 接 続 操 作 の 概 要 C.2 Windows から 接 続 操 作 する C.3 Mac OS X から 接 続 操 作 する 67 C.1 共 有 フォルダ 接 続 操 作 の 概 要 アクセスが 許 可 されている 研 究 データ 交 換 システムの 個 人 用 共 有 フォルダまたは メーリングリストの 共 有 フォルダに 接 続 して フォルダを 作 成 したり

More information

<4D6963726F736F667420576F7264202D2090BF8B818AC7979D8B40945C91808DEC837D836A83858341838B2E646F63>

<4D6963726F736F667420576F7264202D2090BF8B818AC7979D8B40945C91808DEC837D836A83858341838B2E646F63> 電 子 申 請 支 援 システム 建 設 業 統 合 版 請 求 管 理 機 能 操 作 マニュアル ワイズ 公 共 データシステム 株 式 会 社 記 載 内 容 は 開 発 途 中 のものも 含 まれており 一 部 動 作 画 面 が 異 なることがあります < 目 次 > 1. 請 求 管 理 機 能 について... 1 システムの 特 徴... 1 導 入 方 法... 4 2. 請 求 管

More information

改 定 履 歴 改 訂 日 改 訂 理 由 及 び 内 容 承 認 者 確 認 者 改 訂 者 05/8/7 新 版 発 行 05/0/5 推 奨 動 作 環 境 を 追 記

改 定 履 歴 改 訂 日 改 訂 理 由 及 び 内 容 承 認 者 確 認 者 改 訂 者 05/8/7 新 版 発 行 05/0/5 推 奨 動 作 環 境 を 追 記 代 理 店 様 向 け 業 務 支 援 システム Ke-web オペレーションマニュアル 05/0 ケニス 株 式 会 社 改 定 履 歴 改 訂 日 改 訂 理 由 及 び 内 容 承 認 者 確 認 者 改 訂 者 05/8/7 新 版 発 行 05/0/5 推 奨 動 作 環 境 を 追 記 総 則 本 文 書 の 位 置 付 け 本 文 書 は 代 理 店 向 け 営 業 支 援 システム

More information

2 / 15 ページ 第 10 講 バーコードシートの 作 成 10-1 ブック(ファイル)を 開 く 第 8 講 で 保 存 した meibo2.xlsx を 開 きましょう 10-2 データの 検 索 と 置 換 データを 検 索 したり 別 のデータに 置 き 換 えたりする 機 能 です 検

2 / 15 ページ 第 10 講 バーコードシートの 作 成 10-1 ブック(ファイル)を 開 く 第 8 講 で 保 存 した meibo2.xlsx を 開 きましょう 10-2 データの 検 索 と 置 換 データを 検 索 したり 別 のデータに 置 き 換 えたりする 機 能 です 検 1 / 15 ページ キャリアアップコンピューティング 第 10 講 [ 全 15 講 ] 2016 年 度 2 / 15 ページ 第 10 講 バーコードシートの 作 成 10-1 ブック(ファイル)を 開 く 第 8 講 で 保 存 した meibo2.xlsx を 開 きましょう 10-2 データの 検 索 と 置 換 データを 検 索 したり 別 のデータに 置 き 換 えたりする 機 能

More information

はじめに 本 プログラムファイルは Windows 版 Microsoft Office Excel で 作 成 されています 動 作 環 境 などは 下 記 を 参 照 ください 動 作 確 認 環 境 [Excel] Microsoft Office Excel 2010 Microsoft O

はじめに 本 プログラムファイルは Windows 版 Microsoft Office Excel で 作 成 されています 動 作 環 境 などは 下 記 を 参 照 ください 動 作 確 認 環 境 [Excel] Microsoft Office Excel 2010 Microsoft O 認 知 症 退 院 支 援 クリニカルパス ソフトウェア 操 作 説 明 書 Version 120312 対 応 版 はじめに 本 プログラムファイルは Windows 版 Microsoft Office Excel で 作 成 されています 動 作 環 境 などは 下 記 を 参 照 ください 動 作 確 認 環 境 [Excel] Microsoft Office Excel 2010 Microsoft

More information

購買ポータルサイトyOASIS簡易説明書 b

購買ポータルサイトyOASIS簡易説明書 b 購 買 ポータルサイト yoasis 簡 易 説 明 書 横 河 電 機 株 式 会 社 本 書 は 購 買 ポータルサイト yoasis の 簡 易 的 な 基 本 操 作 について 記 載 してあります 詳 細 な 操 作 方 法 については 別 冊 の 購 買 ポータルサイト yoasis 操 作 説 明 書 をご 覧 下 さい 本 書 の 内 容 は 性 能 / 機 能 の 向 上 などにより

More information

かんたんQR

かんたんQR 楽 々Excel ツール Excel 用 便 利 ツール WindowsXP/Vista/7/8/10 対 応 Excel2007/2010/2013/2016 対 応 ユーザーマニュアル 氷 川 情 報 システム 株 式 会 社 2015-0800-0001 1. 楽 々Excel ツール の 概 要... 3 1.1.セルの 文 字 列 置 換... 3 1.2. 重 複 セルチェック... 3

More information

VersionUP4.3.1

VersionUP4.3.1 変 更 ポイント Click to edit Master title style Click to edit Master subtitle style 2016, March レクシスネクシス ジャパン 株 式 会 社 バージョンアップ 概 要 変 更 点 2016 年 03 月 5 日 ( 土 )よりがバージョンアップいたしました 変 更 点 についてご 確 認 ください No. 区 分 変

More information

itutor (Windows Vista, 8, 8, 8.1 ) 製 品 紹 介 や 操 作 順 の PC 操 作 システム 運 順 の マニュアル 動 画 教 育 効 果 の い eラーニング 教 材 時 間 をかけず 簡 単 に 作 成 できる 2

itutor (Windows Vista, 8, 8, 8.1 ) 製 品 紹 介 や 操 作 順 の PC 操 作 システム 運 順 の マニュアル 動 画 教 育 効 果 の い eラーニング 教 材 時 間 をかけず 簡 単 に 作 成 できる 2 itutor Moodlerooms 2015/09/07 Ver: 1.0.0 アシストマイクロ 株 式 会 社 西 村 純 一 itutor (Windows Vista, 8, 8, 8.1 ) 製 品 紹 介 や 操 作 順 の PC 操 作 システム 運 順 の マニュアル 動 画 教 育 効 果 の い eラーニング 教 材 時 間 をかけず 簡 単 に 作 成 できる 2 エビデンス

More information

メール 受 信 画 面 のレイアウトを 変 更 することができます ここでは 初 期 設 定 のレイアウトで 表 示 されているボタ ンやマークについて 解 説 します メール 一 覧 画 面 には 受 信 したメールが 一 覧 表 示 されます メール 受 信 タブをクリックすると 受 信 箱 フ

メール 受 信 画 面 のレイアウトを 変 更 することができます ここでは 初 期 設 定 のレイアウトで 表 示 されているボタ ンやマークについて 解 説 します メール 一 覧 画 面 には 受 信 したメールが 一 覧 表 示 されます メール 受 信 タブをクリックすると 受 信 箱 フ .3 1...3 メール 受 信 タブのサブメニューから 直 接 受 信 箱 以 外 のフォルダを 表 示 することもできます 共 有 メー ルボックスのフォルダは 指 定 できません 3. 35 メール 受 信 画 面 のレイアウトを 変 更 することができます ここでは 初 期 設 定 のレイアウトで 表 示 されているボタ ンやマークについて 解 説 します メール 一 覧 画 面 には 受

More information

<4D6963726F736F667420576F7264202D20574254816995B68F918DEC90AC89898F4B899E977095D2816A2E646F63>

<4D6963726F736F667420576F7264202D20574254816995B68F918DEC90AC89898F4B899E977095D2816A2E646F63> 文 書 作 成 演 習 ( 応 用 編 ) (Word007,Excel007) 文 書 作 成 演 習 ( 応 用 編 ) のテキストを 参 考 にしながら, 次 の 学 級 だよりを 作 成 してみましょう IPA 教 育 用 画 像 素 材 集 より < 演 習 のための 準 備 > 演 習 用 素 材 のフォルダをデスクトップ 上 に 作 成 します IPA 教 育 用 画 像 素 材 集

More information

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション 1 履 修 履 歴 データベースの 仕 組 み 学 生 が 履 修 履 歴 を 登 録 して 企 業 へデータを 送 信 すると 企 業 担 当 者 が 履 修 履 歴 データを 見 られるようになります 不 特 定 の 企 業 に 履 修 履 歴 データが 閲 覧 されるわけではありません < 基 本 的 な 流 れ> A 社 データ ベース 応 募 企 業 へ データを 送 信 学 生 A 専

More information

<4D6963726F736F667420576F7264202D20979897708ED28FDA8DD7837D836A83858341838B2E646F6378>

<4D6963726F736F667420576F7264202D20979897708ED28FDA8DD7837D836A83858341838B2E646F6378> デジタル 化 資 料 送 信 サービス の 利 用 方 法 目 次 1 はじめに(サービスの 概 要 利 用 上 の 注 意 ) p.1 2 検 索 の 仕 方 ( 本 を 探 す) p.3 3 閲 覧 の 仕 方 ( 本 を 読 む) p.7 1 はじめに 1.1 サービスの 概 要 について デジタル 化 資 料 送 信 サービス ( 送 信 サービス)は 国 立 国 会 図 書 館 でデジタル

More information

(Microsoft Word - Excel\211\236\227p2\217\315.docx)

(Microsoft Word - Excel\211\236\227p2\217\315.docx) この 章 では 日 付 と 時 刻 を 扱 う 関 数 や 複 数 の 関 数 を 組 み 合 わせてエラーを 非 表 示 にする 方 法 また 検 索 条 件 に 一 致 するデータを 取 り 出 す 関 数 の 使 い 方 などについて 学 習 します 1 日 付 と 時 刻 の 関 数 TODAY 関 数 NOW 関 数 TODAY 関 数 は パソコンの 内 蔵 時 計 を 利 用 して 現

More information

<4D6963726F736F667420576F7264202D20819C8140928692B78AFA95DB91538C7689E68DEC90AC289

<4D6963726F736F667420576F7264202D20819C8140928692B78AFA95DB91538C7689E68DEC90AC289 官 庁 施 設 情 報 管 理 システム (BIMMS-N) 操 作 説 明 書 9 施 設 維 持 管 理 9.4 中 長 期 保 全 計 画 作 成 ( 東 北 版 ) 平 成 26 年 10 月 国 土 交 通 省 東 北 地 方 整 備 局 営 繕 部 目 次 9 施 設 維 持 管 理 9.4 中 長 期 保 全 計 画 作 成 ( 東 北 版 ) 9.4.0 中 長 期 保 全 計 画

More information

2 研 究 資 源 共 通 化 統 合 検 索 システムソフトウェア 利 用 者 用 マニュアル(ゲートウェイシステム) 目 次 1. はじめに 主 な 利 用 の 流 れ 検 索 検 索 画 面 検 索 画 面 の 設 定...

2 研 究 資 源 共 通 化 統 合 検 索 システムソフトウェア 利 用 者 用 マニュアル(ゲートウェイシステム) 目 次 1. はじめに 主 な 利 用 の 流 れ 検 索 検 索 画 面 検 索 画 面 の 設 定... 利 用 者 用 マニュアル (ゲートウェイシステム) Version 1.0.0 Release Date 14/3/2012 2 研 究 資 源 共 通 化 統 合 検 索 システムソフトウェア 利 用 者 用 マニュアル(ゲートウェイシステム) 目 次 1. はじめに... 3 1.1 主 な 利 用 の 流 れ... 4 2. 検 索... 5 2.1 検 索 画 面... 6 2.2 検 索

More information

MATRIX TRADER(インストール版) 取扱説明書

MATRIX TRADER(インストール版) 取扱説明書 インストール 版 MATRIX TRADER チャート 取 扱 説 明 書 目 次 タイトル ページ タイトル ページ チャート メニューの 呼 び 出 し 2 チャートの 追 加 3 画 面 の 説 明 4 MENU の 説 明 6 画 面 表 示 方 法 7 クロスラインの 表 示 8 チャートからの 新 規 注 文 9 コメント 入 力 10 アラートの 設 定 11 左 側 アイコンの 説

More information

入 札 参 加 資 格 申 請 システム 操 作 マニュアル 入 札 参 加 資 格 の 資 格 有 効 ( 変 更 ) 日 を 迎 えると 追 加 届 の 登 録 ができるようになります ( 入 札 参 加 資 格 申 請 の 定 時 受 付 では いずれかの 申 請 先 団 体 から 入 札 参

入 札 参 加 資 格 申 請 システム 操 作 マニュアル 入 札 参 加 資 格 の 資 格 有 効 ( 変 更 ) 日 を 迎 えると 追 加 届 の 登 録 ができるようになります ( 入 札 参 加 資 格 申 請 の 定 時 受 付 では いずれかの 申 請 先 団 体 から 入 札 参 あいち 電 子 調 達 共 同 システム( 物 品 等 ) 入 札 参 加 資 格 申 請 システム 操 作 マニュアル - 業 者 - 目 次... 8-1 8-1 本 店 ID( 業 者 用 ID)の 確 認 ~ 初 期 パスワード 変 更... 8-3 8-1-1 入 札 参 加 資 格 申 請 システム メニュー... 8-3 8-1-2 契 約 営 業 所 等 ID 確 認 (パスワード

More information

ことばを覚える

ことばを覚える 業 務 部 門 の 担 当 者 による 担 当 者 のための 業 務 アプリケーションの 作 り 方 (その1) 設 定 ウィザードを 用 いた 受 注 伝 票 管 理 ツールの 構 築 コンテキサー 操 作 演 習 コンテキサー チュートリアル(バージョン2.2 用 ) 20121113 コンテキサーのバージョンは 2.2.09 以 降 で 行 ってください 目 次 ステップ1 受 注 伝 票 パネルの

More information

以 下 に 手 順 の 流 れを 記 載 します 3ページ 以 降 で 各 項 目 の 手 順 を 説 明 します ( をクリックすると 該 当 ページにジャンプします ) また 4ページに 汎 用 データ 受 入 に 関 するよくあるお 問 い 合 わせをご 紹 介 しています Step (3ペー

以 下 に 手 順 の 流 れを 記 載 します 3ページ 以 降 で 各 項 目 の 手 順 を 説 明 します ( をクリックすると 該 当 ページにジャンプします ) また 4ページに 汎 用 データ 受 入 に 関 するよくあるお 問 い 合 わせをご 紹 介 しています Step (3ペー 人 事 奉 行 iシリーズ 汎 用 データ 受 入 の 手 順 書 汎 用 データの 作 成 方 法 を 知 りたい 汎 用 データのフォーマットがわからない 汎 用 データ 受 入 をしたら 受 入 エラーが 発 生 した について 社 員 情 報 データの 受 入 を 例 に 説 明 します 本 手 順 書 では OBC 受 入 形 式 ( ) の 汎 用 データの 受 入 を 受 入 フォーマットに

More information

160 アプリケーションとデータ 管 理 8.1 Microsoft Office Mobile Office Mobileでは 以 下 の4つのアプリケーションを 使 用 して Microsoft 文 書 を 作 成 編 集 閲 覧 することができます Word Mobile は Microsof

160 アプリケーションとデータ 管 理 8.1 Microsoft Office Mobile Office Mobileでは 以 下 の4つのアプリケーションを 使 用 して Microsoft 文 書 を 作 成 編 集 閲 覧 することができます Word Mobile は Microsof 第 8 章 アプリケーションとデータ 管 理 8.1 Microsoft Office Mobile 8.2 Adobe Reader LEを 使 う 8.3 ファイルをコピー/ 管 理 する 8.4 ZIP を 使 う 160 アプリケーションとデータ 管 理 8.1 Microsoft Office Mobile Office Mobileでは 以 下 の4つのアプリケーションを 使 用 して

More information

第 1 章 : 概 要 このウェブサイトでは ウェブブラウザに 必 要 とする 電 動 機 スペックを 入 力 する 事 により 誘 導 電 動 機 の 外 形 図 を 検 索 & 照 会 すること ができます 画 面 の 紹 介 ログインボタン 一 覧 表 形 式 で 選 定 ボタン ログイン 画

第 1 章 : 概 要 このウェブサイトでは ウェブブラウザに 必 要 とする 電 動 機 スペックを 入 力 する 事 により 誘 導 電 動 機 の 外 形 図 を 検 索 & 照 会 すること ができます 画 面 の 紹 介 ログインボタン 一 覧 表 形 式 で 選 定 ボタン ログイン 画 大 洋 電 機 株 式 会 社 電 動 機 外 形 図 検 索 サイト 利 用 マニュアル 2014 年 5 月 版 第 1 章 : 概 要 このウェブサイトでは ウェブブラウザに 必 要 とする 電 動 機 スペックを 入 力 する 事 により 誘 導 電 動 機 の 外 形 図 を 検 索 & 照 会 すること ができます 画 面 の 紹 介 ログインボタン 一 覧 表 形 式 で 選 定 ボタン

More information

Microsoft Word - 03accessデータベース演習レジメ.doc

Microsoft Word - 03accessデータベース演習レジメ.doc Access データベース 演 習 1ワードでデータベースの 基 礎 になるテキストデータを 整 形 し 2Excel でのデータベースの 基 本 的 な 扱 いに 慣 れ さらに3Access を 用 いて クエリやリレーションシップの 概 念 を 理 解 し Excel との 連 携 を 実 践 することを 目 的 とする 題 材 としては 定 期 試 験 対 策 用 の 英 単 語 リストを

More information

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション 楽 天 市 場 Yahooショッピング! 商 品 複 製 マニュアル 1 在 庫 連 携 を 行 うためには 事 前 に 各 モールのコード 合 わせの 作 業 が 必 要 です 詳 しくは 各 モールとの 在 庫 連 携 に 必 要 なコード 連 携 マニュアルをご 覧 ください 2 楽 天 Yahooショッピング!の 仕 様 は 変 更 になっている 場 合 があります 各 モールの 仕 様 も

More information

図 2 エクスポートによるシェープファイルの 新 規 保 存 新 規 保 存 するファイルは,より 分 かりやすい 名 前 をつけて 適 切 なフォルダ(shape フォル ダにまとめておくのがよい) 上 に 保 存 しておく 2 / 10

図 2 エクスポートによるシェープファイルの 新 規 保 存 新 規 保 存 するファイルは,より 分 かりやすい 名 前 をつけて 適 切 なフォルダ(shape フォル ダにまとめておくのがよい) 上 に 保 存 しておく 2 / 10 外 部 データとのやりとり レイヤのエクスポートによるシェープファイルの 作 成 金 沢 区 を 題 材 とした 操 作 練 習 では,すでにマップ 上 に 表 示 されているレイヤを 複 製 する ことで, 同 一 のシェープファイルを, 一 方 は 階 級 区 分 図 に 用 い, 他 方 はチャート 表 示 に 用 いてオーバーレイ 表 現 できることを 体 験 した 同 様 の 操 作 は,

More information

<4D6963726F736F667420576F7264202D208CA990CF96BE8DD78F918EAE82CC95CF8D583230313131313130>

<4D6963726F736F667420576F7264202D208CA990CF96BE8DD78F918EAE82CC95CF8D583230313131313130> 平 成 23 年 11 月 10 日 協 力 会 社 の 皆 様 へ 西 松 建 設 株 式 会 社 見 積 明 細 書 書 式 の 変 更 について 平 成 23 年 6 月 より 新 業 務 システム(RN21 システム)を 導 入 しておりますが 運 用 を 円 滑 なものとするため 提 出 いただく 見 積 明 細 書 の 書 式 を 変 更 いたしました 以 下 に 取 り 扱 い 要 領

More information

OpenOffice.org の 表 計 算 機 能 表 計 算 ツールの 基 本 操 作 OpenOffice.org の 表 計 算 ツール Calc(カルク)の 基 本 操 作 を 紹 介 します ここでは 請 求 書 の 作 り 方 を 通 し て 基 本 操 作 を 学 びます サンプルフ

OpenOffice.org の 表 計 算 機 能 表 計 算 ツールの 基 本 操 作 OpenOffice.org の 表 計 算 ツール Calc(カルク)の 基 本 操 作 を 紹 介 します ここでは 請 求 書 の 作 り 方 を 通 し て 基 本 操 作 を 学 びます サンプルフ オープンオフィス 3 入 門 ガイド - Calc:OpenOffice.org の 表 計 算 機 能 編 このドキュメントは クリエイティブ コモンズに 表 示 される 帰 属 - 2.1 日 本 のライセンスのもと 提 供 し ています このドキュメントの Web 版 を OpenOffice.org 日 本 ユーザー 会 のドキュメントで 公 開 しています http://openoffice-docj.sourceforge.jp/wiki/documentation/beginers_guide3

More information

K-REE Access販売管理 フォーム定義書

K-REE Access販売管理 フォーム定義書 c 基 本 設 定 設 定 c 基 本 設 定 メニュー_マスタ 管 理 c 基 本 設 定 の 各 項 目 を 入 力 する c 基 本 設 定 _ 伝 票 パターンラ 設 定 c 基 本 設 定 c 基 本 設 定 c 基 本 設 定 の 各 項 目 ( 宛 名 ラベル 関 連 )を 入 力 する c 基 本 設 定 _ 伝 票 パターン 見 設 定 c 基 本 設 定 c 基 本 設 定 c

More information

Microsoft Word - i_navi.txt

Microsoft Word - i_navi.txt Internet Explorer 7 留 意 事 項 ======================================================================= Internet Navigware 製 品 を Internet Explorer 7.0 で 使 用 する 場 合 の 留 意 事 項 を 以 下 現 象 ごとに 記 述 しますので ご 利 用 の

More information

以 下 に 手 順 の 流 れを 記 載 します 3ページ 以 降 で 各 項 目 の 手 順 を 説 明 します ( をクリックすると 該 当 ページにジャンプします ) また 15ページに 汎 用 データ 受 入 に 関 する よくあるお 問 い 合 わせをご 紹 介 しています Step1 (

以 下 に 手 順 の 流 れを 記 載 します 3ページ 以 降 で 各 項 目 の 手 順 を 説 明 します ( をクリックすると 該 当 ページにジャンプします ) また 15ページに 汎 用 データ 受 入 に 関 する よくあるお 問 い 合 わせをご 紹 介 しています Step1 ( 勘 定 奉 行 i8/iシリーズ 汎 用 データ 受 入 の 手 順 書 汎 用 データの 作 成 方 法 を 知 りたい 汎 用 データのフォーマットがわからない 汎 用 データ 受 入 をしたら 受 入 エラーが 発 生 した について 仕 訳 伝 票 データの 受 入 を 例 に 説 明 します 本 手 順 書 では OBC 受 入 形 式 ( ) の 汎 用 データの 受 入 を 受 入 フォーマットに

More information

別冊資料-11

別冊資料-11 一 般 競 争 入 札 方 式 工 事 希 望 型 競 争 入 札 方 式 における 技 術 資 料 入 力 システムの 利 用 方 法 について Rev 8.0( 平 成 28 年 3 月 ) 国 土 交 通 省 中 国 地 方 整 備 局 - 目 次 - 1. はじめに... 1 2. 利 用 環 境 及 び 注 意 事 項... 1 3. 入 力 手 順 について... 2 3.1. 技 術

More information

目 次 1 インストール 手 順... 3 1-1 プログラム データファイルのインストール... 3 1-2 Microsoft Access2013Runtime SP1(32bit) 版 のインストール... 5 2 基 本 操 作... 7 2-1 ログイン... 7 2-2 メニュー...

目 次 1 インストール 手 順... 3 1-1 プログラム データファイルのインストール... 3 1-2 Microsoft Access2013Runtime SP1(32bit) 版 のインストール... 5 2 基 本 操 作... 7 2-1 ログイン... 7 2-2 メニュー... 顧 客 営 業 管 理 システム マニュアル 目 次 1 インストール 手 順... 3 1-1 プログラム データファイルのインストール... 3 1-2 Microsoft Access2013Runtime SP1(32bit) 版 のインストール... 5 2 基 本 操 作... 7 2-1 ログイン... 7 2-2 メニュー... 7 2-3 パスワード 変 更... 8 2-4 画

More information

5 振 込 依 頼 書 の 作 成 方 法 ()ツールの 起 動 コピーまたはダウンロードしたツールをダブルクリックして 開 いてください (ツール 起 動 の 際 マクロを 有 効 にしてください ) ダブルクリック 後 以 下 のメッセージが 出 力 されますので 読 み 取 り 専 用 ボタン

5 振 込 依 頼 書 の 作 成 方 法 ()ツールの 起 動 コピーまたはダウンロードしたツールをダブルクリックして 開 いてください (ツール 起 動 の 際 マクロを 有 効 にしてください ) ダブルクリック 後 以 下 のメッセージが 出 力 されますので 読 み 取 り 専 用 ボタン 振 込 依 頼 書 作 成 ツール のご 利 用 説 明 書 はじめに 振 込 依 頼 書 作 成 ツール( 以 下 ツール という ) は パソコンを 使 用 し 全 国 の ろうきんが 統 一 して 使 用 する 振 込 依 頼 書 を 作 成 するためのツールです ツールを 利 用 して 頂 くことで お 客 様 が 振 込 依 頼 書 を 手 書 きで 作 成 する 負 担 をなくし また

More information

Microsoft Word - RuLIS2操作マニュアル_地図を見る20120104m.docx

Microsoft Word - RuLIS2操作マニュアル_地図を見る20120104m.docx RuLIS WEB 地 図 表 示 操 作 マニュアル 利 用 者 機 能 2011 年 12 月 株 式 会 社 オークニー 目 次 1. 概 要... 1 2. 初 期 画 面 : 地 図 表 示 範 囲 の 選 択... 1 3. 地 図 表 示 画 面 の 構 成... 2 3.1. ツールバーの 各 アイコンについて... 2 3.2. ズームバーと 画 面 移 動 バー... 3 4.

More information

はじめに ~アイコン 説 明 1.TOP 画 面 2.カメラTOP 切 替 会 社 選 択 画 面 へ 遷 移 + カメラアプリの 新 規 フォルダーを 作 成 編 集 カメラアプリのフォルダーを 編 集 更 新 設 定 の 変 更 が 反 映 されない 場 合 更 新 をしてください メニュー カ

はじめに ~アイコン 説 明 1.TOP 画 面 2.カメラTOP 切 替 会 社 選 択 画 面 へ 遷 移 + カメラアプリの 新 規 フォルダーを 作 成 編 集 カメラアプリのフォルダーを 編 集 更 新 設 定 の 変 更 が 反 映 されない 場 合 更 新 をしてください メニュー カ TOOLS Camera ~ 写 真 の 達 人 連 携 ~ 利 用 方 法 株 式 会 社 ツールズ All Rights Reserved, Copyright 2011 TOOLS Inc 1 はじめに ~アイコン 説 明 1.TOP 画 面 2.カメラTOP 切 替 会 社 選 択 画 面 へ 遷 移 + カメラアプリの 新 規 フォルダーを 作 成 編 集 カメラアプリのフォルダーを 編

More information

Mac OS Xでの利用設定 マニュアル

Mac OS Xでの利用設定 マニュアル Enterprise Architect on Mac OS X setup guide by SparxSystems Japan Mac OS X 環 境 での 利 用 設 定 マニュアル (2015/12/01 最 終 更 新 ) 1. はじめに このドキュメントでは Enterprise Architect を Mac OS X で 動 作 させるための 設 定 につ いて 説 明 したドキュメントです

More information

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション 記 事 を 作 成 する Copyright Diverta inc. All right reserved. 1 目 次 1. 記 事 とは 1-1 記 事 とは 1-2 記 事 モジュール 概 要 2. 記 事 の 内 容 を 書 く 2-1 記 事 モジュール 2-2 記 事 グループの 作 成 2-3 記 事 グループを 編 集 する 2-4 記 事 を 編 集 する 2-5 記 事 編 集

More information

富士山チェックリスト

富士山チェックリスト 富 士 山 決 算 マニュアル 富 士 山 賃 貸 管 理 財 務 会 計 を 使 用 して 決 算 を 行 う 場 合 の 一 般 的 な 手 順 をご 説 明 します 個 人 不 動 産 の 決 算 を 行 う 場 合 P1~P8 個 人 一 般 の 決 算 を 行 う 場 合 P4~P8 P11 青 色 申 告 特 別 控 除 額 の 入 力 個 人 農 業 の 決 算 を 行 う 場 合 P4~P11

More information