我在这里和其他网站上看到了几篇与我的问题/问题类似的帖子,但从未真正看到任何直接针对目标并给出好的答案的帖子(如果我在搜索中遗漏了一个,请指出它! )。如果这很长,请原谅我,但我想尽可能完整/准确地描述......提前感谢您的帮助!
我有一个带有并排 datagridviews (dgdApplications & dgdEligibleFiles) 的 Windows 窗体。dgdApplications 设置为 FullRowSelect 和验证 (CausesVailidation = true)。dgdEligibleFiles 包含一个文件列表和文件信息,以及一个复选框列 - 如果选中了一行,它所代表的文件将“分配”给 dgdApplications 中的选定行(dgdApplications 中的行/应用程序可能分配有许多文件) . 如果用户更改了他在 dgdEligibleFiles 中的分配(选中/未选中的一行/多行)而没有单击表单底部的保存按钮,然后单击 dgdApplications 中的另一行,我目前使用 dgdApplications_RowValidating 弹出一个消息框并验证用户想要继续新选择的应用程序/行而不保存更改。如果单击“否”按钮,我调用 e。取消留在原来的行。如果“是”,我想在新行上继续 dgdApplications_MouseClick,这将执行以下操作:清除 dgdEligibleFiles 中的复选框,检索 dgdApplications 中新选择的应用程序的文件列表,并更新底层中的选中/选择值绑定到 dgdEligibleFiles 的列表(后跟 dgdEligibleFiles.Refresh())。
我的问题:当消息框显示在 dgdApplications.RowValidating 中并且用户选择“是”继续(放弃 dgdEligibleFiles 中的更改并转到 dgdApplications 中的新行)时,dgdApplications_MouseClick 不会执行并且 dgdEligbleFiles 中没有任何更改。如何让 dgdApplications_MouseClick 执行?
void dgdApplications_RowValidating(object sender, DataGridViewCellCancelEventArgs e)
{
if (assgnmtChgd && (MessageBox.Show("You will lose unsaved changes - continue?", "", MessageBoxButtons.YesNo) == DialogResult.No))
{
e.Cancel = true;
return;
}
}
/// <summary>
/// Handles the selection of an application when it's datagridview row is clicked
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void dgdApplications_MouseClick(object sender, MouseEventArgs e)
{
// Reset the DisplayAssignedOnly checkbox so all dgdEligibleFiles rows will be unhidden and displayed
chkDispAssgndOnly.CheckState = CheckState.Unchecked;
ClearFilesGrid();
dgdApplications.CurrentRow.Selected = true;
currentAppRowID = dgdApplications.CurrentRow.Index;
currentAppRecID = (int)dgdApplications.CurrentRow.Cells["appIDColumn"].Value;
dgdEligibleFiles.ClearSelection();
dgdEligibleFiles.CurrentCell = null;
MatchAssignedFiles(currentAppRecID);
dgdEligibleFiles.Refresh();
//Set the indicator showing that no assignments have been changed
assgnmtChgd = false;
}