Привязать ObjectDataSource к существующему методу в моем слое доступа к данным - PullRequest
2 голосов
/ 12 декабря 2008

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

Как программно создать и связать ODS с методом уровня доступа к данным?

РЕДАКТИРОВАТЬ:

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

Как программно связать отчет .Net Reporting Services (* .rdlc) с методом в моем уровне доступа к данным вместо ADO.Net DataSet.

Смотрите мой ответ ниже.

Ответы [ 6 ]

2 голосов
/ 16 декабря 2008

Чтобы использовать стандартный .Net DataSet в качестве источника данных для отчета служб отчетов, мне пришлось:

  1. Создать набор данных ADO, который использует ту же хранимую процедуру, что и метод DAL

  2. Использование набора данных ADO для заполнения полей в отчете в конструкторе

  3. На странице aspx используйте следующее:

    <rsweb:ReportViewer ID="ReportViewer1" runat="server" Font-Names="Verdana"
                        Font-Size="8pt" Height="655px" Width="980px">
        <ServerReport ReportServerUrl="" />
        <LocalReport>
    
        </LocalReport>
    </rsweb:ReportViewer>
    

    А в коде позади:

    ReportViewer1.ProcessingMode = ProcessingMode.Local
    Dim report As LocalReport = ReportViewer1.LocalReport
    report.ReportPath = "<your report path>"
    report.DataSources.Clear()
    
    Dim rds As New ReportDataSource()
    rds.Name = "<dataset name>_<stored proc name>"
    rds.Value = <your DAL method ()>
    
    report.DataSources.Add(rds)
    report.Refresh()
    
  4. После того, как вы проверили это и освоили полученный отчет, вы можете безопасно исключить ADO DataSet из вашего проекта.

Примечания: это далеко от идеала, и есть вероятные шаги, которые я сделал, которые излишни или что-то пропустил.
Одна вещь, которая доставила мне настоящую головную боль, заключалась в том, что XML в RDLC содержал определения для старых наборов данных ADO, которые больше не были актуальны. Чтобы удалить их, щелкните правой кнопкой мыши файл rdlc в обозревателе решений и выберите «Открыть с помощью», а затем «Редактор XML» в следующем меню.

1 голос
/ 13 октября 2015

Вот мое решение. У меня есть традиционный проект с уровнем данных под названием «Данные». Теперь мои RDLC размещены в основном веб-проекте "Web". Итак, мой тип .NET в «Данные»:

Data.Models.Reports.MyRepository

; и метод в этом типе:

GetMyReport

К счастью, ReportDataSource имеет метод перегрузки Add, который принимает IDataSource в качестве второго параметра. Как только вы поняли, что все ясно.

//Create object data source
ObjectDataSource objDataSource = new ObjectDataSource();
objDataSource.TypeName = "Data.Models.Reports.MyRepository";
objDataSource.SelectMethod = "GetMyReport";
//Add parameters if any ...
objDataSource.SelectParameters.Add("Param1", "");

Вот магия. Источник данных объекта вполне приемлем в качестве второго параметра в конструкторе

ReportDataSource rptDataSource = new ReportDataSource("DataSet1",objDataSource);
reportViewer.LocalReport.DataSources.Add(rptDataSource);

Работает как очарование для меня.

0 голосов
/ 13 декабря 2008

Когда вы говорите, что источник данных связывается напрямую с базой данных, вы имеете в виду SqlDataSource?

Если у вас есть класс слоя доступа к данным, его довольно легко подключить к ObjectDataSource. Просто сделайте это декларативно:

<asp:ObjectDataSource ID="ObjectDataSource1" runat="server" 
SelectMethod="[InsertYourMethodHere]" TypeName="[InsertYourDALClassHere]">
<SelectParameters>
[Add Your Parameters Here]
</SelectParameters>
</asp:ObjectDataSource>

Если вы используете конструктор, может быть разумно украсить ваш класс DAL с помощью атрибутов DataObject и DataObjectMethod. Если вы предпочитаете делать это программно, просто используйте те же свойства в своем коде.

0 голосов
/ 13 декабря 2008

Вопрос не имеет большого смысла. Если есть ObjectDataSource (ODS), то он, вероятно, используется для заполнения любого элемента управления, отображающего данные (наиболее вероятно, через поле DataSourceID). На странице разметки вы увидите, что в ODS есть имя класса и имя метода этого класса для извлечения данных. Это не значит, что он делает это дважды, просто вы его настроили.

0 голосов
/ 12 декабря 2008

Источник данных объекта может связываться с любым объектом, класс которого реализует IEnumerable. Если ваш метод DAL возвращает коллекции или DataTable / DataView или вещи в той же строке. Вам просто нужно присвоить свойству datasource объекта datasource объекта значение return метода и вызвать DataBind (). Вы даже можете напрямую использовать свойство DataSource элемента управления Data Server и делать то же самое.

0 голосов
/ 12 декабря 2008

вы используете объект источника данных или данных? выберите один из них, чтобы он не был дубликатом

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