自己写一个类啊,继承DataGridTextBoxColumn,然后,你再在你的应用程序中修改你的DataGrid里面的列,就是定义为MyDataGridComboBoxColumn,给你看看这个代码,不知道对你有没有用:
public class MyDataGridComboBoxColumn : DataGridTextBoxColumn
{
public ComboBox ColumnComboBox = null;
private System.Windows.Forms.CurrencyManager _source = null;
private int _rowNum;
private bool _isEditing = false;

public MyDataGridComboBoxColumn()
{
ColumnComboBox = new ComboBox();
    
ColumnComboBox.KeyPress+=new KeyPressEventHandler(Text_KeyPress);
ColumnComboBox.Leave += new EventHandler(LeaveComboBox);
ColumnComboBox.SelectedIndexChanged += new System.EventHandler(ComboIndexChanged);
ColumnComboBox.SelectionChangeCommitted += new System.EventHandler(ComboStartEditing);
}

public void MyComboValueChanged(int rowChanging, object newValue)
{
Console.WriteLine("index changed {0} {1}", rowChanging, newValue);
} private void ComboStartEditing(object sender, EventArgs e)
{
_isEditing = true;
base.ColumnStartedEditing((Control) sender);
}

private void ComboIndexChanged(object sender, EventArgs e)
{
MyComboValueChanged(_rowNum , ColumnComboBox.Text); 
} private void LeaveComboBox(object sender, EventArgs e)
{
if(_isEditing)
{
SetColumnValueAtRow(_source, _rowNum, ColumnComboBox.Text);
_isEditing = false;
Invalidate();
}
ColumnComboBox.Hide();

}



public event  EventHandler EnterKeyPress; private void Text_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e)
{
if(e.KeyChar==(char)13)
{
if(EnterKeyPress!=null)
{
EnterKeyPress(ColumnComboBox,new System.EventArgs());
}
}
} public Color Column_BackColor
{
get
{
return ColumnComboBox.BackColor;
}
set
{
ColumnComboBox.BackColor=value;
}
} public Color Column_ForeColor
{
get
{
return ColumnComboBox.ForeColor;
}
set
{
ColumnComboBox.ForeColor=value;
}
}
}