Принудительная проверка строки вызова просмотра данных после завершения ввода

Я создаю Form с Bound Datagridview внутри него. На Form_Load или же Row_ValidatingЯ добавил новую строку в Datagridview от:

Private Sub PurchaseInRowAdd()
        'add new row to datagridview
        Dim dtRow As DataRow = CType(Me.dgvPurchaseIn.DataSource, DataTable).NewRow()
        dtRow.Item("InvoiceID") = 0
        dtRow.Item("KindID") = CType(CType(Me.dgvPurchaseIn.Columns("colPurchaseKind"), DataGridViewComboBoxColumn).DataSource, DataTable).Rows(0)("KindID")
        dtRow.Item("InvoiceSign") = ""
        dtRow.Item("InvoiceNo") = ""
        dtRow.Item("InvoiceDate") = New Date(objController.ProcessYear, objController.ProcessMonth, 1)
        dtRow.Item("ID") = CType(CType(Me.dgvPurchaseIn.Columns("colPurchaseCustomer"), DataGridViewComboBoxColumn).DataSource, DataTable).Rows(0)("ID")
        dtRow.Item("Product") = ""
        dtRow.Item("Price") = "0.00"
        dtRow.Item("Note") = ""
        dtRow.Item("Tax") = CType(CType(Me.dgvPurchaseIn.Columns("colPurchaseKind"), DataGridViewComboBoxColumn).DataSource, DataTable).Rows(0)("Tax")
        dtRow.Item("TaxCode") = CType(CType(Me.dgvPurchaseIn.Columns("colPurchaseCustomer"), DataGridViewComboBoxColumn).DataSource, DataTable).Rows(0)("TaxCode")
        dtRow.Item("VAT") = ""

        CType(Me.dgvPurchaseIn.DataSource, DataTable).Rows.Add(dtRow)
    End Sub

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

Я нашел это решение, но оно не подходит для моего случая, потому что я не хочу устанавливать Enable Adding в True, Я хочу обрабатывать добавление строк по коду.

1 ответ

Решение

Я нашел решение, я подкласс DataGridView и переопределить ProcessDialogKey как это:

protected override bool ProcessDialogKey(Keys keyData)
        {
            if(keyData == Keys.Enter)
            {
                KeyEnterPress(this, new EventArgs());
            }
            return base.ProcessDialogKey(keyData);
        }

(Я написал этот подкласс в C#)

Затем обработайте ключ введите нажмите в моей форме, как это

Private Sub PurchaseInCellKeyDown(ByVal sender As Object, ByVal e As EventArgs)
        If Me.dgvPurchaseIn.CurrentRow.Index = Me.dgvPurchaseIn.Rows.Count - 1 Then
            If PurchaseInRowValidate(Me.dgvPurchaseIn.CurrentRow.Index, True) Then
                Me.PurchaseInRowAdd()
                Me.deselectPurchaseCell(Me.dgvPurchaseIn.CurrentRow.Index)
                Me.dgvPurchaseIn.Rows(Me.dgvPurchaseIn.Rows.Count - 1).Cells("colPurchaseSign").Selected = True
            End If
        End If
    End Sub

Эта строка:

Me.dgvPurchaseIn.Rows(Me.dgvPurchaseIn.Rows.Count - 1).Cells("colPurchaseSign").Selected = True

вызовет проверку строки

Другие вопросы по тегам