微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

C#DataGridView KeyPress

如何解决C#DataGridView KeyPress

| 当客户键入名称名称的一部分并按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。 是这样吗 无论哪种方式,如何解决此问题? 像往常一样感谢您的帮助!     

解决方法

        尽管我不确定为什么不显示它,但在这里我可以分享几点。 设置单元格值与离开单元格没有任何关系。 从代码风格来看,如果(dgv_Checks.CurrentRow == null)返回,则可能;可能导致控件在执行其他语句之前返回。您可以注释此行并查看其运行方式,也可以调试以查看dgv_Checks.CurrentRow的值。 (我无法猜测那是什么) 您可以调试以检查checkTrans.IndividualCheck.NameOnCheckColumn.ColumnName的值是多少,因为这将为数据行提供索引。还要检查cs.NameOnAccount中的值。 总之,调试代码应该为您提供更好的主意,如果仍然无法解决问题,则可以发布调试后的值。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。