Ошибка: Опция Strict On запрещает операнды типа Object для оператора ‘=’ в DataGridView с VB.NET.

Вопрос или проблема

У меня ошибка Error BC32013 Option Strict On disallows operands of type Object for operator '='. Use the 'Is' operator to test for object identity. в datagridview с vb.net

Цель кода – проверить, пустая ли ячейка или имеет значение 0, или если она пустая и имеет значение 0, то добавление новых строк не допускается

Пожалуйста, помогите мне, чтобы я мог решить эту ошибку

Спасибо

 
   Protected Overrides Function ProcessCmdKey(ByRef msg As Message, ByVal keyData As Keys) As Boolean
        If keyData = Keys.Tab AndAlso CBool(Keys.Enter) Then
            Dim SelectDgv = GetSELECT()
            If Me.DataGridView1.Rows.Count > 0 Then
 'ошибка ниже этой строки кода
    If Not DataGridView1.CurrentRow.Cells.Cast(Of DataGridViewCell).Any(Function(cell) String.IsNullOrEmpty(cell.FormattedValue?.ToString()) OrElse cell.FormattedValue = 0) Then
                    BindingSource1.AddNew()
                Else
                    DataGridView1.CurrentCell = DataGridView1.CurrentRow.Cells(1)
                    DataGridView1.BeginEdit(False)

                End If
            Else
            End If
            Return True
        ElseIf keyData = Keys.F1 AndAlso CBool(Keys.Enter) Then
            DataGridView1.CurrentCell = DataGridView1.CurrentRow.Cells(5)
            DataGridView1.BeginEdit(False)
        Else
        End If
        Return MyBase.ProcessCmdKey(msg, keyData)
    End Function

Ответ или решение

Ошибка "Option Strict On disallows operands of type Object for operator ‘=’ в DataGridView на VB.NET"

При работе с VB.NET включение Option Strict On помогает предотвратить ошибки типизации в вашем коде. Ошибка, которую вы получаете:

Error BC32013 Option Strict On disallows operands of type Object for operator '='. Use the 'Is' operator to test for object identity.

означает, что вы пытаетесь сравнить объекты, которые переданы как тип Object, с помощью оператора =. В VB.NET, когда Option Strict установлен в On, необходимо использовать оператор Is для проверки идентичности объектов и привести переменные к необходимому типу перед сравнением.

Решение проблемы в вашем коде

Ваша цель заключается в том, чтобы проверить, нужно ли добавлять новую строку в DataGridView, если ячейки пустые или имеют значение 0. Следует внести изменения в строку, где выявляется ошибка. Попробуйте следующий подход:

If Not DataGridView1.CurrentRow.Cells.Cast(Of DataGridViewCell)().Any(Function(cell) String.IsNullOrEmpty(cell.FormattedValue?.ToString()) OrElse (Convert.ToInt32(cell.FormattedValue) = 0)) Then

Объяснение изменений

  1. Использование Convert.ToInt32:
    Я изменил часть cell.FormattedValue = 0 на Convert.ToInt32(cell.FormattedValue) = 0. Это позволяет избежать ошибок приведения типов, поскольку мы явным образом преобразуем значение ячейки в Integer.

  2. Проверка на пустоту:
    Проверка String.IsNullOrEmpty(cell.FormattedValue?.ToString()) остается, поскольку она корректно работает для проверки пустоты на строковом уровне.

Альтернативный способ

Если вы все еще хотите использовать оператор Is, вот пример того, как это можно сделать:

If Not DataGridView1.CurrentRow.Cells.Cast(Of DataGridViewCell)().Any(Function(cell) String.IsNullOrEmpty(cell.FormattedValue?.ToString()) OrElse (cell.FormattedValue IsNot Nothing AndAlso Convert.ToInt32(cell.FormattedValue) = 0)) Then

Здесь мы добавляем проверку cell.FormattedValue IsNot Nothing, чтобы убедиться, что значение ячейки не является Nothing, прежде чем пытаться преобразовать его к Integer.

Заключение

После внесения указанных изменений вы сможете избежать ошибки, связанной с операцией сравнения, и ваше приложение будет обрабатывать добавление новых строк в DataGridView корректно. Включение Option Strict On — это хорошая практика, которая помогает поддерживать типобезопасность, поэтому старайтесь придерживаться его в своих проектах.

Оцените материал
Добавить комментарий

Капча загружается...