将ObjectDataSource绑定到我的数据访问层中的现有方法

时间:2008-12-12 16:41:00

标签: asp.net vb.net data-binding

我已经看过设计器代码,并且我已经看到了在代码隐藏中构建ObjectDataSource的代码,但是这两种方法都通过文本命令或存储过程与数据库直接通信。这似乎是不必要的代码重复,因为我的数据访问层有一个方法已经返回一个数据表,其中包含我需要的数据。

如何以编程方式构建ODS并将其链接到我的数据访问层的方法?

编辑:

感谢所有回答的人。这对我来说非常糟糕。当我最初写这个问题时,有太多我不明白的地方。我应该问的是:

如何以编程方式将.Net Reporting Services报告(* .rdlc)绑定到我的数据访问层中的方法而不是ADO.Net数据集。

请参阅下面的答案。

6 个答案:

答案 0 :(得分:2)

为了使用标准.Net DataSet作为Reporting Services报告的数据源,我不得不:

  1. 创建一个使用与DAL方法相同的存储过程的ADO DataSet

  2. 使用ADO DataSet填充设计器中报告中的字段

  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。

  5. 注意:这远非理想,我可能采取的步骤是不必要的或我错过的东西 让我感到头疼的一件事是,RDLC中的XML包含了不再相关的旧ADO数据集的定义。要删除它们,请右键单击解决方案资源管理器中的rdlc文件,然后在下一个菜单中选择“打开方式”,然后选择XML编辑器。

答案 1 :(得分:1)

这是我的解决方案。我有传统项目,数据层名为&#34; Data&#34;。 现在我的RDLC被托管在主要的Web项目&#34; Web&#34;中。 所以我的.NET类型在&#34;数据&#34;:

  

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);

对我来说就像是一种魅力。

答案 2 :(得分:0)

您使用对象数据源还是数据表? 从其中一个中做出选择,不要重复

答案 3 :(得分:0)

对象数据源可以绑定到类实现IEnumerable的任何对象。如果您的DAL方法在同一行返回集合或DataTable / DataView或事物。您只需要使用方法的返回值分配对象数据源对象的datasource属性并调用DataBind()。您甚至可以直接使用Data Server Control的DataSource属性并执行相同的操作。

答案 4 :(得分:0)

这个问题并没有多大意义。如果存在ObjectDataSource(ODS),则可能用于填充显示数据的任何控件(最可能通过DataSourceID字段)。在标记页面上,您将看到ODS具有类的名称以及该类上用于检索数据的方法的名称。这并不意味着它正在做两次,这就是你如何设置它。

答案 5 :(得分:0)

当你说数据源直接与数据库通信时,你的意思是SqlDataSource吗?

如果您有数据访问层类,则将其连接到ObjectDataSource相当容易。只是声明地说:

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

如果使用设计器,可以使用DataObject和DataObjectMethod属性来装饰DAL类。如果您宁愿以编程方式执行此操作,只需在代码隐藏中使用相同的属性。