トップ回答者
dataGridViewの列の表示のしかた -横スクロールに関連して

質問
回答
-
DataGridViewには列を固定する機能がありますが、左側を固定することはできても、右側を固定することはできません。
http://www.atmarkit.co.jp/fdotnet/dotnettips/509dgvfrozen/dgvfrozen.html
DataGridView の機能だけでは無理なので、例えば
- SplitContainer の中に DataGridView を2つ横に並べて配置
- 左側のDataGridViewにA~F列を表示
- A列を固定
- 右側のDataGridViewにG列を表示
という風にして、それっぽく見せる方法はどうでしょうか。2つのDataGridViewの状態を揃える工夫が必要ですが・・・。
なかむら(http://d.hatena.ne.jp/griefworker)
すべての返信
-
DataGridViewには列を固定する機能がありますが、左側を固定することはできても、右側を固定することはできません。
http://www.atmarkit.co.jp/fdotnet/dotnettips/509dgvfrozen/dgvfrozen.html
DataGridView の機能だけでは無理なので、例えば
- SplitContainer の中に DataGridView を2つ横に並べて配置
- 左側のDataGridViewにA~F列を表示
- A列を固定
- 右側のDataGridViewにG列を表示
という風にして、それっぽく見せる方法はどうでしょうか。2つのDataGridViewの状態を揃える工夫が必要ですが・・・。
なかむら(http://d.hatena.ne.jp/griefworker) -
SplitContainerが肝ではなく、なかむらさんも言われていますが複数のDataGridViewの状態を揃える工夫が必要です。その中でも重要なのは縦スクロールの同期でしょう。簡単なサンプルを書いてみました。
VScrollBar vsBar1; VScrollBar vsBar2; private void Form1_Load(object sender, EventArgs e) { // TODO: このコード行はデータを 'tESTDataSet.DataTable1' テーブルに読み込みます。必要に応じて移動、または削除をしてください。 this.dataTable1TableAdapter.Fill(this.tESTDataSet.DataTable1); foreach (Control c in dataGridView1.Controls) { if (c is VScrollBar) { vsBar1 = (VScrollBar)c; vsBar1.ValueChanged += (a, b) => vsBar2.Value = vsBar1.Value; break; } } foreach (Control c in dataGridView2.Controls) { if (c is VScrollBar) { vsBar2 = (VScrollBar)c; vsBar2.ValueChanged += (a, b) => vsBar1.Value = vsBar2.Value; break; } } dataGridView1.Scroll += (a, b) => dataGridView2.FirstDisplayedScrollingRowIndex = dataGridView1.FirstDisplayedScrollingRowIndex; dataGridView2.Scroll += (a, b) => dataGridView1.FirstDisplayedScrollingRowIndex = dataGridView2.FirstDisplayedScrollingRowIndex; }
★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/