昨日、「データグリッドの1項目を選択すると行全体が選択状態になるには・・・」という質問をさせていただき解決したのですがまた質問させていただきます。ごめんなさい。
デザイン時にフォーム上のDataGridを右クリックし、「編集」を選んで列を追加、プロパティページにて追加した列の幅やCaption、データ属性を編集したところ今まで表示されていたデータが表示されなくなってしまいました。
(データグリッドのプロパティを変えなければデータは表示されます)
何度も申し訳ないのですがどなたか教えていただけないでしょうか?
よろしくお願いします。
> (データグリッドのプロパティを変えなければデータは表示されます)
情報が少ないので、何とも言えません。以下の事を教えてください。
・どのプロパティとどのプロパティを設定して、データを表示させているのか
・どういったプロパティを変更したら、データが表示されなくなったのか
それと、もしJetを使用しているのであれば、下記の点も注意してください。http://support.microsoft.com/default.aspx?scid=kb;ja;224192
魔界の仮面弁士さん、昨日に引き続きありがとうございます。
>どのプロパティとどのプロパティを設定して、データを表示させているのか
プロパティは昨日教えていただいたMarqueeStyleを"3-dbgHighlightRow"に変更した以外はDefalutのままです。
>どういったプロパティを変更したら、データが表示されなくなったのか
・列の追加(「編集」選択後、右クリックで「挿入」)−表示するデータ分
・追加した列のWidth
何をすると表示されなくなるかを順を追って調べたところ
[プロパティページ]-[レイアウトタブ]-[Width]を変更した途端、データが表示されなくなることがわかりましたがなぜそうなるかがわかりません。
> プロパティは昨日教えていただいたMarqueeStyleを"3-dbgHighlightRow"に変更した以外はDefalutのままです。
それしか設定していないなら、データは表示されないと思いますよ。
DataSourceプロパティ等も設定してみて下さい。
なお、開発時にDataSourceを割り当てた場合は、右クリックして
[フィールドの取得]を選択しておく事を忘れずに。
> [レイアウトタブ]-[Width]を変更した途端、データが表示されなくなる
列定義に手を加えていない場合は、自動レイアウト機能が有効になります。
しかし、[列]タブや[レイアウト]タブなどで、特定の列の情報を
変更した場合は、列定義が自動的に置き換えられる事はありません。
なおデザイン時ではなく、実行時にレイアウトを変更するような場合は、
・ReBind メソッド
・ClearFields メソッド
・HoldFields メソッド
などについても調べておくと良いでしょう。
ごめんなさい。DataSourceは設定してます。
以下のようにコードで設定してます。
Private Sub DTGR_SET(DG As DataGrid, MM As String, DD As String)
Dim GetData As ADODB.Recordset
'データグリッドを設定
SQL = ""
'SQL文を作成する
SQL = "SELECT A, B, C, D, E FROM TABLE"
Set GetData = New ADODB.Recordset
Set GetData = DB_CON.Execute(SQL)
'データが存在する場合のみ
If GetData.RecordCount <> 0 Then
'DataGridにデータを設定する
Set DG.DataSource = GetData
End If
End Sub
DataSource以外で設定しているプロパティはMarqueeStyleのみです。
やはり、[列]タブや[レイアウト]タブなどで、特定の列の情報を変更すると表示されなくなってしまいます。列の幅を変更し、実行すると変更したサイズで表示されますがデータのみ表示されなくなります。
昨日、書き忘れたのですがデータ件数分の行は表示されます(データは表示されません)
これだけの情報ではわかりませんよね?
[列]タブや[レイアウト]タブなどのプロパティを、正しく設定しましたか?
「中途半端に」設定してあると、そういう事態になりますよ。
連結させる列名(DataField)が間違っていたり、あるいは未指定ならば、
当然、列情報が連動する事はありません。
ただし、列定義が『完全に未設定』ならば、先に回答したように、
> 列定義に手を加えていない場合は、自動レイアウト機能が有効になります。
となるわけです。
# 列定義を行ったのに、その定義が自動レイアウト機能で
# 上書きされてしまったら、困ってしまいますよね?
というわけで、列定義を行うなら、最後まできちんと行いましょう。
1. 右クリックで[編集]を選び、グリッドの編集モードに移行する。
2. 編集モードで、もう一度右クリックし、列の追加や削除、水平分割ペインなどを指定。
3. 右クリックの[プロパティ]でプロパティシートを開く。
4. [列]タブで、各ColumnのDataFieldに、レコードセットのフィールド名を記述。
5. 必要に応じて、その他の設定も行う。
ここまでやって、初めて正しく表示される事になります。
(それとも、これらを設定しても表示されませんか?)
で、このあたりの事情については、先に回答した
> ・ReBind メソッド
> ・ClearFields メソッド
> ・HoldFields メソッド
などを調べていただければ、ヘルプに
》 デザイン時に列を少しでも変更した場合は、変更したグリッドの
》 レイアウトを保存すると見なされ、列が自動的に初期化されません。
などという記述があるので、ある程度の見当が付くかと思ったのですけれど…ちょっと分かりにくかったのかな? (^^;
もう一度、ヘルプで上記メソッドについて調べて見た上で、さらに
[Visual Basic ドキュメント]
└[Visual Basic の使用方法]
└[プログラミング ガイド]
└[Visual Basic を使ってできること]
└[データ グリッド コントロールの使用]
あたりのトピックにも、一通り目を通しておいて下さい。
魔界の仮面弁士さん、解決しました。
ありがとうございます。
どうも中途半端にプロパティを設定していたのが原因でした。
(おそらく各ColumnのDataFieldの設定をしていなかったため)
やはりわかる人に頼りすぎちゃうんですよね(^^;
もうちょっと自分で答えを探して、考えてから教えていただくように心がけますね。
ありがとうございました。
ツイート | ![]() |