Curl Global Community
レコードグリッド値コピーペースト時の検知イベント - Printable Version

+- Curl Global Community (http://communities.curl.com)
+-- Forum: Discussions (http://communities.curl.com/forumdisplay.php?fid=1)
+--- Forum: General Curl questions (http://communities.curl.com/forumdisplay.php?fid=2)
+--- Thread: レコードグリッド値コピーペースト時の検知イベント (/showthread.php?tid=1071)



レコードグリッド値コピーペースト時の検知イベント - e.kou - 04-17-2014

レコードグリッドの実装で「RecordModified」
を使用して実装を行いましたが、
データをコピーペーストした場合、レコードが編集されたという
認識ができなく、検知するために「RecordsBulkChanges」を使用しようとしてます。
「RecordsBulkChanges」の使用方法がよくわかりません。
また、他の実装方法で解決できたりしますか。

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




RE: レコードグリッド値コピーペースト時の検知イベント - dyoshida - 04-17-2014

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

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

入力時のチェック等でしょうか?



RE: レコードグリッド値コピーペースト時の検知イベント - umemura - 04-18-2014

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

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




RE: レコードグリッド値コピーペースト時の検知イベント - e.kou - 04-21-2014

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

>umemura様

ありがとうございます。
これは、キーボートからctrl+vとかでもイベント発生しますか?


RE: レコードグリッド値コピーペースト時の検知イベント - dyoshida - 04-21-2014

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} &"レコード更新されています"}
                }
            }
        }
    }    
}