About SPREAD for Windows Forms 5.0J

ブログ「sanryuブログ」のカテゴリ「SPREAD for Windows Forms 5.0J」に投稿されたすべてのエントリーのアーカイブのページです。過去のものから新しいものへ順番に並んでいます。

前のカテゴリはsanryuです。

次のカテゴリはVB.NETです。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。

SPREAD for Windows Forms 5.0J

Powered by
Movable Type 3.35

メイン

SPREAD for Windows Forms 5.0J アーカイブ

2011年03月28日

SPREAD for Windows Forms 5.0J を使って

ユーザー用件でEXCEL見たいな操作をしたいという要望がありました。

システム開発までに期間がなく、
WEBサイトでのカタログ値での機能確認と
トライアル版での簡単な動作確認後に、
システムで使用するグリッド系コントロールとして、
SPREAD for Windows Forms 5.0J を採用しました。

主に一覧画面としてDataTableをバインドして使用しました。

使ってみた感想ですが、

スプレッド自体のバグにより、2度のバージョンアップを強いられ・・・・。
バージョンアップ時の仕様変更により、予定通り既存コードが動作しない・・・・。

ナレッジベースにある対策方法は、
力技で対応するようなものばかりでソースコードが汚くなる・・・・・。

見た目はEXCELっぽいけど、使ってみるとEXCELっぽくない・・・。
EXCELっぽくするのに結局コーディングする・・・。
標準コントロールを自作で拡張した方が良かった・・・。

今回の開発者にSPREAD経験者がいなかったこともあるかと
思いますが、開発にかなりの工数を要しました。

サードパティー製のコントロールを使用する場合には、
システムの要件にあうかどうか、開発者に経験者がいるかなども
考慮して選択する必要があると感じました。

2011年04月02日

[SPREAD]列ヘッダをクリック(ダブルクリック)時に例外が発生

[現象]
シートに表示がない状態で列ヘッダをクリック(ダブルクリック)した時に
「行インデックスが無効です」例外が発生する。

[原因]
CellClick、CellDoubleClickで処理している場合、
引数 e.Row = 0 と設定されて、シートに行がない場合でも
1行目を処理の対象行としてしまうため。

[対応]
列ヘッダだった場合、処理をキャンセルする。

If e.ColumnHeader = True Then
    e.Cancel = True
End If
'列ヘッダクリック(ダブルクリック)以外の処理

[SPREAD]デザイナの設定が優先される

[現象]
SPREADデザイナでセルのプロパティを設定し
コーディングでもセルのプロパティを設定した場合、
コーディングしたセルの設定が反映されない時がある。

[原因]
コーディングでしたセルのプロパティ設定は、
新たに表示した行にのみ適用される。

[例]
(1)デザイナで1行表示してセルの設定をする。
(2)コーディングで列のプロパティ設定をする。
(3)スプレッドにデータバインド(5行)する。
(4)1行目は、デザイナの設定、2行目はコーディングで設定となる。

[対応]
コーディングして列のプロパティ設定をする場合は、
RowCountを0に設定後にプロパティ設定をする。

'行を0にする。
FpSpread1.ActiveSheet.RowCount=0
'これ以降でプロパティを設定する。


[SPREAD]チェックボックス、コンボボックスセルタイプに不正な値が貼り付けできる

[現象]
CheckBoxCellTypeに0,1(true,false)以外の値、
ComboBoxCellTypeのItemsに設定した以外の値の貼り付け(ctrl + v)ができる。

[対応1]
画面の仕様で貼り付けする必要がなければ、
スプレッドで貼り付けを禁止する。

[対応2]
画面の仕様でCheckBoxCellType、ComboBoxCellType
貼り付けする必要がなければ、ClipboardPastingイベントで
e.Handled=Trueを指定してキャンセルする。

[対応3]
画面の仕様で貼り付けしなくてはいけない場合は、
ClipboardPastingイベントでペーストされた値を検証する。

いずれにせよ、スプレッドでコピー&ペースト、カット&ペーストが
できるか仕様を決める必要がある。

2011年04月03日

[SPREAD]DataTableに編集結果が反映されない

[現象]
セルの編集してもDataRowのRowStateが更新されていない。

[原因]
違うバージョンのスプレッドだが、ナレッジベースに
アクティブセルが他の行に移動したタイミングで更新されるからとある。
しかし、明示的に行を移動してもDataRowのRowStateが
更新されていない場合がある。

[対応]
ナレッジベースの通りにFpSpreadクラスのChangeイベントで
EndEditメソッドを明示的に実行する。

    dt.Rows(e.Row).EndEdit()

[補足]
この現象は、DataTableをバインドすると結構遭遇すると思うので、
現象が発生する前に対応しておいた方がいい。

[SPREAD]イベントによてGetTextとCellsで取得する値が違う

[現象]
ValidatingイベントでGetText(row,col)は変更前の値を取得し、
Cells(row,col).Textは、変更後の値を取得する。

[対応]
この仕様を理解して使用する。
そうしないと意図した結果が得られない。

似た記事あった。
Spread .Net でGetTextとCellsプロパティの動作

