質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
DataGrid

GUIの一種であり、データを表の形式でみることが可能です。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Q&A

解決済

3回答

3199閲覧

特殊な表示のDataGridView

k.matsuda

総合スコア293

DataGrid

GUIの一種であり、データを表の形式でみることが可能です。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

0グッド

0クリップ

投稿2019/04/03 07:50

前提・実現したいこと

VisualStudio2015 C#で開発しています。
特殊な表が作りたくて、色々試しては見ましたがうまくいきません。

表のうち、1列だけ行幅の半分だけ上又は下に表示位置をずらしたいのです。
他の列の行間にセルの中心が来るような感じです。

|------|----|----|
|      |    |----|
|------|----|    |
|      |    |----|
|------|----|    |
|      |    |----|
|------|----|    |

DataGridViewで表示させたい行幅の半分で行幅を設定し、
2行分結合させるように矩形を描画してみましたが、セルにフォーカスが移ったときに
半分だけ選択状態になったり、スクロールさせると表示させたテキストが半分になったりと
実用に耐えません。

そもそも、1列だけずらして表示させるような機能があるのかどうかもわかりませんが、
何かヒントだけでもと思い、こちらに掲載させていただきます。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

そもそも、1列だけずらして表示させるような機能があるのかどうかもわかりませんが、

DataGridView には標準でそのような機能は無いはずです。自前で実装するしかないと思います。


セルにフォーカスが移ったときに
半分だけ選択状態になったり、スクロールさせると表示させたテキストが半分になったり

「セルにフォーカスが移ったとき」のイベントや「スクロールさせると」のイベントに対して、適切な処理を行う必要があります。
(何が "適切" なのかは、具体的な仕様次第です)
「セルにフォーカスが移ったとき」のイベントは CurrentCellChanged
「スクロールさせると」は Scroll
あたりでしょうかね。

投稿2019/04/03 08:29

alg

総合スコア2019

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

k.matsuda

2019/04/04 00:02

回答ありがとうございます。 そうですね、アクションごとにイベントを設定していかないとだめですね。 自前で出来るところまではやりたいと思います。
YAmaGNZ

2019/04/04 00:28

セルを結合表示する場合、DataGridViewTextColumnやDataGridViewTextCellを継承した自作のColumnクラスやCellクラスを作成し、Paintイベントで処理する形になるかと思います。 フォーカスを持ったとき、無くなった時などの描画が必要な時にPaintイベントが発生しますので、そこで適切な描画を行えば、正常に表示されることになります。
k.matsuda

2019/04/04 00:37

重ね重ね回答いただきありがとうございます。 これで前に進めそうです。 完成した暁には、発表できればと思っています(需要があるかどうかわかりませんが・・・)
guest

0

サードパーティのコントロールを購入するのが一番楽で早い方法だと思います。

予算の都合上購入できないのであれば、自前でセルの結合を行う形になると思いますが、セルの結合は結構面倒だと思います。
結合したセルの編集も行いたいのであれば、さらに面倒になるかと思います。

ソースを提示され、この時こうなるので、こうしたいとか具体的なものがあれば、回避策の提示などが可能かもしれません。

投稿2019/04/03 08:20

YAmaGNZ

総合スコア10251

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

k.matsuda

2019/04/03 08:31

回答ありがとうございます。 やはり、サードパーティのコントロールが現実的かも知れませんね。 ソースなどがまとまれば、もう一度質問させていただくかもしれません。
guest

0

結局、セルを結合させる方法は見た目や挙動がおかしくなってしまうので
(実力不足だと思いますが・・・)
DataGridViewを2つ並べて配置することにしました。

左側のDataGridViewはスクロールバーを表示させないようにして、
右側のDataGridViewのスクロールイベントを拾って同期させるようにしました。

マウスホイールイベントも拾うようにして、左側にカーソルを持っていってホイールを動かしても
左右同期するようにしました。

要件は満たしているので、とりあえずはこれで自己解決にしておきます。

2つ並べたDataGridView

投稿2019/05/08 01:09

編集2019/05/10 00:33
k.matsuda

総合スコア293

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問