Предоставление данных из класса кода проектировщику служб отчетов в VS 2013

Я пытаюсь создать локальный отчет служб отчетов SQL Server (.rdlc file) и подключить этот отчет к некоторым наборам данных, которые я генерирую в коде (без прямого подключения к SQL Server).

Я создаю класс ReportDataProvider с некоторыми методами экземпляра, которые возвращают IList<T> для различных наборов критериев - но я не могу найти способ сделать эти методы предоставления данных отображаемыми в дизайне служб Reporting Services внутри Visual Studio 2013.

Когда я смотрю на диалоговое окно, появившееся после нажатия Add DataSet на Datasets node в окне проводника Report Data, я вижу тонну моих классов, перечисленных там, но не мой класс поставщика данных.

enter image description here

Есть ли что-то особенное, о чем мне нужно знать (сделать класс static? Украсить его каким-то атрибутом?), чтобы он отображался в этом выпадающем списке возможных источников данных? Я пробовал разные вещи, но не смог найти способ заставить это работать правильно...

Ответ 1

Я делаю некоторые исследования и пытаюсь по-разному добавлять классы. К сожалению, это происходит, когда вы не видите статические классы в этом дизайнере. Я пробовал разные способы, но не повезло.

Для нестатических классов это руководство работает для меня каждый раз, даже с Interfaces как IList, но я не представляю его здесь:

  • Убедитесь, что пространство имен с вашими классами данных данных доступно в вашем проекте с файлами .rdlc. Может быть, вам нужно добавить ссылку.
  • Записать класс отчета и восстановить его.
  • Закройте и снова запустите файлы .rdlc в VS.

Я использую VS 2013 Ultimate Update 2.

Это мои классы:

using System.Collections.Generic;

namespace YourReportNamespace
{
    public class ReportClass
    {
        public List<string> TestReportData()
        {
            return new List<string>();
        }
        public static List<string> StaticTestReportData()
        {
            return new List<string>();
        }
    }


    public class ReportWithFieldsClass 
    {
        private List<string> Data = new List<string>();

        public List<string> TestReportData()
        {
            return Data;
        }

        public List<string> TestReportData2()
        {
            return Data;
        }

        public static List<string> StaticTestReportData()
        {
            return new List<string>();
        }
    }

    public static class ReportWithFieldsStaticClass //This class will not appear
    {
        private static List<string> Data = new List<string>();

        public static List<string> StaticTestReportDataFromField()
        {
            return Data;
        }
        public static List<string> StaticTestReportData()
        {
            return new List<string>();
        }
    }
}

Это то, что я получил в дизайнере после того, как я прошел через руководство:

enter image description here

Ответ 2

Была аналогичная проблема. Найдено, если удалось получить сборку без ошибок, тогда мое пространство имен будет отображаться в источниках данных.