8

グリッドベースのデータウィンドウの単一行のドロップダウンの動的変更を処理する方法はありますか?

例:

NAME    LIKABILITY         PURCHASED IN  COLOUR
(Text)  (DropDown*)        (Text)        (Text)
Bananas [Good]             Hands         Yellow
        [Bad]
        [Bananas are good]

Apples  [Good]             Bags          Red
        [Bad]

上記はグリッドベースのデータウィンドウであり、フィールドNAMEPURCHASED INおよびCOLOURはテキスト フィールドであり、LIKABILITYフィールドはドロップダウン* です。

ドロップダウン* と言うのは、DropDownList (設計時にデータウィンドウ要素内にハードコーディング) または DropDownDW (または DDDW、データウィンドウ内の他の要素に基づく選択ステートメント) を使用して同じ視覚的表現を作成できるためです。

ただし、BananasApplesには2つしかないのに対し、3つのドロップダウンを取得する方法はありません.

の複数の行を入力するとBananas、すべての行に 3 つのドロップダウンが表示されますが、リンゴの行を追加するとすぐに、すべてのドロップダウンが 2 つの選択に戻ります。

この機能を実現するために、次のオプションを試しました。

  1. dw_1.Object.likability.values("Good~tG/Bad~tB/Bananas are good~tDRWHO") NAME の編集時に ue_itemchange で。

    失敗: 現在の行ではなく、LIKABILITY のすべてのインスタンスを編集します。

  2. 行ごとに 1 つのフィルタリングされた選択リストと 1 つのフィルタリングされていない選択リストがあり、名前の選択に基づいて表示されるドロップダウンの複製。

    失敗: グリッドベースのデータウィンドウで可視性/重複する列を設定できません。(ソース)

  3. 表示値をデータベース値として、またはその逆としてハードコードします。、、を表示値とデータベース値として持ち、オプションの処理を G GOOD、 B、 DRWHOからこれらの新しい値に変更します。BADBANANASAREGOOD

    失敗: 3 番目のオプションがすべての行に表示されますが、Apple の行では引き続き選択できますが、これは間違っています。

  4. DDDW は、ドロップダウンのオプションのリストを取得します。NAME の値を使用して、ドロップダウンに必要な選択肢を決定する DDDW を作成します。

    失敗: 現在の行だけでなく、ドロップダウンのすべてのインスタンスを編集します。

  5. DDDW は利用可能なオプションのカウンターを取得し (B の場合は 3、そうでない場合は 2)、DDDW カウンターに基づいて保護/保護解除するドロップダウン列を複製します。

    失敗: dddw 値を自動選択して列に入力し、他の 2 つの列を保護することはできません。いずれにしても醜い解決策です。

PB 10.5 でグリッドベースのデータウィンドウの単一行のドロップダウン列を編集できるようにする解決策を教えてくれる人には、この質問に対する報奨金があります。

4

3 に答える 3

4

したがって、あなたの質問に対する答えはノーです。行ごとに DropDownListBoxes (または DropDownDataWindows) に一意のコンテンツを含めることはできません。

問題の解決策はより複雑です。RowFocusChanged でドロップダウンの内容を変更できますが、コード値が値のリストに含まれなくなった行の表示はどうなるでしょうか。コード値のみが表示されます。赤の代わりに R が表示されている場合、特定の行にいないときは良くありません。したがって、一般的な解決策は、そのデータを表すために、2 つのコントロールを直接重ねて配置することです。) と、他の行にフォーカスがあるときに表示されるもので、コードの表示値を示します。過去に、2 番目のコントロールとして静的テキストまたはダミーの編集スタイル列を使用してこれを行い、最初の列の ItemChanged に値を設定しました。ただし、今朝、2 番目のコントロールがドロップダウン列であり、データ セット内の同じ列を指し、常に値の完全なセットが含まれている場合、スクリプトを作成しなくてもこれを実行できると推測しています。実験 (および、ユーザーが別の行の 2 番目のコントロールをクリックしたときに何が起こるかなど、これを機能させるために必要な他のいくつかの要素) はあなたに任せます。

幸運を、

テリー。


補遺

行ごとに物事がどのように行われるかについて尋ねました。これはあなたにとってクリスマスのようなものになるでしょう (または、他の文化的に適切な大規模な贈り物を受け取る休日)。データウィンドウ ペインタのプロパティ ペインで、右側に等号のボタンがあるすべての要素を確認しますか? これにより、行ごとに評価して属性の値を決定する式を入力できます。フィールドが現在の行である場合にのみ表示されるように式を入力するには?

if (getrow() = currentrow(), 1, 0)

これらの式を実行時に Modify() することもできます。私はあなたにそれを掘り起こすのを手伝ってもらいます。ヘルプには、各データウィンドウ コントロール要素の属性のリストも表示されます。このリストには、各属性が式を取るかどうかが表に含まれています。(等号ボタンはストーリーの 100% ではありません。すべての表現可能な属性を IDE で表現できるわけではありません。)

補足: 式を取得し、それらを習得する方法を学べば、データウィンドウのパワーを得ることができます。

グリッドに関しては、列よりも列を優先するという私の 2 番目の提案は、グリッドでは機能しません。明らかに十分です。それは、ItemChanged スクリプトなどを使用して、列と静的テキストを使用するようにフォールバックするときです。

T.

于 2010-03-31T16:46:18.037 に答える
3

rowfocuschanged イベントでコード テーブルの内容を編集できます。一度に展開できるドロップダウンは 1 つだけなので、必要なユーザー エクスペリエンスを提供する必要があります。

残念ながら、たとえばフォントサイズのように、式に基づいてコードテーブルを変更することはできません。

ドロップダウンをさらに制御する必要がある場合は、DropDownDW にすることができます。2 番目の列から値を渡して、RowFocusChanged で再取得できます。

于 2010-03-31T15:27:58.347 に答える
0

表示値を保持するのに十分な大きさのダミー列を選択に作成します。表示値とデータ値の両方に表示値列を使用して、この列で DropDownDataWindow を使用します。データウィンドウを取得するときは、正しい値を検索してこの列に入力します (ヒント: 実際の非表示の列で DDDW を使用し、LookUpDisplay() を呼び出します。これを行うときは、フィルタがクリアされていることを確認してください)。次に、ResetUpdate() を呼び出します。現在の行の値に従って、必要に応じてドロップダウンの値をフィルタリングします。ItemChanged イベントで、ダミー列の値が変更された場合、DDDW からコードを取得し (列にフォーカスがある場合、DDDW は正しい行になります)、非表示の列の値を変更してから、ダミー列のステータスを NotModified に変更します。 . ダミー列には表示値が含まれているため、DDDW のフィルタリングは無効です。コードを表示させないでください。新しい行と更新は自動的に処理されます。

于 2010-04-08T13:49:31.877 に答える