WedX - журнал о программировании и компьютерных науках

Правильное использование ObjectDataSource

Привет!

Я создаю пользовательский элемент управления, который будет отображать данные в элементе управления GridView. Мы используем многоуровневую архитектуру, и данные, о которых идет речь, извлекаются из нашей базы данных и возвращаются нам как ReadOnlyCollection. OurNewObject - это класс, содержащий несколько свойств и пустой конструктор, не принимающий параметров - он находится в следующем пространстве имен: Acme.ObjectModel.

В пользовательском элементе управления у меня есть следующее:

<asp:GridView ID="ourGrid" runat="server" DataSourceID="ourDataSource">
    <columns>
    <asp:BoundField DataField="Name" HeaderText="Full Name" />
    <asp:BoundField DataField="Gender" HeaderText="Gender" />
    <asp:BoundField DataField="BirthYear" HeaderText="Year of Birth" />
    <asp:BoundField DataField="JoinDate" HeaderText="Date Joined" />
  </columns>
</asp:GridView>
<asp:ObjectDataSource ID="ourDataSource" runat="server" SelectMethod="GetTopUsers" TypeName="Acme.Model.OurNewObject">
</asp:ObjectDataSource>

В коде пользовательского элемента управления у меня есть следующий общедоступный метод:

public ReadOnlyCollection<OurNewObject> GetTopUsers()
{
    return (OurDataProxy.GetJustTheTopUsers());
}

Когда я помещаю элемент управления пользователя в веб-форму и запускаю его, я получаю следующее сообщение:

ObjectDataSource 'ourDataSource' не удалось найти неуниверсальный метод 'GetTopUsers', не имеющий параметров.

Итак, мои вопросы:

  1. Я неправильно использую ObjectDataSource?
  2. Есть ли более правильный способ использовать ObjectDataSource в этой ситуации?

Спасибо.


Ответы:


1

Я считаю, что в проблеме не хватает двух атрибутов.

Сначала в методе GetTopUsers () добавьте этот атрибут

[System.ComponentModel.DataObjectMethodAttribute
    (System.ComponentModel.DataObjectMethodType.Select, true)]

Затем в фактическом классе OurNewObject добавьте этот атрибут

[System.ComponentModel.DataObject]
19.11.2008
  • Проблема в том, что OurNewObject определен в другой сборке, поэтому я не могу добавить к нему этот атрибут. 20.11.2008
  • Затем вам нужно будет выполнить привязку к нему другим способом, просто получите коллекцию и установите источник данных, а затем вызовите привязку данных из внутреннего кода. 21.11.2008

  • 2

    Обычно вы создаете отдельный объект, содержащий ваш метод (ы) доступа к данным, вместо того, чтобы помещать эти методы в код программной части. Отдельный объект может быть экземпляром или статическим, но сам объект должен иметь конструктор без параметров (или вообще не иметь конструктора).

    Кроме того, свойство TypeName в ObjectDataSource должно ссылаться на имя типа вышеупомянутого отдельного объекта. Пример:

    public class SampleDataObject
    {
      public ICollection<OurNewObject> GetTopUsers()
      {
        //[...]
      }
    }
    

    Упомянутые выше атрибуты: [System.ComponentModel.DataObject (true)] на уровне класса и [System.ComponentModel.DataObjectMethod (DataObjectMethodType.Select)] в методе получения не требуются, но помогут в поддержке во время разработки за счет фильтрация других типов при поиске классов для подключения ObjectDataSource к.

    03.12.2008

    3

    Попробуйте добавить атрибут DataKeyNames (добавить первичный ключ) к GridView и посмотрите, работает ли это?

    01.12.2008
    Новые материалы

    Как проанализировать работу вашего классификатора?
    Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

    Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
    Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

    Учебные заметки: создание моего первого пакета Node.js
    Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

    Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
    Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..

    ИИ в аэрокосмической отрасли
    Каждый полет – это шаг вперед к великой мечте. Чтобы это происходило в их собственном темпе, необходима команда астронавтов для погони за космосом и команда технического обслуживания..


    Для любых предложений по сайту: [email protected]