- PR -

DataGridのレコードセレクタについて

1
投稿者投稿内容
Collon
会議室デビュー日: 2004/03/07
投稿数: 12
投稿日時: 2004-03-07 21:04
お世話になっております。
VB.NETにおいて、DataGridの扱いで悩んでおります。

DataGridのレコードセレクタを表示しない、またはレコードセレクタに
Header的役割(行番号などを表示させる)方法はないものでしょうか。

宜しくお願い致します。

[ メッセージ編集済み 編集者: Collon 編集日時 2004-03-10 00:03 ]
ゆうじゅん
ぬし
会議室デビュー日: 2004/01/16
投稿数: 347
投稿日時: 2004-03-08 11:05
RowHeadersVisible=falseで行の先頭のヘッダーは消せますがこれでよろしいでしょうか
(VS.NET2002だと説明文が間違っています)
KEN@
会議室デビュー日: 2004/02/07
投稿数: 12
投稿日時: 2004-03-08 23:37
こんにちは。
私はDataGridで固定列を実現したくて、DataGridのOnPaintメソッドをオーバーライドして行ヘッダーに列を描画しました。これと同じ要領で行番号を表示させることができると思います。
が、無理矢理やっているので、カーソルを移動するなどリペイントがかかると元々のヘッダーがちらついたりします。
限定環境でどうしても、というのであれば、こんな方法もあります。
Collon
会議室デビュー日: 2004/03/07
投稿数: 12
投稿日時: 2004-03-09 23:47
ゆうじゅんさん、KEN@さんご返答ありがとうございます。

まず、ゆうじゅんさんの方法をためしてみたのですが、やはりレコードセレクタは
消えませんでした。RowHeaderWidth定義で幅が変化する(設定15ポイント以下は受け付けてくれませんでしたけど。)ので、RowHeader関係だと、私も思うのですけど。
ちなみに、RowHeadersVisible=falseを宣言した所は、画面設計の時にデータグリッドのプロパティに、またデータグリッドのDataSourceの設定をした後です。

次に、KEN@さんの方法はためしてみたいと思うのですが、よく記述方法が飲み込めません。もしよろしければ、具体的に教えて頂けないでしょうか。
KEN@
会議室デビュー日: 2004/02/07
投稿数: 12
投稿日時: 2004-03-10 09:28
こんにちは。
こんな感じでDataGridを拡張します。
フォームに貼ったDataGridのPaintイベントでは、一部アクセスできないプロパティがあるのでできません。
実際はスタイルの設定によって位置の微調整、色の取得方法の変更が必要です。

コード:
public class DataGrid2: DataGrid {
	public DataGrid2(){
	}

	protected override void OnPaint(PaintEventArgs e) {
		base.OnPaint(e);
		int wStartRow = VertScrollBar.Value;
		for(int i = wStartRow; i < wStartRow + VisibleRowCount; i++){
			Rectangle wRect = GetCellBounds(i, 0);
			int y = wRect.Y;
			int wCellHeight = wRect.Height;
			SolidBrush wBackBrush = new SolidBrush(BackColor);
			SolidBrush wForeBrush = new SolidBrush(ForeColor);
			Pen wBorderPen = new Pen(GridLineColor);
			Pen wLightPen = new Pen(SystemColors.ControlLightLight);
			try {
				Rectangle wCellBound;
				wCellBound = new Rectangle(1, y, this.RowHeaderWidth - 1, wCellHeight);
				if(e.ClipRectangle.IntersectsWith(wCellBound)){
					e.Graphics.DrawRectangle(wBorderPen, 1, y, this.RowHeaderWidth - 1, wCellHeight);
					e.Graphics.FillRectangle(Brushes.AliceBlue, wCellBound);
					e.Graphics.DrawString((i + 1).ToString(),Font, wForeBrush, wCellBound);
				}
				e.Graphics.DrawLine(wLightPen, 1, y, 1, y + wCellHeight);
			} finally {
				wLightPen.Dispose();
				wBorderPen.Dispose();
				wForeBrush.Dispose();
				wBackBrush.Dispose();
			}
		}
	
	}
}


Collon
会議室デビュー日: 2004/03/07
投稿数: 12
投稿日時: 2004-03-13 01:42
KEN@さんご返信ありがとうございました。

とても参考になりました。VBなので、ちょこちょこ変えながらやっていくと
なんとか動くものになりました。
1

スキルアップ/キャリアアップ(JOB@IT)