【问题标题】:Unable to set DataGridViewCheckBoxCell.Value from within Form constructor无法从表单构造函数中设置 DataGridViewCheckBoxCell.Value
【发布时间】:2013-06-20 11:29:52
【问题描述】:

有些奇怪。我有一个带有未绑定 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;
                }

            }

        }
    }

【问题讨论】:

    标签: datagridviewcheckboxcell


    【解决方案1】:

    在构造函数中放置一个“显示”事件处理程序对我有用。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-03-11
      • 1970-01-01
      • 2013-10-21
      • 1970-01-01
      • 2020-04-19
      • 2010-10-11
      • 2010-12-29
      相关资源
      最近更新 更多