我有一个 DataGridView,我希望用户能够直接向其中添加记录。这是通过单击 DGV 下方的链接来完成的,此时以编程方式添加了一个新行,第一个可见单元格是 ComboBoxCell 类型。我如何做到这一点的代码摘录是:
// Add a new row to DGV
DataGridView dgv = this.dgvInformation;
DataGridViewRow newRow = new DataGridViewRow();
dgv.Rows.Add(newRow);
// Create cells and add to row
DataGridViewComboBoxCell cellInfoType = new DataGridViewComboBoxCell();
newRow.Cells["InfoType"] = cellInfoType;
// Create DataSource based off LINQ query here
List<ComboItemAccountInfoType> comboDataSource = new List<ComboItemAccountInfoType>();
// List is populated here
// Assign DataSource to combo cell
cellInfoType.DataSource = comboDataSource;
cellInfoType.ValueMember = "AccInfoTypeID";
cellInfoType.DisplayMember = "InfoType";
// Scroll new row into view and begin editing
dgv.FirstDisplayedScrollingRowIndex = dgv.Rows.Count - 1;
dgv.CurrentCell = dgv[1, dgv.Rows.Count - 1];
dgv.BeginEdit(true);
DataSource 包含一些 ID 为 -1 的值,这些值是用户不应选择的类别,所有其他值都有其有效的数据库 ID。这一切都很好,除了如果用户选择了 -1 行,我无法继续编辑组合单元格,因为它只是将值存储在单元格中,我无法再激活下拉菜单。我已将以下代码添加到 _CellValueChanged 事件中,但没有任何效果:
private void dgvInformation_CellValueChanged(object sender, DataGridViewCellEventArgs e)
{
DataGridView dgv = this.dgvInformation;
DataGridViewCell cell = dgv[e.ColumnIndex, e.RowIndex];
// If type of cell is ComboBox then
if (cell.GetType() == typeof(DataGridViewComboBoxCell))
{
DataGridViewComboBoxCell cellInfoType = (DataGridViewComboBoxCell)cell;
if ((int)cellInfoType.Value == -1)
{
MessageBox.Show("Going back into edit mode...");
dgv.CurrentCell = cell;
dgv.BeginEdit(true);
}
else
{
MessageBox.Show(cellInfoType.Value.ToString());
}
}
}
移动到另一个单元格后,我确实在此处收到“正在返回编辑模式...”消息,但它并没有按照它所说的去做!任何人都可以解释为什么它不会回到编辑模式,或者有没有办法防止值在被选择后立即被锁定?
非常感谢!