- PR -

DataGridで特定列だけ右寄せしたい

投稿者投稿内容
NORI
常連さん
会議室デビュー日: 2004/05/26
投稿数: 21
投稿日時: 2004-06-10 11:14
VB.NETを使ってASP.NET Webアプリケーションを作成しています。そこで、DataGridをつかっているのですが、特定の列だけ右寄せにする方法がわかりません。DataGridのプロパティビルダ内の書式で、「水平方向の配置」を使うと全ての列が右寄せになってしまいます。

やりたい事は、8列あるうちの1列目を左寄せ、2〜8列目を右寄せにしたいのです。

プロパティ設定でも、コーディングレベルでも構いませんので、解る方回答を願いします。
じいじ
大ベテラン
会議室デビュー日: 2003/11/11
投稿数: 223
投稿日時: 2004-06-10 11:30
プロパティビルダ内の「書式」→オブジェクトの「列」って選択して、該当列を展開してできない?(私は未確認ですけど・・・・)
まるく
大ベテラン
会議室デビュー日: 2004/01/09
投稿数: 181
投稿日時: 2004-06-10 11:38
引用:

じいじさんの書き込み (2004-06-10 11:30) より:
プロパティビルダ内の「書式」→オブジェクトの「列」って選択して、該当列を展開してできない?(私は未確認ですけど・・・・)



こんにちは。
じいじさんの方法でできます。
「実行時に自動的に列を作成する」にチェックしている場合は、DataGridのItemDataBoundイベント内でスタイル指定すればOKです。
NORI
常連さん
会議室デビュー日: 2004/05/26
投稿数: 21
投稿日時: 2004-06-10 13:33
じいじさん、まるくさん回答ありがとうございます。

大事な事を書くのを忘れてました。
DataGridですが、列が無く、「実行時に自動的に列を作成する」のチェックを外した状態で、プログラム実行時にDataSetを使い、列を8列生成してDataGridに表示しています。
デザイン時に、列が無い状態でのASP.NETのコーディングレベルでの設定方法の解る方、回答お願いします。
NORI
常連さん
会議室デビュー日: 2004/05/26
投稿数: 21
投稿日時: 2004-06-10 14:16
申し訳ありません。1つ訂正です。
「実行時に自動的に列を作成する」のチェックを外した状態と書きましたが、チェックが付いた状態の間違いでした。
Cookie
ベテラン
会議室デビュー日: 2002/11/05
投稿数: 59
投稿日時: 2004-06-10 14:25
こんにちは。

VBソースからのアクセスの場合、静的に列定義してある場合は

 DataGrid.Columns(5).ItemStyle.HorizontalAlign = "right"

のようにして列単位で設定出来ます。

動的生成をした場合(ASPXソース側にタグで列定義を行わず
AutoGenerateで列が出来る場合)はColumnコレクションが取得できないので、
こんな感じでやりました。

 DataGrid.Items(i).Cells(5).Attributes("align") = "right"

i は行数分のループで、全行分回す必要がありますが
これでいけば、どちらも同じHTMLがレンダーされたと思います。
これで大丈夫でしょうか? 


[ メッセージ編集済み 編集者: Cookie 編集日時 2004-06-10 14:29 ]
NORI
常連さん
会議室デビュー日: 2004/05/26
投稿数: 21
投稿日時: 2004-06-10 15:20
Cookieさん、回答ありがとうございます。

> DataGrid.Items(i).Cells(5).Attributes("align") = "right"

の方法で列単位の指定が出来ました。
ありがとうございました。

ただ、新たな問題が発生しました。
上記方法だとヘッダ部分までデータと同様に右寄せ・左寄せになってしまいます。
ヘッダ部分は変わらないようにできないのでしょうか?
もしくは、データの無いヘッダのみのDataGridに対して同様の列の右寄せ・左寄せ指定は出来ないのでしょうか?
解る方、回答お願いします。
Cookie
ベテラン
会議室デビュー日: 2002/11/05
投稿数: 59
投稿日時: 2004-06-10 15:47
こんにちは、Cookieです。

>ヘッダ部分までデータと同様に右寄せ・左寄せに

あれ??
実データ(Itemsコレクション)部分でループを回しているので、
このコーディングではヘッダまで設定しようがないはずなんですが…なぜでしょう
私がこれでやったときは、データ部分だけちゃんと出来ました。

もしかしたら、意図していないところで設定してしまっているのでは?
ヘッダのスタイルが全列共通で左揃えなら、
 
 DataGrid.HeaderStyle.HorizontalAlign = "left"

とかでヘッダだけ設定してもいいかも。



もしうまくいかなかったら、ループで回す時に数行飛ばしにしてみたり
背景色などのスタイルを変えてみたりとかであれこれ実験してみると、
どこが原因なのかわかるかも知れません。
私は先述のコーディングでうまく出来ているので、いろいろ試してみてください。

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