Конвертировать C # (с напечатанными событиями) в VB.NET - PullRequest
1 голос
/ 23 апреля 2010

У меня есть страница ASPX (с VB Codebehind). Я хотел бы расширить класс GridView, чтобы отображать верхний / нижний колонтитулы, когда строки не возвращаются.

Я нашел пример C # онлайн ( ссылка ) ( источник ). Однако я не могу преобразовать его в VB, поскольку он использует типизированные события (которые недопустимы в VB).

Я пробовал несколько бесплатных конвертеров C # в VB.NET онлайн, но ни один из них не работал.

Пожалуйста, преобразуйте пример в VB.NET или предоставьте альтернативный метод расширения класса GridView.

Примечания / Трудности:

  1. Если вы получили ошибку с DataView объектами, укажите тип как System.Data.DataView, и сравнение типов может быть следующим: If data.[GetType]() Is GetType(System.Data.DataView) Then

  2. Поскольку событие MustAddARow не может иметь тип в VB (а RaiseEvent event не имеет возвращаемого значения), как я могу сравнить его с Nothing в функции OnMustAddARow()?

EDIT:

Ниже приведен пример с (надеюсь) соответствующим кодом, который поможет ответить на вопрос.

namespace AlwaysShowHeaderFooter {
    public delegate IEnumerable MustAddARowHandler(IEnumerable data);

    public class GridViewAlwaysShow : GridView {
           // Various member functions omitted //
           protected IEnumerable OnMustAddARow(IEnumerable data) {
            if (MustAddARow == null) {
                throw new NullReferenceException("The datasource has no rows. You must handle the \"MustAddARow\" Event.");
            }
            return MustAddARow(data);
        }

        public event MustAddARowHandler MustAddARow;
    }
}

Ответы [ 4 ]

1 голос
/ 27 апреля 2010

Как я уже сказал в своем комментарии, код не будет «магически» преобразован в VB.Net. Для правильной компиляции потребуется работа через него.

Самым простым было бы скомпилировать код C # в виде библиотеки.

  1. Создать новый проект (класс C # Библиотека) и назовите его "AlwaysShowHeaderFooter"
  2. Переместить файлы из App_Code в новый проект
  3. Добавить ссылку на System.Web и System.Configuration
  4. Добавьте ссылку в вашем веб-проекте либо в скомпилированные dll-файлы «AlwaysShowHeaderFooter», либо добавьте сам проект в качестве ссылки, если он есть в том же решении.
  5. Выключить <%@ Register TagPrefix="Custom" Namespace="AlwaysShowHeaderFooter" %> с помощью <%@ Register Assembly="AlwaysShowHeaderFooter" Namespace="AlwaysShowHeaderFooter" TagPrefix="Custom" %>

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

1 голос
/ 26 апреля 2010

Пожалуйста, смотрите здесь .

Точного эквивалента для VB нет.

Вместо этого используйте делегат Sub с параметром ByRef.

Последующий ответ дает пример, который работает, но объясняет, почему это плохая идея.

1 голос
/ 26 апреля 2010

Относительно 1, самый чистый путь VB будет

If TypeOf data Is System.Data.DataView Then
0 голосов
/ 23 апреля 2010

Относительно 2. Я думаю, что события в VB.Net могут передавать параметры ByRef.

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