表示内容を修飾する
サンプル「CZ0909FollowerType1」のように、プロパティウィンドウでの設定も含めて記述するコードは、行数は少ないですが見た目が良いとは言えません。そこで、サンプル「CZ0909FollowerType2」では、見た目を修飾すると共に、byte配列に納められた画像ファイルを表示する部分にも対応してみました。
サンプル「CZ0909FollowerType2」では、フォームのLoadイベントと一覧取得ボタンのClickイベントの2カ所で修飾を行っています。大半の処理はLoadイベントに記載していますが、Clickイベントでは取得したデータに合わせてさらに細かな調整を行っています。
Loadイベントでの処理
Loadイベントでは、次の処理を行っています。
- スキンを適用
- セル型の設定(テキスト型はReadOnly、Image型は縦横比を崩さずにサイズ調整)
- 列数設定
- 数式指定モードの指定
- シート全体の調整
- 列ヘッダの設定
- 列ヘッダの連結
- 高さや幅変更の抑止
- 各列の定義
スキンを適用
SPREAD for .NETには、罫線や色調を組み合わせた「スキン」と呼ばれるテンプレート機能があります。独自にスキンを作成して指定する事もできますが、標準で定義されているデフォルトスキンにも使いやすいものが揃っています。
Me.FpSpread1_Sheet1.ActiveSkin = FarPoint.Win.Spread.DefaultSkins.Colorful4
- ActiveSkinプロパティを設定してスキンを適用
セル型の設定
SPREAD for .NETでは、セルに対してさまざまな型を指定できます。型に合わせてデータの表示方式が異なるので、データ型に合わせたセル型を選定しなければなりません。今回のサンプルでは、テキスト以外に画像データがあるので、テキスト型セルとイメージ型セルの2つのセル型用のオブジェクトを定義して、該当列に適用する準備を行います(テキスト型はReadOnly、Image型は縦横比を崩さずにサイズ調整)。
Dim textCellType As New FarPoint.Win.Spread.CellType.TextCellType Dim imageCellType As New FarPoint.Win.Spread.CellType.ImageCellType textCellType.ReadOnly = True imageCellType.Style = FarPoint.Win.RenderStyle.StretchAndScale
- テキスト型のReadOnlyプロパティをTrueにし、読み取り専用に設定
- イメージ型のStyleプロパティをStreatchAndScaleにし、縦横比を変えずにセルの大きさに合わせて画像を表示するように設定
列数の設定
シート全体の調整などを行った場合、不要な列があると処理量が多くなるため、なるべく早いタイミングで列数を設定します。
Me.FpSpread1_Sheet1.Columns.Count = 9
数式指定モードを指定
セルに数式を埋め込む場合、他のセルを指定する書式にはA1形式とR1C1形式の2つがあります。R1C1形式の方が列や行の位置を絶対位置でも相対位置でも指定しやすいので、サンプルではR1C1形式を指定しています。
Me.FpSpread1_Sheet1.ReferenceStyle = FarPoint.Win.Spread.Model.ReferenceStyle.R1C1
シート全体の調整
サンプル「CZ0909FollowerType1」では、DataSetの内容に応じてセル型や列幅が自動的に決まりましたが、明示的に修飾を行うときには、この自動機能をオフにしないと設定した内容が実行時に有効になりません。
Me.FpSpread1_Sheet1.DataAutoSizeColumns = False Me.FpSpread1_Sheet1.DataAutoCellTypes = False Me.FpSpread1_Sheet1.AutoGenerateColumns = False
- DataAutoSizeColumnsプロパティをFalseにして、列幅自動設定を無効化
- DataAutoCellTypesプロパティをFalseにして、セル型自動設定を無効化
- AutoGenerateColumnsプロパティをFalseにして、DataSetの列から自動的に列を生成しないように設定
列ヘッダのWordWrap抑止
列ヘッダに表示するタイトルが折り返され、読めなくならないように、WordWrapを無効にします。
Dim colHeader As New CellType.ColumnHeaderRenderer colHeader.WordWrap = False Me.FpSpread1_Sheet1.ColumnHeader.DefaultStyle.Renderer = colHeader
列ヘッダの連結
サンプル「CZ0909FollowerType2」では、左から2つ目の列ヘッダ(列指定は「0」から始まるので、ここでの指定値は「1」)から3列を、1つのヘッダに連結するデザインになっています。
列ヘッダの連結にはAddColumnHeaderSpanCellメソッドを使用します。
Me.FpSpread1_Sheet1.AddColumnHeaderSpanCell(0, 1, 1, 3)
高さや幅変更の抑止
行の高さや列の幅を利用者の好みに応じて変更できるアプリも多いですが、業務アプリでは固定化して設計時の状態から変更しないことで、使い勝手の相違が生じないようにする場合があります。そのような場合には、ResizableプロパティをFalseにすると良いでしょう。
Me.FpSpread1_Sheet1.RowHeader.Rows.Default.Resizable = False Me.FpSpread1_Sheet1.ColumnHeader.Columns.Default.Resizable = False
各列の定義
ここまで設定できたら、後は各列を順次定義していくだけになります。
'ID列は非表示にする Me.FpSpread1_Sheet1.Columns.Get(0).DataField = "ID" Me.FpSpread1_Sheet1.Columns.Get(0).Visible = False 'アイコン列の設定を行う Me.FpSpread1_Sheet1.Columns.Get(1).DataField = "ProfileImage" Me.FpSpread1_Sheet1.ColumnHeader.Cells(0, 1).Text = "ユーザ名" Me.FpSpread1_Sheet1.Columns.Get(1).CellType = imageCellType Me.FpSpread1_Sheet1.Columns.Get(1).Width = Me.FpSpread1_Sheet1.Rows.Get(1).Height '名前列の設定を行う Me.FpSpread1_Sheet1.Columns.Get(2).DataField = "Name" Me.FpSpread1_Sheet1.Columns.Get(2).CellType = textCellType 'ID名列の設定を行う Me.FpSpread1_Sheet1.Columns.Get(3).DataField = "ScreenName" Me.FpSpread1_Sheet1.Columns.Get(3).CellType = textCellType 'プロテクション列は非表示にする Me.FpSpread1_Sheet1.Columns.Get(4).DataField = "IsProtected" Me.FpSpread1_Sheet1.Columns.Get(4).Visible = False 'プロテクションだったら○表示する列に計算式を設定する Me.FpSpread1_Sheet1.ColumnHeader.Cells(0, 5).Text = "プロテクト" Me.FpSpread1_Sheet1.Columns.Get(5).CellType = textCellType Me.FpSpread1_Sheet1.Columns.Get(5).Formula = "IF(RC5=""True"",""○"","""")" Me.FpSpread1_Sheet1.Columns.Get(5).HorizontalAlignment = CellHorizontalAlignment.Center 'フォロー列は非表示にする Me.FpSpread1_Sheet1.Columns.Get(6).DataField = "IsFollowing" Me.FpSpread1_Sheet1.Columns.Get(6).Visible = False 'フォローしてたら○表示する列に計算式を設定する Me.FpSpread1_Sheet1.ColumnHeader.Cells(0, 7).Text = "フォロー済" Me.FpSpread1_Sheet1.Columns.Get(7).CellType = textCellType Me.FpSpread1_Sheet1.Columns.Get(7).Formula = "IF(RC[-1]=""True"",""○"","""")" Me.FpSpread1_Sheet1.Columns.Get(7).HorizontalAlignment = CellHorizontalAlignment.Center '最新の発言列の設定を行う Me.FpSpread1_Sheet1.Columns.Get(8).DataField = "StatusText" Me.FpSpread1_Sheet1.ColumnHeader.Cells(0, 8).Text = "最新の発言" Me.FpSpread1_Sheet1.Columns.Get(8).CellType = textCellType
- データを特定するためのID列は、UI的に不要なのでVisibleプロパティをFalseに設定
- アイコン列は縦横を同じにして正方形領域にするため、Columns.Get(1).WIdthプロパティにRows.Get(1).Heightプロパティを設定
- DataSetのIsProtected項目はそのまま表示しないので、VisibleプロパティをFalseに設定
- (3)の列を参照して内容がTrueの時には「○」を表示するように、Fomulaプロパティに指定。Fomulaプロパティに記述されている「RC5」指定は、同一行の5カラム目(指定値は「0」から始まるのでColumns.Get(4)列のこと)を表しています
- IsFollowing項目の内容がTrueの時には「○」を表示するようにFomulaプロパティを設定する箇所では、別の指定方法である「RC[-1]」指定。これは該当列の1つ前の列を表しています