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=965)



編集不可のグリッドにデータを貼り付けたい - umemura - 09-10-2013

エクセルからコピーしてきたデータをグリッドに貼り付けたいです。

ただし、そのグリッドは、貼り付け専用で、ユーザからの入力を受け付けません。
(editable?=falseを設定)

しかし、編集付加のグリッドに貼り付けコマンドを実行すると、エラーになってしまいます。

回避方法はありますでしょうか。




RE: 編集不可のグリッドにデータを貼り付けたい - umemura - 09-10-2013

貼り付けコマンド「RecordGridPaste」をカスタマイズして対応するのがよいかもしれないですね。
with マクロを使って、貼り付け処理のときだけ編集可能にしています。

エクセルと振舞いを合わせるために、貼り付け時に、選択範囲を変更することも
このクラスをカスタマイズすればできそうですね。

Code:
{define-class public open CustomPaste {inherits RecordGridPaste}
  {constructor public {default context:RecordGrid}
    {construct-super context}
  }
  {method public {do-command allow-prompt?:bool = true}:void
    {if not self.context.editable? then
        def ret-val  = {popup-question "対象のグリッドは編集不可ですが、強制的に貼り付けますか?"}
        {if ret-val == Dialog.yes then

            {with self.context.editable? = true do
                {super.do-command allow-prompt? = allow-prompt?}
            }
        }
    else
        {super.do-command allow-prompt? = allow-prompt?}
    }
  }
}

{define-class public CustomPasteControlRecordGrid {inherits RecordGrid}
  {constructor public {default ...}
    {construct-super {splice ...}}
  }
  {method public {create-command name:String}:#Command
    {switch name
    case "paste" do
        def  paste-command = {CustomPaste self}
        {return paste-command}
    else
        {return {super.create-command name}}
    }
  }
}

{let 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}
    }
}

{def paste-grid =
    {CustomPasteControlRecordGrid
        record-source = rs,
        editable? = false
    }
}

{value paste-grid}


{CommandButton
    label = "貼り付け",
    {on Action do
        {if paste-grid.records.size == 0 then
            {if-non-null rs-tmp = paste-grid.record-source then
                {rs-tmp.append {rs-tmp.new-record}}
            }
        }
        {paste-grid.select-all}
        {paste-grid.do-command "paste"}
        {paste-grid.select-nothing}
    }
}

{CommandButton
    label = "全削除",
    {on Action do
        {rs.delete-all}
    }
}

{CommandButton
    label = "追加",
    {on Action do
        {rs.append {RecordData First = "John", Last = "Smith", Age = 25}}
    }
}