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 以附加点击事件的主要内容,如果未能解决你的问题,请参考以下文章