興味深い問題が発生しました。 DataGridViewにDataGridViewRowを1つだけ追加すると、すべて正常に動作します。DataGridView.Rows [0]は、追加された行です。 2番目のDataGridviewRowを追加すると、実際のDataGridViewRowsはもう追加されませんが、代わりにクローンが追加されます。完全に同じように見えるが実際には同じ目的ではないクローン。2番目のDatagridViewRowの結果をクローンに追加
私が知りたいのは、この動作がどこから来ているのか、可能であれば実際の行の代わりにクローンを追加するのを止める方法です。私はReflectorでDataGridViewRowCollectionのコードを調べましたが、何も見つからなかったのですが、おそらく私は何かを見逃していました。
DataGridView dgv = new DataGridView { AllowUserToAddRows = false };
DataGridViewTextBoxColumn dgColumn = new DataGridViewTextBoxColumn();
dgv.Columns.Add(dgColumn);
DataGridViewRow drFirst = new DataGridViewRow();
dgv.Rows.Add(drFirst); // Comment this line to showcase the problem
DataGridViewRow drSecond = new DataGridViewRow();
drSecond.Tag = new object();
dgv.Rows.Add(drSecond);
// When drFirst is added this is false - when it isn't this is true (as it should always be?)
bool thisSeemsWrong = object.ReferenceEquals(dgv.Rows[dgv.Rows.Count - 1], drSecond);
// Always true
bool thisSeemsRight = object.ReferenceEquals(dgv.Rows[dgv.Rows.Count - 1].Tag, drSecond.Tag);
私にとっては、常にVB.NETを使用して「false」です。 –
それは非常に奇妙です - 私は間違いなく "dgv.Rows.Add(drFirst);"コメントアウトされています。 – TomMhC