かなり奇妙な何か。バインドされていない CheckBox 列を持つ DataGridView があります。ComboBox の選択された項目が変更されると、DataGridView の DataSource が更新されます (ComboBox で選択されている内容に応じて、ここにはバインディングはなく、条件ステートメントのみです)。DataSource が更新された後、コレクションを反復処理し、それに応じて CheckBox 列の値を設定します。これはうまくいきます。ただし、コンストラクターで ComboBox の SelectedItem を設定して、フォームの読み込み時に ComboBox に値が存在するようにすることにしたとき、同じメソッドで CheckBox セルの状態を更新できませんでした。デバッガーは、値が true に設定されていることを示しています。
public LocksForm()
{
InitializeComponent();
AddDataGridColumns();
GetLookupData();
cboLockType.SelectedIndexChanged += cboLockType_SelectedIndexChanged;
//Setting this fires the event but the checkboxes in the grid remain unchecked
cboLockType.SelectedItem = cboLockType.Items[0];
}
private void cboLockType_SelectedIndexChanged(object sender, EventArgs e)
{
//Bind the data to the grid etc.
UpdateLocks()
}
// This works but not when fired from the Form constructor, only when user selects a value from ComboBox at Runtime
private void UpdateLocks()
{
if (_lockedIDs != null && _lockedIDs.Any())
{
for (int j = 0; j < dgLocks.RowCount; j++)
{
if (_lockedIDs.Contains((Guid)dgLocks[0, j].Value))
{
dgLocks[1, j].Value = true;
}
}
}
}