印刷対象の配列オブジェクトへのCSVデータのロードで、列に対応したオブジェクトのBreakKeyプロパティ(SpreadColumn.BreakKeyプロパティなど)に値が指定されている場合、現在注目している配列データの前後でキーブレィクしたときに以下のルールでKeyBreakイベントが発生します。BreakKeyプロパティを持たないオブジェクトや、印刷対象とならないクラスではKeyBreakイベントは発生しません。
BreakKeyプロパティの値がプラスの場合
現在注目している行を配列要素に代入する前に直前の行と比較します。比較した結果値が異なる場合、直前の行のキーブレィクと判断されます。
BreakKeyプロパティの値がマイナスの場合
現在注目している行を配列要素に代入を行ってから直前の行と比較します。比較した結果値が異なる場合、現在注目している行のキーブレィクと判断されます。
同時に複数の項目でキーブレィクと判断された場合、BreakKeyプロパティの絶対値が最も大きいオブジェクトだけにKeyBreakイベントが発生します。BreakKeyプロパティの値が同じ場合には、先に定義されているオブジェクト(Spreadクラスでは最も左側の列)にKeyBreakイベントが発生します。
例1
|
Item1 BreakKey=1 |
Item2 BreakKey=2 |
Item3 BreakKey=3 |
1行目 |
"AAA" |
"XXX" |
"111" |
2行目 |
"AAA" |
"YYY" |
"111" |
3行目 |
"BBB" |
"ZZZ" |
"222" |
4行目 |
"BBB" |
"ZZZ" |
"222" |
この例の場合、以下のようにKeyBreakイベントが発生します。
1行目のデータを配列にセットした後に、Item2[0]にKeyBreakイベントが発生します。
2行目のデータを配列にセットした後に、Item3[1]にKeyBreakイベントが発生します。
例2
|
Item1 BreakKey= -1 |
Item2 BreakKey= -2 |
Item3 BreakKey= -3 |
1行目 |
"AAA" |
"XXX" |
"111" |
2行目 |
"AAA" |
"YYY" |
"111" |
3行目 |
"BBB" |
"ZZZ" |
"222" |
4行目 |
"BBB" |
"ZZZ" |
"222" |
この例の場合、以下のようにKeyBreakイベントが発生します。
2行目のデータを配列にセットした後、Item2[1]にKeyBreakイベントが発生します。
3行目のデータを配列にセットした後、Item3[2] にKeyBreakイベントが発生します。
KeyBreakイベントにより起動されたイベントハンドラ内では、イベントハンドラに渡されるイベントオブジェクトのCurrentIndexによりブレィクした行のインデックス値を得ることができます。CurrentIndexに新しい値を代入することにより、後続のデータの代入位置を変更することができます。
挿入行を1行進める例
Function OnKeyBreak(e) {
e.CurrentIndex++;
}
イベントハンドラ内部でCurrentIndexを変更したり、CSVデータの代入対象となる配列オブジェクトの変更操作を行った場合、結果的に後続のCSVデータの代入でキーブレーク条件となるようなデータの並びとなることがありますが、この操作によりKeyBreakイベントは発生することはありません。キーブレイクの判断は常に元のCSVデータの値により行われます。
例3
Function OnKeyBreak(e) {
rec.insert(1);
rec[e.CurrentIndex+1].item1 = "合計";
rec[e.CurrentIndex+1].item2 = goukei;
e.CurrentIndex++;
}
|
Item1 BreakKey=1 |
Item2 BreakKey=0 |
Item3 BreakKey= 0 |
1行目 |
"AAA" |
"XXX" |
111 |
2行目 |
"AAA" |
"YYY" |
222 |
3行目 |
|
"合計" |
333 |
4行目 |
"BBB" |
"ZZZ" |
555 |
この例の場合、item1の2行目で発生するKeyBreakイベントにより、上記の例に示すイベントハンドラが実行され、3行目が作成されます。後続のCSVデータにより4行目が作成され、結果的にitem1の3行目と4行目でデータが変りますが、この変化により再びKeyBreakイベントが発生することはありません。
では発生しません