私の問題の原因の簡単な紹介:
ユーザーのマウス入力によって調整できるDataGridView
resizable の子であるがあります。Panel
のPanel
サイズが変更されると、DataGridView
のサイズも一緒にミラーリングされます。アイデアは、グリッドの列と行がセルまたはグリッドスペースの内容に合わせて自動サイズ変更される代わりに、列と行の数がグリッドのサイズによって決定されるということです。行と列の幅と高さは事前に決定されており、調整する必要はありません。これのポイントは、ユーザーが行と列の数をすばやく調整できるようにすることです。これは、実行中のコードの短いクリップによって最もよく示されます:パネルのサイズ変更
これを実現するために、パネルのサイズが変更されているかどうかを確認し、縮小しているか拡大しているかに応じて、それに応じて列を調整します。ここではいくつかの魔法が行われていますが、基本的には次のようになります。
if(panel_width_is_growing)
{
if(margin >= growing_threshold)
{
DataGridViewColumn column = new DataGridViewColumn();
column.Name = "Run " + (dataGridView.Columns.Count + 1).ToString();
column.HeaderText = "Run " + (dataGridView.Columns.Count + 1).ToString();
dataGridView.Columns.Add(column);
}
}
if(!panel_width_is_growing)
{
if(margin <= shrinking_threshold)
{
dataGridView.Columns.RemoveAt(dataGridView.Columns.Count - 1);
}
}
さて、これが私の問題の出番です。グリッドから行を追加および削除するためにまったく同じことを行いますが、列の次元ではなく行の次元を考慮して調整されたマージンとしきい値を使用します。唯一の違いは、パネルの幅ではなく高さを見ていることです。
if(panel_height_is_growing)
{
if(margin >= row_threshold)
{
DataGridViewRow row = new DataGridViewRow();
row.HeaderCell.Value = (dataGridView.Rows.Count + 1).ToString();
dataGridView.Rows.Add(row);
}
}
行が表示されません...問題がわかりません。コードは必要なすべての行にヒットしており、ブレークポイントとステッピングによって検証されています。全体が try catch ブロックにラップされているため、RowCount プロパティがインクリメントされることはなく、アラームも発生しません。デフォルトの動作をオーバーロードするグリッドや特別な関数に関連付けられたバインディングはありません。