Curl Global Community

Full Version: レコードグリッド値コピーペースト時の検知イベント
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
レコードグリッドの実装で「RecordModified」
を使用して実装を行いましたが、
データをコピーペーストした場合、レコードが編集されたという
認識ができなく、検知するために「RecordsBulkChanges」を使用しようとしてます。
「RecordsBulkChanges」の使用方法がよくわかりません。
また、他の実装方法で解決できたりしますか。

誰かご存じな方がいらっしいましたら
ご指導ください。

RecordsBulkChangesはCurlドキュメントに「RecordSet の複数レコードが大幅に再構成されたことを示します。」
と書かれているそのままで、「RecordSet のレコードが大量に変更されました、なにが変更されたか詳細は略」
ということなのではないかと。

他の実装方法については、RecordModifiedイベントを受けて何をしようとしていたかにもよりそうですが、

入力時のチェック等でしょうか?
やりたい処理にもよると思いますが、「貼り付け時」になにかをする、という意味では、
RecordGridPaste クラスを利用するのがよいと思います。

http://communities.curl.com/showthread.php?tid=965

>dyoshida様
ありがとうございます。
>入力時のチェック等でしょうか?
貼り付けた値と元の値を比較して差異があるときに画面を戻るボタンを押下した場合、
未確定のデータがあるが、廃棄しますかというメッセージを表示したです。

>umemura様

ありがとうございます。
これは、キーボートからctrl+vとかでもイベント発生しますか?
e.kouさん
カスタムセルをつくってupdate-dataで入力値をチェックする方法でもできそうですが、
未確定のデータがあるか否かの判定でしたら、最後にRecordSetを確認するというのは
どうでしょうか?

更新の前後の値をチェックして更新されていても同じ値なら除外するようにしてみました。
Code:
{let people-rs:RecordSet =
    {RecordSet
        {RecordFields
            {RecordField "First", domain = String},
            {RecordField "Last", domain = String},
            {RecordField "Age", domain = int}
        },
        {RecordData First = "John", Last = "Smith", Age = 25},
        {RecordData First = "Jane", Last = "Smith", Age = 29},
        {RecordData First = "Jane", Last = "Jones", Age = 28}
    }
}

|| 更新前後で値が変わっているレコードを抽出するためのFilter用プロシージャ
{define-proc {modify-field-val-filter-proc r:Record}:bool
    || ペンディング中の更新があるレコード中のフィールド値をチェック
    {if r.pending-update? then
        {if-non-null rs = r.record-set then
            {for f in rs.fields do
                {if {r.field-pending-update? f.name} then
                    || 更新前と更新後の値が異なっていれば抽出対象
                    def org-val = {r.get f.name, pending? = false}
                    def mod-val = {r.get f.name, pending? = true}
                    {if org-val != mod-val then
                        {return true}
                    }
                }
            }
        }
    }
    || 更新されていない、または更新前後で値が変わっていないレコードは抽出対象外
    {return false}
}

{value
    {VBox
        {RecordGrid
            record-source = people-rs,
            height = 3cm
        },
        {CommandButton
            label = "更新チェック",
            {on Action do
                def ra =
                    {people-rs.select
                        filter =
                            {RecordFilter
                                modify-field-val-filter-proc
                            }
                    }
                {if ra.size > 0 then
                    {popup-message {String ra.size} &"レコード更新されています"}
                }
            }
        }
    }    
}