私は従来のPowerBuilderアプリケーションで作業していますが、PowerBuilder 12にアップグレードしましたが、引き続き「従来の」IDEを使用しています。列のPowerBuilder式が異常な動作を制御します
フリーフォームのデータウィンドウとデータを共有するグリッドデータウィンドウがあり、グリッド内の現在の行が変更されたときにフリーフォームが同じ行にスクロールすることを保証する祖先を継承しています。
rowfocuschangedでDataWindow.Modifyを使用する代わりに、フリーフォームの列コントロールのProtectおよびBackground.Colorプロパティで式を使用して、有効/無効をシミュレートすることを開始しました。
これまで私はこのアプローチを楽しんできました。私の表現の中でデータベースにアクセスしていないので、明らかにパフォーマンスが低下することはありません。
問題は、私が苦労してピンチダウンしているという理由で、これらの表現が前述の行同期機能を失敗させることがあります。
私のテストシナリオでは、グリッドに2つの行があります。行2を選択しても、フリーフォームが行2にスクロールすることはありません。実際には、ScrollToRowが実際に正常に呼び出されていることがデバッグによって明らかになっています。次に、行1をもう一度選択します。フリーフォームが最初に行1を残していないので、これが機能するかどうかはわかりません。その後、2行目を2回目に選択すると、フリーフォームは2行目までスクロールして正しく動作します。
特定の式の中でコードを移動することで別のウィンドウにこの問題を修正しましたが、これがなぜ機能したのかわかりません。変更は式の結果に影響しませんでした。残念ながら、私は現在のウィンドウでそれを固定するような簡単な時間を持っていません。これまで、ある特定のDateTime EditMask列からProtect式を削除するか、先行するDateTime EditMask列のTabOrderを正の値に設定することで、機能が失われたときに問題を解決できます。最初の列は保護式を必要とし、2番目の列は編集不可能でなければなりません。私は2番目の列に正のTabOrderを与えようとしましたが、保護式を1に設定しても動作しませんでした。
私は髪を引き裂き、PowerBuilderを激しく憎んでいます!問題が何であるか、そしてそれを避けながら列表現をどのように引き続き利用できるかについて誰かが分かっていれば、感謝します。私は、rowfocuschangedからModifyを使ってこのようなものを操作することに戻って嫌です。
ScrollToRow()からの戻り値を確認しましたか?私は、あなたのコントロールがDWが既に存在するとは思わないようにDescribe( "datawindow.firstrowonpage")とlastrowonpageをチェックします。他のコードが実行されていないことを確認するためのPBDEBUGトレース(たとえば、戻りコードを防止したRowFocusChanging)が考えられます(デバッガは侵入型で、イベントシーケンスを変更することができます)。ちょうどブレーンストーミング、ScrollToRow()の前に保護されていない列にSetColumn()を試してください。 (ここにはどこにでもSetRow()がありますか?)12.5はEnabled属性を与えますので、メソッドをモジュール化して互換性を保つようにしてください。 – Terry
あなたの迅速な返信をありがとう! dw_grid.rowfocuschangedには、dw_freeform.ScrollToRow(currentrow)を実行するコードがあります。戻り値を取得するコードを追加しました。問題が発生している場合は1を返しますが、currentrowは2です。私はまた、dw_freeform.rowfocuschangingのブレークポイントがヒットしていないことに気付きました。私はあなたの他の提案を試みるつもりです。 – Mike
だから、dw_grid.retrieveendでは、私はそれが常に保護されていない、それが働いている唯一の列にdw_freeform.SetColumnをしました、ありがとうございます!私は好奇心が強いです、あなたはそれをどう思ったのですか?表現が評価される時期と列が設定される時期との間には何らかの関係がありますか? – Mike