C#DataGridView KeyPress

时间:2011-05-31 16:06:09

标签: c# winforms datagridview

当客户输入部分名称并按F2时,我必须进行搜索。

因此,如果他们输入“SMI”并按F2,它应该搜索SMI并列出符合该标准的列表。

这是我在KeyPress上的代码:

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.NameOnAccount。

是这样的吗?

无论哪种方式,我该如何解决这个问题?

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

虽然我不确定为什么没有显示,但我可以在这里分享一些观点。

  1. 设置单元格值与离开单元格没有任何关系。

  2. 从代码的风格来看,if(dgv_Checks.CurrentRow == null)可能会返回;可能导致控件在执行其他语句之前返回。您可以对此行进行注释,看看它是如何运行或调试的,以查看dgv_Checks.CurrentRow的值。 (我无法猜出那是什么)

  3. 您可以调试以检查checkTrans.IndividualCheck.NameOnCheckColumn.ColumnName的值是什么,因为它提供数据行的索引。另请检查cs.NameOnAccount中的值。

  4. 总而言之,调试代码应该为您提供更好的想法,如果您仍然没有得到答案,您可以发布已调整的值。