API version 4

- ‐

KeyBreak

CSV読み込みでkeyBreak設定されたセルの内容が前行と異なる場合に発生します。

CSVデータのロードで、列に対応したHeaderFieldオブジェクトのkeyBreakPriority、keyBreakTimingプロパティに値が指定されている場合、現在注目している配列データの前後で値が異なる場合にKeyBreakイベントが発生します。

引数のイベントオブジェクトには以下のプロパティが追加されています。

名前

説明

integer

currentIndex

対象セルの行番号(書き換え可能)

integer

row

対象セルの行番号(0始まり)

integer

column

対象セルの列番号(0始まり)

KeyBrak発生タイミング

keyBreakPriorityの設定によって、イベントの発生するタイミングが異なります。

keyBreakPriority=KEYBREAK_BEFOREの場合
現在注目している行を配列要素に代入する前に直前の行と比較します。比較した結果値が異なる場合、直前の行のキーブレィクと判断されます。
keyBreakPriority=KEYBREAK_AFTERの場合
現在注目している行を配列要素に代入を行ってから直前の行と比較します。比較した結果値が異なる場合、現在注目している行のキーブレィクと判断されます。
同時に複数の項目でキーブレィクと判断された場合、keyBreakPriorityプロパティの最も大きい列を対象としてKeyBreakイベントが発生します。keyBreakPriorityプロパティの値が同じ場合には、最も左側の列にKeyBreakイベントが発生します。

例1

item1
keyBreakPriority=1
keyBreakTiming=KEYBREAK_BEFORE
item2
keyBreakPriority=2
keyBreakTiming=KEYBREAK_BEFORE
item3
keyBreakPriority=3
keyBreakTiming=KEYBREAK_BEFORE
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
keyBreakPriority=1
keyBreakTiming=KEYBREAK_AFTER
item2
keyBreakPriority=2
keyBreakTiming=KEYBREAK_AFTER
item3
keyBreakPriority=3
keyBreakTiming=KEYBREAK_AFTER
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に新しい値を代入することにより、後続のデータの代入位置を変更することができます。

例3: 挿入行を1行進める例

イベントハンドラ内部でcurrentIndexを変更したり、CSVデータの代入対象となる配列オブジェクトの変更操作を行った場合、結果的に後続のCSVデータの代入でキーブレーク条件となるようなデータの並びとなることがありますが、この操作によりKeyBreakイベントは発生することはありません。キーブレイクの判断は常に元のCSVデータの値により行われます。

Function OnKeyBreak(e) {
    rec.insert(1);
    rec[e.currentIndex+1].item2 = "合計";
    rec[e.currentIndex+1].item3 = goukei;
    e.CurrentIndex++;
}
item1
keyBreakPriority=1
keyBreakTiming=KEYBREAK_BEFORE
item2
keyBreakPriority=0
keyBreakTiming=KEYBREAK_NONE
item3
keyBreakPriority=0
keyBreakTiming=KEYBREAK_NONE
1行目 "AAA" "XXX" 111
2行目 "AAA" "YYY" 222
3行目 "合計" 333
4行目 "BBB" "ZZZ" 555
この例の場合、item1の2行目で発生するKeyBreakイベントにより、上記の例に示すイベントハンドラが実行され、3行目が作成されます。後続のCSVデータにより4行目が作成され、結果的にitem1の3行目と4行目でデータが変りますが、この変化により再びKeyBreakイベントが発生することはありません。

関連項目

HeaderField.keyBreakPriorityHeaderField.keyBreakTiming プロパティ

PrintRegion.<<PrintRecord.<< オペレータ



使用例 CRSダウンロード

