C # DataGridView KeyPress - PullRequest
       5

C # DataGridView KeyPress

1 голос
/ 31 мая 2011

Я должен выполнить поиск, когда клиент вводит часть имени и нажимает клавишу 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 голосов
/ 31 мая 2011

Хотя я не уверен, почему он не отображается, я могу поделиться здесь несколькими моментами.

  1. Установка значения ячейки не имеет никакого отношения к выходу из ячейки.

  2. Из стиля кода возможно, что if (dgv_Checks.CurrentRow == null) return; может привести к возврату элемента управления перед выполнением других операторов. Вы можете либо прокомментировать эту строку и посмотреть, как она работает, либо отладить, чтобы увидеть значение dgv_Checks.CurrentRow. (Я не могу догадаться, что это такое)

  3. Вы можете выполнить отладку, чтобы проверить значение checkTrans.IndividualCheck.NameOnCheckColumn.ColumnName, поскольку это служит индексом для строки данных. Также проверьте значение в cs.NameOnAccount.

Таким образом, отладка вашего кода должна дать вам лучшее представление, и вы можете опубликовать отлаженные значения, если вы все еще не получили ответ на этот вопрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...