如何返回数据集并从asp.net中的数据集中获取结果?

时间:2014-08-14 03:33:01

标签: c# asp.net wcf crystal-reports dataset

如何使用asp.net中的数据集返回数据集并获取结果? 首先,我有一个包含数据集方法的WCF类,它返回了数据集结果 这是我的方法

            string conString = ConfigurationManager.ConnectionStrings["DBCS"].ConnectionString;
        DataSet ds = new DataSet();

        using (con = new SqlConnection(conString))
        {
            SqlCommand cmd = new SqlCommand("spViewMasterTransaction", con);
            cmd.CommandType = CommandType.StoredProcedure;

            SqlParameter parameterEarlyDate = new SqlParameter();
            parameterEarlyDate.ParameterName = "@earlyDate";
            parameterEarlyDate.Value = earlyDate;
            cmd.Parameters.Add(parameterEarlyDate);

            SqlParameter parameterLateDate = new SqlParameter();
            parameterLateDate.ParameterName = "@lateDate";
            parameterLateDate.Value = lateDate;
            cmd.Parameters.Add(parameterLateDate);


            con.Open();

            SqlDataAdapter da = new SqlDataAdapter();
            da.SelectCommand = cmd;
            da.Fill(ds, "Master");
        }

        return ds;

它返回了一个数据集结果,我在我的datagridview中使用它,但我想在我的crystalreport中使用它,当然我不能像在winform datagridview中使用它一样使用它,我想我必须捕获从我的wcf返回的数据集值并将其存储在我的客户端数据集中。如何执行此操作?既然,asp.net没有像winform那样的数据集组件?

1 个答案:

答案 0 :(得分:0)

使用CrystalReports,您需要使用 DataTables 而非 DataSet

您可以在 cs 文件中执行以下操作:

using CrystalDecisions.CrystalReports.Engine;
using CrystalDecisions.Shared;

    ReportDocument rptDoc = new ReportDocument();

    protected void Page_Init(object sender, EventArgs e)
    {
        try
        {
            // Get the DataTable form the DataSet               
            DataTable dt = yourDataSet.Tables[0];  // Or use the table name like this yourDataSet.Tables["TableName"];

            string reportPath = Server.MapPath("~/App_Data/CrystalReport1.rpt");
            rptDoc.Load(reportPath);
            rptDoc.SetDataSource(dt);
            CrystalReportViewer1.ReportSource = rptDoc;
        }
        catch (Exception ex)
        {
            lblErrMsg.Text = ex.Message;
        }
    }

    protected void Page_Load(object sender, EventArgs e)
    {
        try
        {
            // Clear error message if any.
            lblErrMsg.Text = "";

            // Crystal Report Fill
            DataTable dt = yourDataSet.Tables[0];
            rptDoc.SetDataSource(dt);
        }
        catch (Exception ex)
        {
            lblErrMsg.Text = ex.Message;
        }
    }

    protected void Page_UnLoad(object sender, EventArgs e)
    {
        try
        {
            this.CrystalReportViewer1.Dispose();
            this.CrystalReportViewer1 = null;
            rptDoc.Close();
            rptDoc.Dispose();
            rptDoc = null;
            GC.Collect();
        }
        catch (Exception ex)
        {
            lblErrMsg.Text = ex.Message;
        }
    }

在你的 aspx 文件中添加如下内容:

    <%@ Register Assembly="CrystalDecisions.Web, Version=13.0.2000.0, Culture=neutral, PublicKeyToken=692fbea5521e1304" Namespace="CrystalDecisions.Web" TagPrefix="CR" %>

    <CR:CrystalReportViewer ID="CrystalReportViewer1" runat="server" 
        AutoDataBind="True" DisplayStatusbar="False" 
        EnableDatabaseLogonPrompt="False" EnableDrillDown="False" 
        EnableParameterPrompt="False" EnableTheming="False" EnableToolTips="False" 
        GroupTreeStyle-ShowLines="False" HasDrilldownTabs="False" 
        HasDrillUpButton="False" HasGotoPageButton="False" 
        HasPageNavigationButtons="False" HasSearchButton="False" Height="894px" 
        SeparatePages="False" ToolPanelView="None" Width="918px" 
        GroupTreeImagesFolderUrl="" ReportSourceID="CrystalReportSource1" 
        ToolbarImagesFolderUrl="" ToolPanelWidth="200px" 
        HasToggleGroupTreeButton="False" HasToggleParameterPanelButton="False" />    
    <CR:CrystalReportSource ID="CrystalReportSource1" runat="server">
        <Report FileName="App_Data\CrystalReport1.rpt">
        </Report>
    </CR:CrystalReportSource>

我希望它有所帮助。

巴勃罗