- PR -

DataGridのウィンドウ枠の固定

投稿者投稿内容
NAK
ベテラン
会議室デビュー日: 2002/10/27
投稿数: 91
投稿日時: 2004-04-13 16:57
みなさまにはいつもお世話になっております。

ASP.NET(VB.NET)で、DataGridコントロールを使用して、
表を表示する簡単なWebページを作成したのですが、
行数、列数ともに多く、スクロールすると行や列の項目名が
視界から消えてしまい、見づらいのでなんとかしようと思っております。

EXCELでは「ウィンドウ枠の固定」という便利な機能がありますが、
DataGridで似たような機能て実現できるのでしょうか?

以上よろしくお願いいたします。
マシュー
常連さん
会議室デビュー日: 2002/11/29
投稿数: 39
投稿日時: 2004-04-14 18:31
「ウインドウ枠固定」はないはずです。
僕の場合は、見出し用のDataGridと明細用のDataGridを2つ作成しました。
NAK
ベテラン
会議室デビュー日: 2002/10/27
投稿数: 91
投稿日時: 2004-04-14 18:52
自己レスです。

ご指摘の通り、DataGridだと難しいので、グレープシティ社の<A HREF="http://www.grapecity.com/japan/support/database/P7_224.htm" TARGET="_blank">「Spread for .NET」</A>を使用
しようかと思っています。
まずはトライアル版で試してみたのですが、簡単なプログラムを作成しても、行が10行しか表示されないのです。

FpSpread1.Sheets(0).RowCount = 100

のように指定するのですが、なぜだめなのでしょうか?
どなたか同じ悩みを抱えている方はいらっしゃいませんか?
Cookie
ベテラン
会議室デビュー日: 2002/11/05
投稿数: 59
投稿日時: 2004-04-14 21:07
こんにちは。

私も同じことやりましたよ。やり方はマシューさんと同じ方法です。
Webアプリだったのでスタイルシートを使って、DataGridを二枚作成して
同じ位置に重ね、下側(表として使用)は全て表示し、上側(固定する見出し部分)は
一行分だけ表示するように組み込んだ上で、下のテーブルのみスタイルシートで
スクロールバーを付けました。

自力でやらずに「Spread for .NET」を使用するか?という話も出たのですが、
それだと幅をパーセント指定にしてもWindowリサイズ時に
グリッドのサイズが変わらないらしいので…。


ちなみに、MicrosoftのWindowsUpdateのサイト(asp使用)で、
パッチを当てた履歴を見れるページがありますが、そこに見出し固定のテーブルがありますよ。
#必死でソースを覗こうとしたのですが、途中まで追いかけて断念しました…
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-04-15 09:00
 2行1列のtableを作り、1列目に見出し用のDataGridを配置。2列目にはdiv要素を配置して、その中にDataGridを配置。div要素のスタイルを相対位置、オーバーフロー時はスクロールにして、・・・って、どこかのスレッドに例へのリンクがありますので、探してみてください。。。
Cookie
ベテラン
会議室デビュー日: 2002/11/05
投稿数: 59
投稿日時: 2004-04-15 09:30
>Jittaさん
私は全く同一のDataGridを作って座標指定でぴったり重ね、
下にも上にも外側にそれぞれDivをかましています。
上は一行分の高さを指定して、スタイルのoverflowはHidden。
下は表示したい高さを指定して、スタイルのoverflowにautoかscrollです。

最初Jittaさんと同じ方法で、垂直にではなく上下に普通にDataGridを並べたのですが、
列幅が固定でない場合(nowrap指定でデータにより伸びる可能性がある場合なども)に
見出しテーブルと明細テーブルで縦の罫線がずれてしまいました。
なので、見出し用テーブルにも非表示の部分に明細テーブルと同じデータを持たせていました。

# WindowsUpdateのサイトに綺麗なサンプルがあるのですがソースが見れません。
  あれはどうなってるんだろう?
Cookie
ベテラン
会議室デビュー日: 2002/11/05
投稿数: 59
投稿日時: 2004-04-15 09:35
列の幅に狂いが出ないことが保証されている場合は
見出しだけ書いたテーブルを上に置いておくだけでいいと思うのですが、
明細テーブルにどんな値が入ってきてもずれないようにする為には
上で書いた様な方式が確実かな、と思います。

2回同じこと書いてますね。すいません。<Updateのページ
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-04-15 09:44
「あ、こんなのもあるんだ」程度にしか見ていませんが。。。

 データ表示用のdgdDataと、タイトル用のdgdTitleを用意する。dgdData高さをウインドウサイズに追従させるのは、
コード:
function window_onresize() {
	var h = document.body.clientHeight - dgdData.offsetTop
	 - (dgdData.offsetHeight - dgdData.clientHeight);
	if (h > 0) {
		dgdData.style.height = h;
		dgdData.style.height = h;
	}

	var mw = document.body.clientWidth - dgdData.offsetLeft
	 - (dgdData.offsetWidth - dgdData.clientWidth) / 2;
	if (mw > 0) {
		dgdData.style.width = mw;
		dgdData.style.width = mw;
	}
}

(表示位置などによって若干修正が必要)

タイトルとデータのグリッド幅も、JavaScript側で整える。
dgdTitleのスタイルを、
style="position:absolute;overflow:hidden;"
として、実行時にdgdDataのoffsetTopに移動させればどうでしょう?つまり、スクロールが一番上にある(変な表現?)時は、dgdDataのタイトルと、dbdTitleが重なって表示されている、と。横も、同じように出来るのではないでしょうか???

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