DataGridViewComboBoxColumn - 访问 ComboBox 以附加点击事件

Posted

技术标签:

【中文标题】DataGridViewComboBoxColumn - 访问 ComboBox 以附加点击事件【英文标题】:DataGridViewComboBoxColumn - access ComboBox to attach click event 【发布时间】:2015-10-12 09:39:08 【问题描述】:

我想创建DataGridViewComboBoxColumn 并附加到它的组合框Click 事件(我想只在点击时生成它的数据源)。

【问题讨论】:

该帖子回答了您将处理程序附加到该组合框的单击事件的要求,但我建议您在Load 表单事件中设置ComboBoxColumn 的数据源。 您也可以附加到DataGridView.CellContentClick 并为ComboBox 列的列索引处理它。但我同意 Reza 提供的警告。 @user3662546 当您发现有帮助的答案时,您可以单击问题旁边的复选标记以接受它。您只能接受一个答案,而您可以投票给您认为有帮助的尽可能多的答案,包括通过单击向上箭头接受的答案。这样你的答案就会更有帮助。您也可以为好的问题投票。 :) 【参考方案1】:

虽然我不知道您为什么需要 Click 事件的 ComboBox 控件, 您可以使用EditingControlShowing 事件访问该组合框:

private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)

    //Check if the event is for your column, for example column 1
    if (this.dataGridView1.CurrentCell.ColumnIndex == 1)
    
        var comboBox = e.Control as DataGridViewComboBoxEditingControl;
        comboBox.Click -= comboBox_Click;
        comboBox.Click += comboBox_Click;
    


private void comboBox_Click(object sender, EventArgs e)

    var comboBox = sender as DataGridViewComboBoxEditingControl;
    //use comboBox here

但您应该知道,您也可以在 datagridview 的 CellClick 事件中为您设置 DataSource 列:

private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)

    if(e.ColumnIndex==1 && e.RowIndex>-1)
    
        //Check if the event is for your column, for example column 1
        var column = (DataGridViewComboBoxColumn)this.dataGridView1.Columns[e.ColumnIndex];
        //use column.DataSource   
    

您应该知道的另一件重要事情是,如果您设置的数据源不包含该列的某个单元格的值,则在呈现该列时会收到错误消息。

【讨论】:

感谢您的回答,它有效(我使用了 CellClick 选项)。我需要它,因为数据源包含从 web 服务获取的约 2900 条记录,这需要时间。虽然组合框对用户始终可见,但使用它是可选的,所以我不想不必要地加载它。 @user3662546 不客气:) 好主意,下一次你可以考虑的另一个主意是异步加载数据。

以上是关于DataGridViewComboBoxColumn - 访问 ComboBox 以附加点击事件的主要内容,如果未能解决你的问题,请参考以下文章