今天在写代码时碰到一个需求 DataGridView问题,需要触发DataGridViewComboBoxCell选中值后在调用其他方法
打开vs试了下没有找到能直接触发DataGridViewComboBoxCell中combobox的值改变的事件,郁闷了半天,写出一段代码
在DataGridView的CellValueChanged(单元格的值发生改变时)事件中写如下代码
private void ChildTaskGridview_CellValueChanged(object sender, DataGridViewCellEventArgs e)
{
if (e.RowIndex >= 0 && e.ColumnIndex >= 0)
{
DataGridViewComboBoxColumn combo = ChildTaskGridview.Columns[e.ColumnIndex] as DataGridViewComboBoxColumn;
if (combo != null) //如果该列是ComboBox列
{
ChildTaskGridview.BeginEdit(false); //结束该列的编辑状态
DataGridViewComboBoxEditingControl comboEdite = ChildTaskGridview.EditingControl as DataGridViewComboBoxEditingControl;
if (comboEdite != null)
{
下面就可以写需要实现的方法
TaskAllotManager TaskMg = new TaskAllotManager();
//这里获取DataGridViewComboBox选中的值
string dept = Convert.ToString(ChildTaskGridview.SelectedRows[0].Cells["CheckDept"].FormattedValue);
TaskCheck.DataSource = TaskMg.GetDutyPerson(dept, 1);
TaskCheck.DisplayMember = "CheckUser";
TaskCheck.ValueMember = "CheckUserID";
}
}
//DataGridViewTextBoxColumn textbox = ChildTaskGridview.Columns[e.ColumnIndex] as DataGridViewTextBoxColumn;
//if (textbox != null) //如果该列是TextBox列
//{
// ChildTaskGridview.BeginEdit(true); //开始编辑状态
//}
}
方法2
CellEnter事件
private void dataGridView_CellEnter(object sender, DataGridViewCellEventArgs e)
{
DataGridView dgv = sender as DataGridView;
if (dgv != null)
{
if (dgv.Columns[e.ColumnIndex].Name == "combo" &&
dgv.Columns[e.ColumnIndex] is DataGridViewComboBoxColumn)
{
SendKeys.Send("{F4}"); //选中ComboBox列时,相当于按了键盘的F4键
}
}
}