2011年04月08日

[SPREAD]DateTimeCellTypeの日付書式の設定

DateTimeCellTypeの日付書式の設定方法

Dim dtCellType As New Spread.CellType.DateTimeCellType
dtCellType.DateTimeFormat = FarPoint.Win.Spread.CellType.DateTimeFormat.UserDefined
 dtCellType.UserDefinedFormat = "yyyy/MM/dd HH:mm:ss"

_sheet.Columns(0).CellType = dtCellType

2011年04月20日

[SPREAD]シート初期状態でコピー、切り取り、貼り付けショートカットキー動作

シート初期状態でコピー、切り取り、貼り付け処理は
次のように動作した。(間違ってたらすいません。)

(1)行、列のヘッダラベルのコピー、切り取り、貼り付けができる。
(2)列を選択してCheckBoxCellType、ComboBoxCellType等のコピー、切り取りができる。
  ただし、セルを選択したとき場合にはできない。
(3)書式(色)のコピー、切り取り、貼り付けができる。
(4)ReadOnlyに設定したTextCellTypeに貼り付けができる。

つまり、初期状態では、ユーザーのコピー、切り取り、貼り付け操作で
自由にシートの外観を変更できてしまう。
なので、スプレッドを初期化するときにいつも画面仕様にあわせ
次のようなコードを書くようになる。

Imports FarPoint.Win.Spread

ClipboardOptionsを指定して、ヘッダのコピペ、カトペを制御

FpSpread1.ClipboardOptions = ClipboardOptions.NoHeaders

'値のみコピペ、カトペできるようにキーマップを設定

Dim im As New InputMap
With FpSpread1
    ' カット[Ctrl]+[X]の入力マップを変更します
    im = .GetInputMap(InputMapMode.WhenFocused) 
    im.Put(New Keystroke(Keys.X, Keys.Control), SpreadActions.ClipboardCutDataOnly)
    ' ペースト[Ctrl]+[V]の入力マップを変更します 
    im = .GetInputMap(InputMapMode.WhenFocused) 
    im.Put(New Keystroke(Keys.V, Keys.Control), SpreadActions.ClipboardPasteValues) 
    ' カット[Shift]+[Delete]の入力マップを変更します 
    im = .GetInputMap(InputMapMode.WhenFocused) 
    im.Put(New Keystroke(Keys.Delete, Keys.Shift), SpreadActions.ClipboardCutDataOnly) 
    ' ペースト[Shift]+[Insert]の入力マップを変更します 
    im = .GetInputMap(InputMapMode.WhenFocused) 
    im.Put(New Keystroke(Keys.Insert, Keys.Shift), SpreadActions.ClipboardPasteValues)
End With

コピーペストを無効にするようにキーマップを設定

Dim im As New InputMap
With FpSpread1
    ' カット[Ctrl]+[X]の入力マップを変更します
    im = .GetInputMap(InputMapMode.WhenFocused)
    im.Put(New Keystroke(Keys.X, Keys.Control), SpreadActions.None)
    ' ペースト[Ctrl]+[V]の入力マップを変更します
    im = .GetInputMap(InputMapMode.WhenFocused)
    im.Put(New Keystroke(Keys.V, Keys.Control), SpreadActions.None)
    ' カット[Shift]+[Delete]の入力マップを変更します
    im = .GetInputMap(InputMapMode.WhenFocused)
    im.Put(New Keystroke(Keys.Delete, Keys.Shift), SpreadActions.None)
    ' ペースト[Shift]+[Insert]の入力マップを変更します
    im = .GetInputMap(InputMapMode.WhenFocused)
    im.Put(New Keystroke(Keys.Insert, Keys.Shift), SpreadActions.None)
End With

今回は、EXCELなどから貼り付けした時の動作や
バインドしている時の動作は割愛します。

また、詳細な仕様に対応するには、
ClipboardPastingイベントで制御する必要があります。


2011年06月08日

[SPREAD]HyperLinkCellTypeのリンクが表示できない。

[現象]
HyperLinkCellTypeのセルをクリックしてもブラウザが起動しない。

[原因]
スプレッドにバインドしたDataTableのDataColumnがReadOnly=Trueの為。

[対応]
バインド前にDataColumnのReadOnlyをFalseに設定。

[その他]
前に、TextCellTypeが編集できなくてはっまった。
原因はReadOnly=Trueだった。

2011年10月13日

[SPREAD][テキストセル]複数行表示と改行コードの動作

環境:VB.NET 2005、SPREAD for Windows Forms 5.0J

[確認]
MultilineをTrueに設定したテキストセルに、CRLF、CR、LFを含んだ値を設定する。

Dim txtMultiLineCellType As New FarPoint.Win.Spread.CellType.TextCellType
txtMultiLineCellType.Multiline = True
設定する値 表示結果
"あ"+CR+LF+"い" 改行される
"あ"+CR+"い" 改行されない
"あ"+LF+"い" 改行される

[結果]
CRLF、LFは改行されて表示される。

2011年11月
Sun Mon Tue Wed Thu Fri Sat
    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 26
27 28 29 30