DOBON.NETプログラミング道掲示板

■35332 / 親記事)  フォームのリサイズ時にDataGridViewが再描画されない
  
□投稿者/ saku 一般人(6回)-(2023/01/17(Tue) 11:11:25)
  • アイコン環境/言語:[C#] 
    分類:[.NET] 

    皆さまお世話になります。

    フォーム上に、DataGridViewを配置し、AnchorはTop,Bottom,Left,Rightにしています。データ読み込み後、フォームをドラッグや最大化したときにDataGridView自体はフォームに合わせてサイズは変わるものの、データを表示している部分が再描画してくれません。(This.DataGridView1.Reflesh)

    こういったときはRefleshではなく、他に書き方があるのでしょうか?

    (リサイズ後に、編集中の項目がある場合には操作を全て覚えておいて再読み込みをした後に、順番に処理していく位しか思い浮かびませんでした。)

    皆さまはこういった場面では、どのようにプログラミングしているのでしょうか?
    ヒントだけでもいただければ大変助かります。

    宜しくお願いいたします。
マルチポストを報告
違反を報告
引用返信 削除キー/
■35333 / ResNo.1)  Re[1]: フォームのリサイズ時にDataGridViewが再描画されない
□投稿者/ KOZ 一般人(17回)-(2023/01/17(Tue) 11:44:54)
  • アイコンNo35332に返信(sakuさんの記事)

    DataGridView はリサイズすると OnResize メソッドで Invalidate() が実行され再描画されるので、特にコードを書く必要はありません。

    DataGridView.OnResize
    https://referencesource.microsoft.com/#System.Windows.Forms/winforms/Managed/System/WinForms/DataGridViewMethods.cs,6dfca71975a9ba17

    「データを表示している部分が再描画してくれません。」とはどのような状態でしょうか?
違反を報告
引用返信 削除キー/
■35334 / ResNo.2)  Re[1]: フォームのリサイズ時にDataGridViewが再描画されない
□投稿者/ 魔界の仮面弁士 大御所(1520回)-(2023/01/17(Tue) 11:47:30)
  • アイコンNo35332に返信(sakuさんの記事)
    > This.DataGridView1.Reflesh
    This → this では?
    DataGridView1 → dataGridView1 では?
    Reflesh → Refresh では?

    ※ fresh:新鮮な
    ※ flesh:肉


    > データを表示している部分が再描画してくれません。
    CellPaiting イベントなどの、何か追加の処理を書いていたりしますか?
    現象を再現可能な、最小実験用のプロジェクトをどこかにアップロードしていただくか、
    あるいは .zip で添付してもらえないでしょうか。
    (サイズを抑えるため、bin や obj などは含めないでください)

    手元の環境で、Form 上に DataGridView を直接貼ったうえで
    下記を試しましたが、事象を再現できませんでした。
    (.NET Framework 4.8.1 および .NET Framework 3.5 で確認)


    var dt = new DataTable();
    for(int i = 1; i <= 15; i++)
    {
      dt.Columns.Add("Col" + i, typeof(int));
    }
    for (int r = 100; r < 200; r++)
    {
      dt.Rows.Add(Enumerable.Range(r + 1, 15).Cast<object>().ToArray());
    }
    dt.AcceptChanges();
    dataGridView1.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right;
    dataGridView1.Columns.Clear();
    dataGridView1.AutoGenerateColumns = true;
    dataGridView1.DataSource = dt;
違反を報告
引用返信 削除キー/
■35335 / ResNo.3)  Re[2]: フォームのリサイズ時にDataGridViewが再描画されない
□投稿者/ saku 一般人(8回)-(2023/01/17(Tue) 13:04:28)
  • アイコン早々のご回答ありがとうございました。
    今回は、既にあるシステム内にDataGridViewのコントロールが既にあり、
    それを継承して使用していました。


    再描画されない状態なのですが、
    フォームの真ん中にDataGridViewを配置、その下にボタンがついています。
    フォームを下にドラッグして、DataGridViewの表示できる行を増やしたところ、
    下に広げた部分は前の表示が残ってしまいます。

    ※外に出せないため、その再描画されない状態だけ画像を添付します。

    説明が下手くそですいません。

    継承したコントロールに問題があるのかもしれません。
    そこだけのプロジェクト作って検証してみます。

    ありがとうございました。



    No35333に返信(KOZさんの記事)
    > ■No35332に返信(sakuさんの記事)
    >
    > DataGridView はリサイズすると OnResize メソッドで Invalidate() が実行され再描画されるので、特にコードを書く必要はありません。
    >
    > DataGridView.OnResize
    > https://referencesource.microsoft.com/#System.Windows.Forms/winforms/Managed/System/WinForms/DataGridViewMethods.cs,6dfca71975a9ba17
    >
    > 「データを表示している部分が再描画してくれません。」とはどのような状態でしょうか?
992×315 => 250×79
イメージ
g1117.png
/13KB
違反を報告
引用返信 削除キー/
■35337 / ResNo.4)  Re[3]: フォームのリサイズ時にDataGridViewが再描画されない
□投稿者/ saku 一般人(11回)-(2023/01/17(Tue) 20:16:44)
  • アイコンその後、システム内のプログラムを見直してみました。

    継承コントロールの方でバグが見つかりました。(SuspendLayout、ResumeLayoutの設置位置と削除し忘れ)
    それが原因だったようで、バグ修正後は正しく動くようになりました。

    お手数をおかけしました。
    解決済みとさせていただいます。

    皆さまのご返答で解決の糸口になったこと、感謝します。
    ありがとうございました。
解決み!
違反を報告
引用返信 削除キー/



スレッド内ページ移動 / << 0 >>

このスレッドに書きこむ

Mode/  Pass/


- Child Tree -