DataGrigViewの各列の上に、ComboBoxを配置したいのです

タグの編集
投稿者 他路  (社会人) 投稿日時 2011/4/26 08:37:06
早速おせわになります。

Windowsフォームで、新しいフォームを作成しました。
そこに、DataGrigView を挿入しました。
約 20列あります。
この各列で検索ができるようにこの各列の上にComboBoxを
20作成し、そのコンボボックス内の値で、DataGrigView 内をAND検索するものを作りました。
サンプル的に、数個作成したところ、うまくいきました。

ここで、しめしめと、ComboBoxを増やそうとしたのですが
右側に隠れているDataGrigView の残りの列の上にコンボボックスが
配置できないことを知りました。

上記のようなことをやりたい場合の方法は、あるでしょうか?
よろしくお願いいたします。

投稿者 shu  (社会人) 投稿日時 2011/4/26 10:07:11
panelを2重にして配置しその中にコンボボックスを配置するような方法が1つあります。
外側のpanelをPanelA,内側のPanelBとした場合、
PanelAの幅をDataGridViewの幅と同じにします。
PanelBの幅はコンボボックスがすべて並べられる幅にします。
PanelBの中にコンボボックスをすべて配置してからPanelAの中にPanelBを移動すると
よいかと思います。
DataGridViewのスクロールに合わせ、PanelBのLeftを変えると良いかと思います。

以下のリンクの内容が少し参考になるかもしれません。(進行中)
http://bbs.wankuma.com/index.cgi?mode=al2&namber=58746
投稿者 他路  (社会人) 投稿日時 2011/4/26 17:21:14
shuさん、ありがとうございました。

基本的には、簡単にはできないということでしょうか?。
Accessでは、Subフォームを作成することで簡単に実現していたので、
なにか方法が、ないのかな?と思っていました。

最後の手段として、アドバイスいただいた方法で、やってみようと
思っています。
いろいろと、ご提案いただいたことを試行錯誤していたら、
フォーム全体が、DataGridViewの水平スクロールで同期できる
ことがわかりました。
でも、このフォームの左上には、各種のテキストボックスやコマンドボタンが配置
されているので、DataGridViewの水平スクロール時には、
それらのコマンドボタンを残して(表示)、DataGridViewとその各列の上に配置した
ComboBoxだけを同期して水平スクロールしたいのです。

引き続き、よろしくお願いいたします。


投稿者 他路  (社会人) 投稿日時 2011/4/27 14:21:32
shuさん、ご報告します。
ご提案いただいた方法が、もっとも簡単な方法だとわかりました。
 スクロールと反対の方向に動いたので、Me.Panel.Left = -e.NewValue
 としたらOKでした。(下記の参考リンク参照ください)
これも、shuさんのパネルA,Bの作り方に気がつかないと、実現しない手法ですね。

ありがとうございました。
 また、http://bbs.wankuma.com/index.cgi?mode=al2&namber=58746
 のみなさん、ありがとうございます。
解決とさせていただきます。


-----参考リンク-----
スクロール時には、以下のコードでヘッダーの位置をDatagridviewに合わせて移動する事はできています。
Private Sub Datagridview_Scroll(ByVal sender As System.Object, ByVal e As System.Windows.Forms.ScrollEventArgs) Handles Datagridview.Scroll
  If e.ScrollOrientation = ScrollOrientation.HorizontalScroll Then Me.Panel.Left = e.NewValue
End Sub

投稿者 他路  (社会人) 投稿日時 2011/4/27 17:13:16

本件、引き続き、教えてください。

当初の目的は達成したのですが
>Windowsフォームで、新しいフォームを作成しました。
>そこに、DataGrigView を挿入しました。
ここへ、今回のようにPanel1 とPanel2を作成し、
Panel2の中に、DataGrigView1 とコンポボックスの入った、Panel1 を入れました。

そしたら、そしたら、フォームに記述してあった、次のコード
(DataGrigView1内のセルがクリックされる都度、Call 画像表示()する)
が、動かなくなりました。考えられることを一通りやってみましたがダメでした。
どのように記述すればよいのでしょうか?

Private Sub dataGridView1_CellClick(ByVal sender As Object, ByVal e As DataGridViewCellEventArgs)
    Call 画像表示()
End Sub
投稿者 shu  (社会人) 投稿日時 2011/4/27 22:23:47
コントロールのオーナーを変更するとHandles句は消えるので
Handles ~.~
を追加する必要があります。
投稿者 他路  (社会人) 投稿日時 2011/4/28 08:38:52
shuさん、再びありがとうございました。

>コントロールのオーナーを変更するとHandles句は消えるので
>Handles ~.~
私も、この辺かな?とは思っていたのですが、具体的な方法はわかりませんでした。
今回、改めて、このPanel2をダブルクリックしたら、出てきました。
 Handles DataView1.CellContentClick

うまくいきました。
ありがとうございました。

解決とさせていただきます。