DOBON.NET DOBON.NETプログラミング掲示板過去ログ

DataGridの同期

  • 題名: DataGridの同期
  • 著者: おくら
  • 日時: 2004/05/12 10:18:50
  • ID: 3992
  • この記事の返信元:
    • (なし)
  • この記事への返信:
  • ツリーを表示
環境/言語:[VB]
分類:[.NET]

一つのフォームにDataGridをふたつ左右に置きます。
垂直カーソルを動かすと両方が同期して動くようにしたいのです。
件数は、両方同じ件数です。(20000行でも耐えられるようにしたいです。)

ピクチャーに貼り付け動かす方法が有るようなのですが、行が大きすぎると駄目のようです。

どなたかどうかたすけてください
非常に困ってます。
こちらのHPに、DataGridを指定行までスクロールするサンプルがあります。
http://dobon.net/vb/dotnet/datagrid/gridvscrolled.html
これに加えて、片方のDataGridが現在どの行までスクロールされているかが
分かればいいので、上記URLのコードを改造して、スクロール時に
現在の先頭行をイベントで通知するようにします。

Public Class MyDataGrid
Inherits System.Windows.Forms.DataGrid

Public Sub SetTopRow(ByVal rowNum As Integer)
Dim args As New ScrollEventArgs( _
ScrollEventType.LargeIncrement, rowNum)
GridVScrolled(Me, args)
End Sub

Public Event TopRowChanged(ByVal sender As Object, ByVal row As Integer)

Protected Overrides Sub GridVScrolled(ByVal sender As Object, ByVal e As System.Windows.Forms.ScrollEventArgs)
MyBase.GridVScrolled(sender, e)
RaiseEvent TopRowChanged(Me, e.NewValue)
End Sub
End Class

新規にプロジェクトを「Windows コントロール・ライブラリ」として作成し、
上記ソースを記述し、ビルドしてDLLを作成します。
フォーム側のプロジェクトで、[ツールボックス]-[アイテムの追加と削除]-[参照]で
上で作成したDLLを指定すると、[ツールボックス]でMyDataGridを選択できるように
なります。
標準のDataGridの代わりにMyDataGridを配置して、デザインを行います。

フォームにMyDataGrid1とMyDataGrid2を配置し、MyDataGrid1のスクロールを
MyDataGrid2に反映する場合は、次のコードを記述します。

Private Sub MyDataGrid1_TopRowChanged(ByVal sender As Object, ByVal row As Integer) Handles MyDataGrid1.TopRowChanged
MyDataGrid2.SetTopRow(row)
Application.DoEvents() ' 描画がスムーズに行われるようにするため
End Sub
  • 題名: Re[2]: DataGridの同期
  • 著者: おくら
  • 日時: 2004/05/17 1:41:58
  • ID: 4049
  • この記事の返信元:
  • この記事への返信:
    • (なし)
  • ツリーを表示
NowhereManさん、解答ありがとうございます。

http://dobon.net/vb/dotnet/datagrid/gridvscrolled.html
を参照になんとか出来ました。
NowhereManさんの記事のDLLの作成にもこれから挑戦してみたいと思います。

本当に助かりました。ありがとうございます。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板