わけあってデータクラスにキャッシュ機能を実装することに。
というのも、色々考えた結果更新制御を行う場合、それぞれのAPに実装してもらうよりもデータクラス側で実装してあげれば、保守性においていいんじゃないかな、って理由なんだけど・・・。
結構自爆してるかも知れない。
ちょっと早めにテストしないとマズイかもなぁ。
DataGridView や DataRepeater にこだわりつつ
時代は Workflow Foundation などと言い続けていたら
これからは LogicFlow だろ! と思い始めてきた
色々浅く広くやっていく古い技術者の Blog
やはりElTabelle。試行錯誤していた結果、レイアウトとして作成するテンプレートクラスでは、Objectとして受け渡すことが出来たとしてもその情報を保持しているとは限らなかったのが判明・・・。実際はテンプレートだけでなく、全体的になんだけど。
個人的な意見なんだけど、Objectとして渡された物を勝手に変換するのはどうよ?、と思っているのよね。コンボボックスにaddしたものと、Itemsから拾ってきた物が違っていたら結構困ると思うんだけどなぁ・・・。レスポンスとかの問題なんだろうけど。
結局テンプレ情報から自前で保持領域を確保しないといけない事に。んー、テンプレとセルの書式が異なる場合は結構おてあげかも知れない。汎用的なのを諦めて、デザインに制限つけるしかないかな?
なんですかコイツのコンボボックスと拡張コンボボックスは。
ヘルプにある「通常のコンボボックスと同様に利用できます」って全然違うじゃないデスカ!
感覚的にはVB6までのコンボボックスなんだよなぁ、これ。.Netに移ってようやっとAddするのはクラスのインスタンス、ってところに慣れ親しんだのに。
いや、だからってダメじゃないし気持ちは分かるんだが(w
今回はそのあたりのコーディングも統一しようとしてるからねぇ・・・。ちょっと苦労しそうな予感。
ElTabelle続行中。
今日の問題はOnEnterをオーバーライドして独自イベントを発生させた際に、BaseGridライブラリ(ElTabelleのライブラリ)でぬるぽが発生してしまっていた。なにか悪い事をやっているからとは思うんだけど、いかんせんなにが悪さしているかがさっぱりおっかけれない。Exception見ても全然情報載ってないんだよねぇ・・・。
まぁ、来週中にどうにかしないとなぁ。
それともう一つ困っているのが、ComboBoxコントロールでどうやったらDoubleClickをイベントとして拾えるか、だな。ComboBoxコントロール自体はDoubleClickイベントは発生しないものなんだけど、色々事情があって今回は拾いたいのよね。どこかでメッセージが捨てられているのかな、とおもってWndProcを調べてみたけどメッセージ自体届いていなかった。このあたり知識が足りないから、なぜ届かないのかが全然判ってない。
しかしComboBoxってMouseDoubleClickイベントもあるんだけど、こいつはどうやったら発生するんだろう・・・?
ElTabbleのラッパークラスと格闘中。しかしなんというか、調べれば調べるだけ、自分と肌が合わないコントロールなことで・・・。なんというか、「そのまま使うことを前提としてます」というコントロールだからなんだろうけどねぇ・・・。
とりあえず、DragDropでの行並び替えと、コンテキストメニューからの行削除は実装して、共通イベント制御へと流すところまではOKになったから、実用には耐えられるんだけどね。
あとはキー制御と色周り・・・色はあたりをつけてあるからいいけど、問題はキー制御だなぁ。
よく見ている@ITでの掲示板の一つ。
RDBアプリケーションのためのパターン(http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=33879&forum=7&9)
ORマッピングは汎用的な設計パターンな話題では外すべきかなぁ、と思っているんだよねぇ。これってリレーションというかエンティティをオブジェクトに変換する際の違いというか、そこら辺を吸収するための手段であって、設計パターンじゃないよなぁ・・・なんて。自分の理解が間違っている様な気もする。
かといって、今自分でやっている方式も全然ベストではないしねぇ。
ラッパークラス作成のため、イベント周りを調査してもらっていたり。
(ちょっと同僚と新人にそれぞれ別系統のイベント調査をお願いしてみた)
新人にはなんちゅーか、説明がうまく伝わらなかったので自分の方でアタリをつけてみたんだけど、DataGridViewやっていた後だからか、ElTabbleってイベント制御がちょっとヒ微妙な感じ。
別にダメって事じゃないけど、EnteredCellやらEnterEditやらセル周りのイベント発生させて置いて、その状態から別コントロールへフォーカスを移すと、LeaveEdit→LeaveとLeaveCell発生しないってのがなんというか変な感じ。
まぁ、触っていると「カレントセルが移動していない」のが判ったので、LeaveCellが発生していないのは理解できたんだけど・・・なんか納得いかないんだよねぇ。
いや、ダメじゃないんだけど。
業務系のアプリで必ずと言っていいほど出てくるこの話。そのため、色々なサイトでこれに対するロジックが公表されているんだけど。
SelectNextControlメソッドでは対応できないケースの方が多いんだけど、それでもどうしてそういったサンプルが多いんだろう。理由も簡単で、DataGridViewやその他グリッドなコントロールが絡むとほぼ間違いなく、Enterで次のセルへ移動してほしい、という話もでるだろうから。
だから業務としてはProcessDialogKeyとかそのあたりのメソッドをオーバーライドするのが最もいいのだろうけど・・・利用するコントロールによっては、コントロール側で制御を行う必要があるんだよねぇ(DataGridViewもそう)。
Form側で統一したロジックにしようとすると、こういった問題がでるので各種コントロール側でキー制御を行う、というのが今のところ最もスマートな方法かもしれないね。
DataGridViewは少しずつだけど対応が進んできた。でも次に控えているヤツがなにげに難しい・・・。
んーTabControlのイベントトラップをやろうとしたんだけど、こいつってIDEでイベントがでてこない。なんか嫌な雰囲気だなぁ、と思っていたらTabControlに関連するTabPage側で結構制御が必要な構造になっていたのねぇ・・・。
んー、まともにやろうとするとCodeDomあたりも研究しないといけなさそうで時間かかりそうだなぁ。
今になってDataGridViewの仕様とぶつかる問題が発覚。うーん、今のところBindingSource関係はほとんど使わないようにしてきたんだけど、これがアダになったのかなぁ・・・という感じ。
問題の発端はActiveControlが変更された際に、イベントを発生させようとしていた事なんだよなぁ。この瞬間をトラップしようとすると、どうしても各コントロールのEnterとLeaveイベントを利用した制御になるんだよなぁ。ところが、DataGridViewは仕様上Enter関連とLeave関連のイベントでは色々と出来ないことが発生してしまう・・・。
んー、今のところ望みとなるのはGotFocus関連なんだが・・・。設定によっては、GotFocusは結構後になってからしか発生しないのが判っているから、非常に手詰まり。
もう一つ考えているのは、DataGridViewRowCollectionクラスあたりに手をいれて、EnterまたはLeaveイベントの最中はキューイングするだけにして・・・と考えたりもするんだけど、そこまでやらないとダメ?