marnus20 Ответов: 3

Я получаю следующую ошибку - 'OfType' не является членом 'System.Web.UI. ControlCollection'


Я получаю следующую ошибку -; OfType; не является членом System.Web.UI. ControlCollection'

Это код, который дает ошибку

Protected Sub dgdWebsite_RowDataBound(sender As Object, e As GridViewRowEventArgs) Handles dgdWebsite.RowDataBound
        Try
            If e.Row.RowType = DataControlRowType.DataRow Then
                Dim item As String = e.Row.Cells(0).Text
                For Each button As Button In e.Row.Cells(7).Controls.OfType(Of Button)()
                    If button.CommandName = "Delete" Then
                        button.Attributes("onclick") = "if(!confirm('Do you want to delete " + item + "?')){ return false; };"
                    End If
                Next
            End If
        Catch ex As Exception
            ShowErrorMsg(ex.Message)
        End Try

    End Sub

Kornfeld Eliyahu Peter

Какую версию .NET вы используете?

Sergey Alexandrovich Kryukov

Ты действительно думаешь, что это что-то изменит? Пожалуйста, посмотрите мой ответ.
—СА

Kornfeld Eliyahu Peter

В этом вся разница!
OfType - это метод расширения, который ControlCollection имеет через IEnumerable, но только с версии 3.5!!!

Sergey Alexandrovich Kryukov

Я понял, спасибо, что ответили.
Это может быть причиной; до V. 3. 5 (или 3.0?) сами методы расширения недоступны. Я оценил ваши комментарии и соответствующим образом скорректировал свой ответ, чтобы проблема могла быть решена даже без использования метода расширения.
—СА

3 Ответов

Рейтинг:
1

Sergey Alexandrovich Kryukov

Нет ничего удивительного, если какая-то тарабарщина, написанная в коде, вызывает какую-то ошибку компиляции. Метод OfType примененный к коллекции контроль - это плод вашей фантазии. Такого понятия не существует, о чем ясно сообщает ваш компилятор.

Если вы хотите динамически сортировать некоторые объекты на основе их типы времени выполнения, есть два VB.NET операторы, Is и TryCast; их использование должно быть очевидно из справочных страниц MSDN:
http://msdn.microsoft.com/en-us/library/kb136x1y.aspx[^],
http://msdn.microsoft.com/en-us/library/zyy863x8.aspx[^].

Что касается вашего OfType, существует общий метод System.Linq.Enumerable.OfType<>:
http://msdn.microsoft.com/en-us/library/vstudio/bb360913%28v=vs.100%29.aspx[^].

Если у вас есть версия .NET, в которой он реализован (см. Комментарий к вопросу, спасибо Корнфельду Элиягу Питеру), вы можете использовать этот метод с вашей коллекцией, чтобы System.IEnumerable.

Эти статьи CodeProject могут быть полезны:
Методы расширения в .NET[^],
Методы расширения в VB.NET[^].

Но в конечном счете при реализации фильтрации в таком методе вам все равно придется использовать Is оператор. :-)

—СА


Рейтинг:
1

marnus20

If e.Row.RowState <> DataControlRowState.Edit Then
               If e.Row.RowType = DataControlRowType.DataRow Then
                   Dim id As String = e.Row.Cells(0).Text
                   Dim lb As ImageButton = DirectCast(e.Row.Cells(6).Controls(0), ImageButton)

                   If lb IsNot Nothing Then
                       lb.Attributes("onclick") = "if(!confirm('Do you want to delete " + id + "?')){ return false; };"
                   End If
                   Dim Sel As ImageButton = DirectCast(e.Row.Cells(7).Controls(0), ImageButton)
                   If Sel IsNot Nothing Then
                       Dim path As String = e.Row.Cells(4).Text
                       Sel.Attributes("onclick") = "window.open('" + path + "','_blank');"
                   End If
               End If
           End If


Рейтинг:
0

Member 12503655

Попробуйте импортировать библиотеку

Система Импорта.Веб.Пользовательского интерфейса.Экземпляре коллекции controlcollection
Система Импорта.В LINQ

Я стараюсь не делать этого, это работа.