C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

DataGridVew の表示について

[トピック内 7 記事 (1 - 7 表示)]  << 0 >>

■94566 / inTopicNo.1)  DataGridVew の表示について
  
□投稿者/ Kitakitune (1回)-(2020/04/21(Tue) 16:57:22)

分類:[VB.NET/VB2005 以降] 

Visual Studio 2019 vb.net でwindws フォームアプリを作成しています

TabControl上のDataGridVew のデータ表示が思うようにならず、質問させて頂きます。

メインフォーム上にタブコントロールを置いてDataGridView(以下DGV とします) を page_02 に置きます。

データベースに接続して、DGVにデータを取り込みます。

その後アプリ側で、DGVにcolumn を追加して、
追加したcolumnの各々のセルにデータを追加します。

この時追加したcolumnのセルのデータが表示されません。

データを追加した各セルの .value は意図した値(string型)を持っているのですが、
(MsgBoxで表示して検証してみました。)
DGVのセルに表示されません。

一度タブをpage_01 に切り替えて再度page_02 に戻すと意図した値で表示します。

最初に column とデータを追加した時点で表示できないのは、何故なのかわかりません。
御教示いただければ、幸いです。

以下、もう少し詳しく処理の内容を記述します。

1)メインフォーム ロード
この時はタブコントロールは page_01 を表示

2)タブコントロール切り替え時 (page_01→page_02 Page_01.enter で判別)

db(mysql)問い合わせ(sql発行)データ取得

DGVにfill してDGV作成

3)上記 DGVに column 追加した後、追加したセルにデータ追加

4)db より取得したデータは表示されているが

  アプリサイドで追加したデータは非表示(追加したカラム・セル自体は表示される)

5)一旦、page_01 をクリックしてもう一度page_02 に切り替えると

  全てのセルの値をを表示

6)尚、検証のため、DGVをTabControlから外し

  メインフォーム上に直接置いた場合は

  Column を追加してデータを入れた時点で追加したタイミングでデータも表示しました。

描画のタイミングの問題かなとも推測して、reflesh とか update をしてみましたが、
状況に変わりありません。
(この辺りは、何も分からないのですが)
以上です。最後までお読みくださった方、ありがとうございます。

拙文にて、御理解いただけたかどうか不安ですが、
解決法御呈示頂ける方おられましたら、宜しくお願いします。
引用返信 編集キー/
■94567 / inTopicNo.2)  Re[1]: DataGridVew の表示について
□投稿者/ 魔界の仮面弁士 (2697回)-(2020/04/21(Tue) 17:07:30)
No94566 (Kitakitune さん) に返信
> 一度タブをpage_01 に切り替えて再度page_02 に戻すと意図した値で表示します。
> 最初に column とデータを追加した時点で表示できないのは、何故なのかわかりません。

Load イベントで、
 page_01.Visible = True
とした場合、改善されますか?
http://bbs.wankuma.com/index.cgi?mode=al2&namber=7749&KLOG=19


> 3)上記 DGVに column 追加した後、追加したセルにデータ追加

DGV.AutoGenerateColumns は True / False いずれでしょうか。
引用返信 編集キー/
■94569 / inTopicNo.3)  Re[2]: DataGridVew の表示について
□投稿者/ Kitakitune (2回)-(2020/04/21(Tue) 17:38:52)
No94567 (魔界の仮面弁士 さん) に返信
> ■No94566 (Kitakitune さん) に返信

> Load イベントで、
>  page_01.Visible = True
> とした場合、改善されますか?

page_02.enter 時に、最初に
page_02.visible = true
とすることで解決しました。

取り敢えず、描画のタイミングで
こういうことも起るんだなという解釈をして
もう一度、御指摘の点、自分なりに考察してみようと思います。

>>3)上記 DGVに column 追加した後、追加したセルにデータ追加
>
> DGV.AutoGenerateColumns は True / False いずれでしょうか。

AutoGenerateColumns 
DVG のプロパティを御指摘かと思われますが、
当方のプロパティには項目をさがしても見つけることができません。
(私が、大きな勘違いをしているのかもしれません)

貴重な御指摘と御意見いただきまして(しかも迅速に)
本当にありがとうございました。


