Thread Rating:
  • 352 Vote(s) - 2.75 Average
  • 1
  • 2
  • 3
  • 4
  • 5
レコードグリッド値コピーペースト時の検知イベント
04-17-2014, 06:02 PM,
#1
Question  レコードグリッド値コピーペースト時の検知イベント
レコードグリッドの実装で「RecordModified」
を使用して実装を行いましたが、
データをコピーペーストした場合、レコードが編集されたという
認識ができなく、検知するために「RecordsBulkChanges」を使用しようとしてます。
「RecordsBulkChanges」の使用方法がよくわかりません。
また、他の実装方法で解決できたりしますか。

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

04-17-2014, 07:21 PM,
#2
RE: レコードグリッド値コピーペースト時の検知イベント
RecordsBulkChangesはCurlドキュメントに「RecordSet の複数レコードが大幅に再構成されたことを示します。」
と書かれているそのままで、「RecordSet のレコードが大量に変更されました、なにが変更されたか詳細は略」
ということなのではないかと。

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

入力時のチェック等でしょうか?
04-18-2014, 10:04 AM,
#3
RE: レコードグリッド値コピーペースト時の検知イベント
やりたい処理にもよると思いますが、「貼り付け時」になにかをする、という意味では、
RecordGridPaste クラスを利用するのがよいと思います。

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

04-21-2014, 02:46 PM,
#4
RE: レコードグリッド値コピーペースト時の検知イベント
>dyoshida様
ありがとうございます。
>入力時のチェック等でしょうか?
貼り付けた値と元の値を比較して差異があるときに画面を戻るボタンを押下した場合、
未確定のデータがあるが、廃棄しますかというメッセージを表示したです。

>umemura様

ありがとうございます。
これは、キーボートからctrl+vとかでもイベント発生しますか?
04-21-2014, 06:11 PM, (This post was last modified: 04-21-2014, 06:24 PM by dyoshida.)
#5
RE: レコードグリッド値コピーペースト時の検知イベント
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} &"レコード更新されています"}
                }
            }
        }
    }    
}

Forum Jump:


Users browsing this thread:
1 Guest(s)

MyBB SQL Error

MyBB has experienced an internal SQL error and cannot continue.

SQL Error:
1017 - Can't find file: 'mybb_threadviews' (errno: 2)
Query:
INSERT INTO mybb_threadviews (tid) VALUES('1071')