- PR -

DataGridのTableStylesが崩れる件

投稿者投稿内容
さかもと
ぬし
会議室デビュー日: 2004/05/14
投稿数: 586
投稿日時: 2004-11-26 09:32
おはようございます。
致命的ではない(?)のですが,不可解なことが起こっていて
私の環境だけそうなのかどうか分からない為投稿させて頂きました。

WinXP
VS2003(VB)
SQLServer2000
Framework 1.1

============================================================
DataGridにスタイルを設定する時(列幅など),まずデザイナー上のDataGrid
のプロパティからDataSorceなどを指定後「TableStyles」の(コレクション)から
DataGridTableStyleコレクションエディタを開き,更に,GridColumnStylesの
(コレクション)を追加してスタイルを設定しています。

通常,Widthを「75」などに設定し,フォーカスを移動させると「75」が太文字
になりますよね。ただ,「100」にするとどうしても太文字になりません。

最初は太文字にならないことに気が付かなかったのですが,コンパイルしても
どうしても「100」にセットした所が崩れてしまいおかしいと調べて
いたところ,ソースを開いてみたところ

<正しくセットされているColumn>
Me.DataGridTextBoxColumn5.Format = ""
Me.DataGridTextBoxColumn5.FormatInfo = Nothing
Me.DataGridTextBoxColumn5.MappingName = "Hoge"
Me.DataGridTextBoxColumn5.NullText = ""
Me.DataGridTextBoxColumn5.Width = 75

<100にセットしたColumn>
Me.DataGridTextBoxColumn6.Format = ""
Me.DataGridTextBoxColumn6.FormatInfo = Nothing
Me.DataGridTextBoxColumn6.MappingName = "Hoge"
Me.DataGridTextBoxColumn6.NullText = ""
★Widthのセットが消えている?

となっていました。直接コードでMe.DataGridTextBoxColumn6.Width = 100 を
記述してもコンパイル後には消えてしまいます。

おかしいと思い,101でセットしたところ問題は解決しました。
前後の数値90〜110くらいで試してみたのですが,100の時だけが
崩れてしまうようです。200,300等は問題なかったです。

=================================================================

何か設定ミスか記述ミスなのでしょうか?
今は101にセットしてしのいでいるのですが,気になりまして・・・。


Os_
ベテラン
会議室デビュー日: 2003/04/16
投稿数: 77
投稿日時: 2004-11-26 09:54
Osです。

これは、100がディフォルト値ということではないですか?
デザイナーはディフォルト値にセットした場合、指摘のような扱いになるかと思いますが。
さかもと
ぬし
会議室デビュー日: 2004/05/14
投稿数: 586
投稿日時: 2004-11-26 10:27
さかもとです。
Os様,ご返答ありがとう御座いました。

デフォルト値とのことですが,100だとすると何もセットしなければ
100の幅になるわけですよね?(100の幅に見える?)

ただ,実際に表示させてみると75の幅にしかなっていません。
デザイナーで追加した時も最初に表示されるのはWidth=75
となっています。

ひょっとしてデフォルト値について私,勘違いしてますか・・・?
Os_
ベテラン
会議室デビュー日: 2003/04/16
投稿数: 77
投稿日時: 2004-11-26 12:32
Osです。

確認ですが、
>デザイナーで追加した時も最初に表示されるのはWidth=75
のことですが、この時、太文字で表示&ソースに記述があるかと思います。
これは、追加時に75設定する部分があると考えられますが

DataGridTextBoxColumn(DataGridColumnStyle)のWidthプロパティの
ディフォルト値(DefaultValueAttribute)の定義は100になっているのでは
ということです。

さかもと
ぬし
会議室デビュー日: 2004/05/14
投稿数: 586
投稿日時: 2004-11-26 17:10
Os様,ご返答ありがとうございます。

>DataGridTextBoxColumn(DataGridColumnStyle)のWidthプロパティの
>ディフォルト値(DefaultValueAttribute)の定義は100になっているのでは
>ということです。

ですが,ということはデフォルト値で定義された100に関してはWidthの
プロパティとしては使用できない??
http://www.microsoft.com/japan/msdn/library/default.asp?
url=/japan/msdn/library/ja/cpref/html/frlrfsystemwindowsformsdatagridcolumnstyleclasstopic.asp
でのサンプルを見ると,ソースに直接記述すれば100でもセットできそうだったので。
(こちらはデザイナーからセットをしているわけではないですが)

この他色々とサンプル(他サイトより)を見ていても,100でセットできるみたい
なんです。

もしWidthのデフォルト値が100であれば,Styleをセットせずにただ表示させた
場合,表示上100の幅になるのではないでしょうか?(101と比べて少し短い位の)


Os_
ベテラン
会議室デビュー日: 2003/04/16
投稿数: 77
投稿日時: 2004-11-26 18:47
Osです。
説明が悪く、誤解をあたえたのかもしれません。

>ですが,ということはデフォルト値で定義された100に関してはWidthの
>プロパティとしては使用できない??

ディフォルト値は使えないということはないかと思います。

一般にこのようなプロパティの値を設定する場合、
強調表示になるのは、ディフォルトの値と異なる内容が設定されている場合です。
また、この場合に、設定内容を保存する必要があるので、デザイナーがコードを生成しています。
逆にディフォルト値の場合、コードを生成する必要がないのです。

今回の場合、この現象に相当すると考えました。

コードが生成されていないから使えないということは無いと思いますがいかがですか?
プロパティに100と設定した場合、表示は100になっていませんか?
100にしてDataGridが表示されませんか?
さかもと
ぬし
会議室デビュー日: 2004/05/14
投稿数: 586
投稿日時: 2004-11-26 19:15
Os様,ご丁寧にありがとうございます。
>逆にディフォルト値の場合、コードを生成する必要がないのです。
そうですよね・・・。その場合にちゃんと100の幅で出てくれれば納得が
いくのですが。

>プロパティに100と設定した場合、表示は100になっていませんか?
>100にしてDataGridが表示されませんか?

についてですが。
「表示は100」というのは実行してからGridの表示(見た目)が,ということで宜しいですか?
画面に定規を当てて見たのですが(笑)75にセットされた幅と同じになっています。
先程も書きましたが,101とセットした場合(デフォルト値ではない?)と隣合わせ
に表示させてみましたが,どうみても100と101の「1」だけの幅差だとは見えません
・・・。
セットした文字列の長さや,型の差を色々と試してみたのですが,それとは関係なさそうでした。

MSの資料に何かあればと思ったのですが,特に見当たらずです。



Os_
ベテラン
会議室デビュー日: 2003/04/16
投稿数: 77
投稿日時: 2004-11-27 11:01
Osです。

状況から判断すると、

DataGridTableStyleのPreferredColumnWidthプロパティのディフォルト値75と
DataGridTextBoxColumn(DataGridColumnStyle)のWidthプロパティの
ディフォルト値100との違いが起因していると考えられます。

デザイナーは100をディフォルト値として判断するので、
DataGridTextBoxColumnのWidthに値が設定する記述がコードから削除されるが、
値が設定されていない場合は、
DataGridTableStyleのPreferredColumnWidthプロパティの値が初期値として設定されるので、結果として75になる。

回避策としては、コードを個別に記述する方法が考えられます。

デザイナーは100をディフォルト値として判断する。

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