引用返信 編集キー/
■94570 / inTopicNo.4)  Re[3]: DataGridVew の表示について
□投稿者/ 魔界の仮面弁士 (2698回)-(2020/04/21(Tue) 17:42:55)
No94569 (Kitakitune さん) に返信
> page_02.enter 時に、最初に
> page_02.visible = true
> とすることで解決しました。
Enter のたびでなくても、
Load 時に page_02.Visible = True しておくだけでも
効果があるかもしれません。

> AutoGenerateColumns 
> DVG のプロパティを御指摘かと思われますが、
> 当方のプロパティには項目をさがしても見つけることができません。
デザイン時には表示されません。実行時専用プロパティです。
https://docs.microsoft.com/ja-jp/dotnet/api/system.windows.forms.datagridview.autogeneratecolumns?view=netframework-4.8

AutoGenerateColumns プロパティの既定値は True ですが、Windows フォームデザイナーの DataSource を設定すると、
AutoGenerateColumns プロパティが False に自動的に設定されます。
引用返信 編集キー/
■94571 / inTopicNo.5)  Re[4]: DataGridVew の表示について
□投稿者/ Kitakitune (3回)-(2020/04/21(Tue) 18:02:57)
No94570 (魔界の仮面弁士 さん) に返信
> ■No94569 (Kitakitune さん) に返信
> Enter のたびでなくても、
> Load 時に page_02.Visible = True しておくだけでも
> 効果があるかもしれません。

御指摘の通りでした。
何をしているのかは、まだ正確に理解できておりません。
それについては、自己解決しようと思います。

もうひとつ、もしよろしければなんですが、、、。
もし Load 時に page_02.Visible = True とした行にコメントを
付けるとしたら貴兄ならどのようになさりますか?

>
>>AutoGenerateColumns 
> デザイン時には表示されません。実行時専用プロパティです。
> https://docs.microsoft.com/ja-jp/dotnet/api/system.windows.forms.datagridview.autogeneratecolumns?view=netframework-4.8
>
> AutoGenerateColumns プロパティの既定値は True ですが、Windows フォームデザイナーの DataSource を設定すると、
> AutoGenerateColumns プロパティが False に自動的に設定されます。

勉強します。

返す返すも、貴重な御意見と御指摘ありがとうございました。

引用返信 編集キー/
■94572 / inTopicNo.6)  Re[5]: DataGridVew の表示について
□投稿者/ 魔界の仮面弁士 (2699回)-(2020/04/21(Tue) 18:54:01)
No94571 (Kitakitune さん) に返信
>>Enter のたびでなくても、
>>Load 時に page_02.Visible = True しておくだけでも
>>効果があるかもしれません。
> 何をしているのかは、まだ正確に理解できておりません。
> それについては、自己解決しようと思います。

For Each で全てのタブページを列挙して、
それぞれの Show メソッドを呼び出すという方法もあります。
https://dobon.net/vb/bbs/log3-41/24785.html
https://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=46356&forum=7

DataGridView のある TabPage が 1 つだけの場合は、
For Each する必要は無さそうです。


> もうひとつ、もしよろしければなんですが、、、。
> もし Load 時に page_02.Visible = True とした行にコメントを
> 付けるとしたら貴兄ならどのようになさりますか?

自分ならどうするかなぁ…たとえばこんな感じ?


Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
  Me.PreloadTabPages()
End Sub


''' <summary>
''' TabPage は初回表示時まで生成されないが、それだと DataGridView の描画が
''' 崩れることがあるため、TabPage を事前ロードしておく
''' </summaty>
Private Sub PreloadTabPages()
  Me.page_02.Show()
End Sub
引用返信 編集キー/
■94576 / inTopicNo.7)  Re[6]: DataGridVew の表示について
□投稿者/ Kitakitune (4回)-(2020/04/21(Tue) 22:46:19)
No94572 (魔界の仮面弁士 さん) に返信
全てのご指摘が、的確かつ有意義なものでした。
私の質問が貴兄の御目に留まった偶然と貴兄にご返答頂けたことに
心より感謝いたします。
ありがとうございました。

引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