pravin9455 Ответов: 1

Как проверить datagridview из cellcontent нажмите кнопку in VB.NET или с#


Привет
Я хочу проверить содержимое ячейки datagrid из события щелчка содержимого ячейки.

у меня есть ниже подпрограмма для проверки ячейки

Private Sub DgvCodeValadate(ByRef Dgv As DataGridView, e As DataGridViewCellValidatingEventArgs)
     If IsNumeric(Dgv.Rows(e.RowIndex).Cells("ColItemCode1").Value) And Len(Trim(Dgv.Rows(e.RowIndex).Cells("ColItemCode1").Value)) = 6 Then

         Call RSData("Select * from TblStockItemMaster")
         Dim ABB As Integer = 0
         If DBCnCommonDataTable.Rows.Count > 0 Then
             Dim DTRNO As Integer = 0

             For dtrn = 0 To DBCnCommonDataTable.Rows.Count - 1
                 If Trim(DBCnCommonDataTable.Rows(dtrn)("StockCode")) = Dgv.Rows(e.RowIndex).Cells("ColItemCode1").Value Then
                     Dgv.Rows(e.RowIndex).Cells("ColItemName1").Value = Trim(DBCnCommonDataTable.Rows(dtrn)("StockItemName"))
                     Dgv.Rows(e.RowIndex).Cells("ColUOM1").Value = Trim(DBCnCommonDataTable.Rows(dtrn)("UOM"))
                     Dgv.Rows(e.RowIndex).Cells("ColInvAcct1").Value = Trim(DBCnCommonDataTable.Rows(dtrn)("InventoryGL"))
                     ABB = 1
                 End If
             Next

         End If
         DBCnClose()
         If ABB = 0 Then
             e.Cancel = True
             MsgBox("Item code Not found ,Enter valid code")
         End If
     Else

         Dgv.Rows(e.RowIndex).Cells("ColItemCode1").Value = ""


     End If
 End Sub


я пытаюсь вызвать этот sub из события cellContentClick datagrid как показано ниже но не работает


Private Sub DgvItemSerch_CellContentClick(sender As Object, e As DataGridViewCellEventArgs) Handles DgvItemSerch.CellContentClick

        Call DgvCodeValadate(DgvStockItem, e)

    End Sub

это подчеркивание е с красным и дает ошибку


Ошибка :
Цитата:
Значение типа 'DataGridViewCellEventArgs' не может быть преобразовано в 'DataGridViewCellValidatingEventArgs'.


как я могу устранить эту ошибку? При необходимости могу дать более подробную информацию.

Что я уже пробовал:

Private Sub DgvItemSerch_CellContentClick(sender As Object, e As DataGridViewCellEventArgs) Handles DgvItemSerch.CellContentClick

       Call DgvCodeValadate(DgvStockItem, e)

   End Sub



я пытался измениться
e As DataGridViewCellEventArg
с
e As DataGridViewCellValidatingEventArgs


это дает еще одну ошибку

Цитата:
Метод DgvItemSerch_CellContentClick' не может обрабатывать событие CellContentClick '' потому что они не имеют совместимой сигнатурой.

1 Ответов

Рейтинг:
1

Richard Deeming

Ты не можешь. DataGridViewCellEventArgs[^] - это совершенно другой класс, чем DataGridViewCellValidatingEventArgs[^]. Нет никакого способа, чтобы преобразовать от одного к другому. Метод, принимающий одно событие, не может обработать событие, посылающее другое.

И DataGridViewCellValidatingEventArgs класс не имеет открытого конструктора, поэтому вы не можете создать его новый экземпляр для передачи в свой метод проверки.

Лучшее, что вы можете сделать, - это извлечь код проверки в отдельную функцию и передать соответствующие свойства из отдельных классов args событий.

Private Function DgvCodeValidate(ByVal rowIndex As Integer, ByVal columnIndex As Integer) As Boolean
     If IsNumeric(Dgv.Rows(rowIndex).Cells("ColItemCode1").Value) And Len(Trim(Dgv.Rows(rowIndex).Cells("ColItemCode1").Value)) = 6 Then

         Call RSData("Select * from TblStockItemMaster")
         Dim ABB As Integer = 0
         If DBCnCommonDataTable.Rows.Count > 0 Then
             Dim DTRNO As Integer = 0

             For dtrn = 0 To DBCnCommonDataTable.Rows.Count - 1
                 If Trim(DBCnCommonDataTable.Rows(dtrn)("StockCode")) = Dgv.Rows(rowIndex).Cells("ColItemCode1").Value Then
                     Dgv.Rows(rowIndex).Cells("ColItemName1").Value = Trim(DBCnCommonDataTable.Rows(dtrn)("StockItemName"))
                     Dgv.Rows(rowIndex).Cells("ColUOM1").Value = Trim(DBCnCommonDataTable.Rows(dtrn)("UOM"))
                     Dgv.Rows(rowIndex).Cells("ColInvAcct1").Value = Trim(DBCnCommonDataTable.Rows(dtrn)("InventoryGL"))
                     ABB = 1
                 End If
             Next
         End If
         DBCnClose()
         
         If ABB = 0 Then
             MsgBox("Item code Not found, Enter valid code")
             Return False
         End If
     Else
         Dgv.Rows(rowIndex).Cells("ColItemCode1").Value = ""
     End If
     
     Return True
End Function

Private Sub DgvCodeValadate(ByRef Dgv As DataGridView, e As DataGridViewCellValidatingEventArgs)
    If Not DgvCodeValidate(e.RowIndex, e.ColumnIndex) Then
        e.Cancel = True
    End If
End Sub

Private Sub DgvItemSerch_CellContentClick(sender As Object, e As DataGridViewCellEventArgs) Handles DgvItemSerch.CellContentClick
    DgvCodeValidate(e.RowIndex, e.ColumnIndex)
End Sub