C#DataGridView按键
当客户键入部分姓名并按F2时,我必须进行搜索 因此,如果他们键入“SMI”并按F2键,它应该搜索SMI并给出符合该条件的列表 这是我在按键上的代码:C#DataGridView按键,c#,winforms,datagridview,C#,Winforms,Datagridview,当客户键入部分姓名并按F2时,我必须进行搜索 因此,如果他们键入“SMI”并按F2键,它应该搜索SMI并给出符合该条件的列表 这是我在按键上的代码: private void ScanCheckKeyDown(object sender, KeyEventArgs e) { // Search for customer if (e.KeyCode == Keys.F2) AccountSearchScreen(); // Cancel ACH Process if (e.
private void ScanCheckKeyDown(object sender, KeyEventArgs e)
{
// Search for customer
if (e.KeyCode == Keys.F2)
AccountSearchScreen();
// Cancel ACH Process
if (e.KeyCode == Keys.F3)
if (backgroundWorker1.IsBusy) CancelAsyncButtonClick(sender, e);
// Scan Checks
if (e.KeyCode == Keys.F5)
ButtonScanChecksClick(sender, e);
// Submit & Close Batch
if (e.KeyCode == Keys.F8)
ButtonSaveClick(sender, e);
}
和AccountSearchScreen方法:
private void AccountSearchScreen()
{
if (dgv_Checks.CurrentRow == null) return;
var dr = dgv_Checks.CurrentRow;
//var name = dr.Cells[checkTrans.IndividualCheck.NameOnCheckColumn.ColumnName].Value.ToString().Trim().ToUpper();
//dr.Cells[checkTrans.IndividualCheck.NameOnCheckColumn.ColumnName].Value = name;
var searchkey = dr.Cells[checkTrans.IndividualCheck.NameOnCheckColumn.ColumnName].EditedFormattedValue == null ? string.Empty :
dr.Cells[checkTrans.IndividualCheck.NameOnCheckColumn.ColumnName].EditedFormattedValue.ToString().Trim().ToUpper();
if (searchkey.Length == 0)
{
dr.Cells[checkTrans.IndividualCheck.NameOnCheckColumn.ColumnName].ErrorText = "Please enter part of the last name to search.";
return;
}
var cs = new CustomerSearch(searchkey);
cs.ShowDialog(this);
if (cs.Branch != null && cs.Branch.Trim().Length == 2 && cs.AccountNumber != null && cs.AccountNumber.Trim().Length == 5)
{
dr.Cells[checkTrans.IndividualCheck.NameOnCheckColumn.ColumnName].ErrorText = string.Empty;
dr.Cells[checkTrans.IndividualCheck.NameOnCheckColumn.ColumnName].Value = cs.NameOnAccount;
dr.Cells[checkTrans.IndividualCheck.BranchColumn.ColumnName].Value = cs.Branch;
dr.Cells[checkTrans.IndividualCheck.AccountBalanceColumn.ColumnName].Value = GetAccountBalance(cs.Branch + cs.AccountNumber);
dr.Cells[checkTrans.IndividualCheck.AccountNumberColumn.ColumnName].Value = cs.AccountNumber;
}
else
{
dr.Cells[checkTrans.IndividualCheck.NameOnCheckColumn.ColumnName].ErrorText = "No account found for [" + dr.Cells[checkTrans.IndividualCheck.NameOnCheckColumn.ColumnName].Value + "].";
}
}
我的问题是在此处设置名称时:
dr.Cells[checkTrans.IndividualCheck.NameOnCheckColumn.ColumnName].Value=cs.NameOnAccount
它不适用。名称仍然显示“SMI”
我相信我知道为什么,如果我错了,请纠正我。它从未改变的原因是,当我按下F2键时,我从未失去名称字段的焦点,它仍然有焦点,因此在我离开该字段之前,应用编辑从未发生。然后应用SMI覆盖cs.nameoAccount
是这样吗
不管怎样,我如何解决这个问题
像往常一样谢谢你的帮助 虽然我不确定为什么不显示它,但我可以在这里分享几点
总之,调试代码应该会给您提供更好的想法,如果您仍然没有得到答案,您可以发布调试后的值。这是WinForm应用程序吗?它是C#WinForms应用程序我无法复制,但请尝试调用
dgv_Checks.EndEdit()代码>设置DGV单元格值后。是否确定KeyDown事件在网格单元格处于编辑模式时捕获在网格单元格中输入的击键?我没有看到这方面的事件。1.我知道没有,但如果EditedFormattedValue在您离开单元格后覆盖了该值,则它会。2.我正在到达设置值=cs.nameoAccount的位置。NameOnAccount确实有一个值,它设置该值,因为它在设置后显示该值。显示没有更新,在我离开单元格后,该值最终成为SMI。