Form formPrintRecord_KeyBreak {
   x = 0; y = 0; width = 800; height = 600;
   PrintForm printform1 {
           x = 10; y = 72; width = 256; height = 362;
           TextField textfield1 {
                   x = 16; y = 8; width = 224; height = 16;
                   value="keyBreakTiming = KEYBREAK_BEFORE";
           }
           PrintRegion printregion1 {
                   x = 24; y = 24; width = 216; height = 88;
                   PrintHeader printheader1 {
                           height = 16;
                           HeaderField headerfield1 { width = 70; keyBreakPriority=1; keyBreakTiming=KEYBREAK_BEFORE; }
                           HeaderField headerfield2 { width = 70; keyBreakPriority=2; keyBreakTiming=KEYBREAK_BEFORE; }
                           HeaderField headerfield3 { width = 70; keyBreakPriority=3; keyBreakTiming=KEYBREAK_BEFORE; }
                   }
                   PrintRecord rec[] {
                           height = 16;
                           TextField item[3];
                   }
                   function onKeyBreak(e) {
                           rec[e.row].item[e.column].bgColor = Color.Red;
                   }
                   rec << CSV(Item1,Item2,Item3) {
AAA,XXX,111
AAA,YYY,111
BBB,ZZZ,222
BBB,ZZZ,222
                   };
           }
           TextField textfield2 {
                   x = 16; y = 120; width = 224; height = 16;
                   value="keyBreakTiming = KEYBREAK_AFTER";
           }
           PrintRegion printregion2 {
                   x = 24; y = 136; width = 216; height = 88;
                   PrintHeader printheader1 {
                           height = 16;
                           HeaderField headerfield1 { width = 70; keyBreakPriority=1; keyBreakTiming=KEYBREAK_AFTER; }
                           HeaderField headerfield2 { width = 70; keyBreakPriority=2; keyBreakTiming=KEYBREAK_AFTER; }
                           HeaderField headerfield3 { width = 70; keyBreakPriority=3; keyBreakTiming=KEYBREAK_AFTER; }
                   }
                   PrintRecord rec[] {
                           height = 16;
                           TextField item[3];
                   }
                   function onKeyBreak(e) {
                           rec[e.row].item[e.column].bgColor = Color.Red;
                   }
                   rec << CSV(Item1,Item2,Item3) {
AAA,XXX,111
AAA,YYY,111
BBB,ZZZ,222
BBB,ZZZ,222
                   };
           }
           TextField textfield3 {
                   x = 16; y = 232; width = 224; height = 16;
                   value="modify currentIndex";
           }
           PrintRegion printregion3 {
                   x = 24;
                   y = 248;
                   width = 216;
                   height = 108;
                   PrintHeader printheader1 {
                           height = 16;
                           HeaderField headerfield1 { width = 70; keyBreakPriority=1; keyBreakTiming=KEYBREAK_BEFORE; }
                           HeaderField headerfield2 { width = 70; keyBreakPriority=0; keyBreakTiming=KEYBREAK_NONE; }
                           HeaderField headerfield3 { width = 70; keyBreakPriority=0; keyBreakTiming=KEYBREAK_NONE; }
                   }
                   PrintRecord rec[] {
                           height = 16;
                           TextField item1;
                           TextField item2;
                           TextField item3;
                   }
                   Number goukeiPos = 0;
                   function onKeyBreak(e) {
                           var goukei = 0;
                           for (var i = goukeiPos; i <= e.currentIndex; i++) {
                                   goukei += rec[i].item3;
                           }
                           goukeiPos = e.currentIndex+2;

                           rec.insert(1);
                           rec[e.currentIndex+1].item2 = "合計";
                           rec[e.currentIndex+1].item3 = goukei;
                           e.currentIndex++;
                   }

                   this << CSV(Item1,Item2,Item3) {
AAA,XXX,111
AAA,YYY,222
BBB,ZZZ,555
                   };

           }
   }
   Button buttonPrint {
           x = 8; y = 8; width = 56; height = 24; title = "印刷";
           function onTouch(e) {
                   ^.printpreview1.clearPages();
                   ^.printpreview1.document = ^.printform1.printDocument();
           }
   }
   PrintPreview printpreview1 {
           x = 272; y = 8; width = 488; height = 472;
   }
}