处理的细胞验证事件如下...
void dataGridView1_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)
{
if (cell is DataGridViewComboBoxCell)
{
DataGridViewComboBoxCell cell = DataGridViewComboBoxCell)dataGridView1.CurrentCell;
cell.Items.Clear();
cell.Items.Add(e.FormattedValue);
dataGridView1.CommitEdit(DataGridViewDataErrorContexts.Commit);
cell.Value = e.FormattedValue;
}
}
基本上你必须选定值添加到单元格的项目集合,然后设定值=到附加值。如果该值不在项目集合中,则会在单元格上收到DataError事件。
单元格项目集合与组合框项目集合不同。
这是如何处理基于选择设置单元格的值。
如果您处理datagridview的EditingControlShowing事件,您可以在单击时访问组合框控件,并在为用户绘制之前将所选项目设置为单元格的当前值。
void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
if (dataGridView1.CurrentCell is DataGridViewComboBoxCell
&& e.Control is DataGridViewComboBoxEditingControl)
{
DataGridViewComboBoxCell cell = (DataGridViewComboBoxCell)dataGridView1.CurrentCell;
ComboBox ctrl = (ComboBox)e.Control;
// Get Currently selected value...
string curValue = String.Empty;
if (cell.Value != null)
curValue = cell.Value.ToString();
//bind data
ctrl.DataSource = dataBaseData;
//set selected value
ctrl.SelectedItem = curValue;
}
}
有一点要记住,当你不编辑单元格的单元格的显示值是毫无关系的组合框控件,所以编辑开始时,会显示而不是值的组合框,它是你的作业来同步组合框中选择的内容和编辑后单元中显示的内容。请参阅下面的答案,了解如何执行此操作。 – 2010-02-16 00:14:39