みなさん、こんにちは!
このブログは、「PowerBuilder ってなに?」、「PowerBuilder って何ができるの?」という疑問に、IT 用語の解説もしつつ、簡単に分かりやすくお答えすることをモットーにしています。
気になる方はぜひ続きを見てみてくださいね。
ねこぴ
PowerBuilder レクチャーのキャラクター。
(猫に見えるが)PowerBuilder の先生。
ゆる~く楽しく!がモットー。
ちまき
PowerBuilder をこれから学びたい開発初心者。
ITの知識はちょっとあるようなないようなレベル。
YouTube では、この PowerBuilder 入門シリーズの動画版を公開しています!
動画版では、実際の PowerBuilder の画面操作をしているところを確認しながら進められるので、より理解力が深まります。
あわせてぜひご視聴ください!
(しゃーく、しゃーく)
ASMR って難しいにゃー。
ねこぴ先生…ASMR は食べる音を重視しているのであって、たくさん食べたいのは先生のただの願望ですよね。
私には何でもお見通しです。
にゃ・・・・・!
図星過ぎて何も言えないにゃ。
(食べ放題にいけええ・・!)
前回はデータウィンドウ内の新規行追加の回でしたよね。
そうだにゃ。
今回は「行削除」について解説していくにゃ。
新しい関数も登場するのでうはうはしててにゃ。
PowerBuilder って何なの?と思ったあなた!
PowerBuilder 入門シリーズの第 1 弾ブログをぜひご覧ください(^◇^)
さて、テーブル内には 60 行分の個人データが登録されています。
61 行目に新しい行を追加するにはどういったメソッドを使用するのかコードを見ていきましょう(`・ω・´)ゞ「w_adr_app」のウィンドウオブジェクトを開き、「行追加」のコマンドボタンを右クリックでスクリプトを開きます。
スクリプトビューが表示されるのでコードを記述していきます。
同様のアプリを作成したい場合は、画面と同じコードを記述してみてください。
まずはどんなコードなのかを示すため、「/*選択行の削除*/」と記載してあります。
そして Integer 型の li_new_row 変数を宣言します。
さて、まずは「削除後の行番号」の値を取得します。
現行行番号を取得するには GetRow 関数 を使用します。
GetRow 関数とは?
現行行番号を取得する関数のこと。
書き方 : コントロール名.GetRow()
戻り値は正常時に現行行番号、エラー時に -1 を返す。引数はなし。
コード内では dw_list.GetRow() -1 となっています。
dw_list はデータウィンドウコントロールを指していて、ウィンドウの上に配置したデータ表示部分 (データウィンドウ) を示しています。
GetRow で現行行を取得した後、マイナス 1 をすることで削除した行の前の行を選択することができますよね(*‘ω‘ *)
li_new_row には行を削除後の行番号が入っています。
IF 文には li_new_row = 0 であれば li_new_row = 1 にして終了、というコードが書かれています。
これは削除後の行が 0 だった場合は、1 行目が削除されているという意味になりますが、そうならないように 1 行目は保持するという意味があります。
この時点で削除後の行番号を取得できました。
来ました!本日のメインイベント\(^o^)/(※イベントではない)
行を削除する関数です。
それには DeleteRow メソッドを使用します。
DeleteRow メソッドとは?
選択行を削除するメソッドのこと。
書き方 : コントロール名.DeleteRow(row)
戻り値は正常時に 1、エラー時に -1 を返す。row には削除する行番号が入る。
0 を指定すると現行行が削除される。※省略は不可。
最後にスクロールと現行行の設定です。
こちらは前回のブログで学んでいただけたと思いますが、再度説明します。
では ScrollToRow メソッドを見ていきましょう。
ScrollToRow メソッドとは?
削除後の行にスクロールするメソッドのこと。
書き方 : コントロール名.ScrollToRow(row)
戻り値は正常時にスクロール先の行番号、エラー時に -1 を返す。row は省略不可。
つまり削除後の行へスクロールしてくれる関数を発動させるわけですね。
li_new_row の変数には削除後の行が入るはずですので、その部分までスクロールします。
そして、 dw_list.SetRow(li_new_row) ですがこれは現行行を設定するメソッドです。
現行行とは、データウィンドウ上で保持している行番号を入手するためのものです。
SetRow メソッドとは?
現行行を設定するメソッドのこと。
書き方 : コントロール名.SetRow(row)
戻り値は正常時に 1、エラー時に -1 を返す。row は省略不可。
最後に SelectRow メソッドです!
これは指定の行をハイライト表示するメソッドになります。
SelectRow 関数とは?
指定の行をハイライト表示する関数のこと。
書き方 : コントロール名.SelectRow(row, select)
戻り値は正常時に 1、エラー時に -1 を返す。row と select はそれぞれ省略不可。
row はハイライト表示をする行数を指します。
0 を指定すると、すべての行を選択するという意味になります。
また、select に関しては行を選択するか選択を解除するかを決めることができます。
select には TRUE と FALSE というどちらかの値を設定しますが、TRUE と FALSE というそれぞれ選択するか選択を解除するかを決める要素となります。
つまり、dw_list.SelectRow(0, FALSE) は全ての行の選択を解除し、dw_list.SelectRow(li_new_row, TRUE) というのは行削除後の行番号のみを選択すると解釈することができます。
ではアプリを実行してみましょう。
行削除のボタンを押して一番最後の 61 行目を削除したいと思います。(どきどき)
あ、61 行目の情報は前回の行追加の回のあとこちらで追加したものです。
では 61 行目をクリックして、と・・・。削除ボタンをクリック!
あれ・・・( ˘•ω•˘ )
なぜか 1 番上の 1 行目が消えましたね笑\(^o^)/
あれ?なんでですかね?
最後の行を削除したいだけなのに~!
今は選択行の決定するためのコードが記載されていないからだにゃ。
つまり、現行の行が 1 行目のままだったということにゃ。
ということでデータウィンドウに「今選択されている行はここですよ」と教えてあげなくてはいけないんですね。
一旦アプリを閉じるボタンで閉じましょう。
「今選択されている行はここですよ」と設定するので・・・
データウィンドウ dw_list の「clicked」イベントを開いてみましょうか。
そして以下のコードを書いてみます。
「This」とはデータウィンドウのことですね。
今回のように名前を設定するのではなく「This 代名詞」を使用することで、仮にデータウィンドウの名前が変更されても、名前を変更しなくても済むということになります。
このように代名詞を使用することはよくあります。
SetRow メソッドが出てきました。
SetRow の引数には row がセットされています。
これは見た目の選択行と現行行は必ずしも一致せず、都度変わるため現行行とする行数を row として表しています。
また SelectRow に関しては一旦すべての行の選択を解除した後、現行行をハイライトするというコードになっています。
コードの記述が完了したらあらためて 61 行目を削除してみましょう。
・・・おお!
消えましたね!!!(^◇^)
・行削除は DeleteRow メソッドを使用してみて!
・ハイライト表示を設定すると現行行を削除できる
こちらのブログシリーズ次回の記事はこちら↓↓