无法从Form构造函数中设置DataGridViewCheckBoxCell.Value

时间:2013-06-20 11:29:53

标签: datagridviewcheckboxcell

有点奇怪。我有一个带有未绑定CheckBox列的DataGridView。当ComboBox的选定项更改DataGridView时,它的DataSource已更新(根据ComboBox中选择的内容,此处没有绑定,只是条件语句)。更新DataSource后,我遍历一个集合并相应地设置CheckBox列的值。这很好用。但是,当我决定尝试在构造函数中设置ComboBox的SelectedItem以便在Form加载时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;
                }

            }

        }
    }

1 个答案:

答案 0 :(得分:0)

在构造函数中放置一个“Shown”EventHandler为我工作。

this.Shown += LocksForm_Shown;

void LocksForm_Shown(object sender, EventArgs e)
    {
        cboLockType.SelectedItem = cboLockType.Items[0]; 
    }

这并不能解释为什么会发生这种情况。如果有人知道我有兴趣听到答案。