我使用DataGridView显示数据,其中一列是可编辑的-用户可以双击并编辑文本;当用户点击<Enter>
时,CellValueChanged
事件被触发。
private void dgvCompanyNameAliases_CellValueChanged(object sender, DataGridViewCellEventArgs e)
{
var row = dgvCompanyNameAliases.Rows[e.RowIndex];
var companyNameMapping = (CompanyNameMapping)(row.Tag ?? row.DataBoundItem);
companyNameMapping.Alias = dgvCompanyNameAliases.CurrentCell.EditedFormattedValue.ToString();
if (String.IsNullOrWhiteSpace(companyNameMapping.Alias))
{
if (MessageBox.Show(String.Format(Resources.FrmSettings.ErrorQuestion_DeleteCompanyAliasConfirmMessage, companyNameMapping.Name),
Resources.FrmSettings.ErrorQuestion_DeleteCompanyAliasConfirmTitle,
MessageBoxButtons.YesNo,
MessageBoxIcon.Question)
== DialogResult.No)
{
return;
}
_configSettings.Policies.ProjectNamingPolicies.CompanyNameMappings.DeleteAlias(companyNameMapping, _configSettings.Username);
}
else
{
companyNameMapping.Recorded = new Recorded
{
By = _configSettings.Username,
On = DateTime.Now
};
_configSettings.Policies.ProjectNamingPolicies.CompanyNameMappings.UpdateAlias(companyNameMapping);
}
LoadCompanyNameAliases();
}
private void LoadCompanyNameAliases()
{
dgvCompanyNameAliases.DataSource = _configSettings.Policies.ProjectNamingPolicies.CompanyNameMappings.GetAllAliases()
.OrderBy(companyNameMapping => companyNameMapping.Name)
.ToList();
}
但是,尽管这样做有效,事件处理程序仍会被重复触发,直到用户在问题对话框中选择No
。
我做错了什么?
2条答案
按热度按时间qjp7pelc1#
试试这个。把它放在方法的第一行。如果isInEditMode为true,代码就可以工作。
hwazgwia2#
我通过将所有逻辑 * 从 *
CellValueChanged
事件处理程序 * 移到 *CellEndEdit
来解决这个问题。