无法在代码中更改Crystal Report数据源

时间:2011-10-09 06:54:01

标签: c# .net crystal-reports

我有一个.net 3.5 SP1应用程序,它有许多嵌入式结果报告(版本10.5)。报告将在我的开发中正常工作。环境,但当我将代码移动到生产时,用户正在获取一个窗口,询问登录凭据。

现在我知道如何在运行时更改数据源的问题已被多次询问和回答。我的问题不是怎么做,这是我做错了什么?

登录窗口将显示所有信息,但数据库字段为空,并且字段上禁用了编辑。当我使用调试器单步执行代码时,ConnectionInfo具有包括数据库名称在内的所有正确信息。

//InvoiceHistory is the crystral report that is an embedded resource
InvoiceHistory billingHistoryReport = new InvoiceHistory();

ConnectionInfo info = ReportUtilities.GetConnectionInfo();
ReportUtilities.ConfigureLogonInfo(billingHistoryReport,info);

crystalReportViewer1.DisplayToolbar = true;
crystalReportViewer1.ReportSource = billingHistoryReport;
crystalReportViewer1.Refresh();


//Static Function Code

public static void ConfigureLogonInfo(ReportDocument _report, ConnectionInfo _conn)
{
    Tables ts = _report.Database.Tables;
    TableLogOnInfo li = new TableLogOnInfo();

    foreach (Table t in ts)
    {
        li = t.LogOnInfo;
        li.ConnectionInfo = _conn;
        t.ApplyLogOnInfo(li);
    }

    for (int i = 0; i < _report.Subreports.Count; i++)
    {
        Tables tbs = _report.Subreports[i].Database.Tables;
        TableLogOnInfo sli = new TableLogOnInfo();

        foreach (Table t in tbs)
        {
            sli = t.LogOnInfo;
            sli.ConnectionInfo = _conn;
            t.ApplyLogOnInfo(li);
        }
    }
}


public static ConnectionInfo GetConnectionInfo()
{
    ConnectionInfo conn = new ConnectionInfo();
    conn.Type = ConnectionInfoType.SQL;
    conn.UserID = GlobalSettings.Default.DatabaseUser;
    conn.ServerName = GlobalSettings.Default.ServerName;
    conn.Password = GlobalSettings.Default.DatabasePassword;
    conn.IntegratedSecurity = GlobalSettings.Default.UseIntegratedSecurity;
    conn.DatabaseName = GlobalSettings.Default.DatabaseName;

    return conn;
}

当我通过VS 2008并进入Crystal Reports时 - &gt;数据库 - &gt;数据库专家 - &gt;特性

Database Type: OLE DB(ADO)
Provider : SQLNCLI10
Data Source: {My dev SQL SERVER SERVER Instance}
Initial Catalog: {My dev DB NAME}
User ID: {My dev User ID}
Integrated Security: false

编辑:     取消选中“每次打印时验证”后,问题仍然存在

1 个答案:

答案 0 :(得分:0)

在清除当前数据源连接后直接设置ConnectionInfo对象。将ConfigureLogonInfo方法更改为以下内容:

public static void ConfigureLogonInfo(ReportDocument _report, ConnectionInfo _conn)
    {
        _report.DataSourceConnections.Clear();
        foreach(Table tbl in _report.Database.Tables)
        {
            tbl.LogOnInfo.ConnectionInfo = _conn;
        }

        for(int i = 0; i < _report.Subreports.Count; i++)
        {
            var sub = _report.Subreports[i];
            sub.DataSourceConnections.Clear();                
            foreach(Table tbl in sub.Database.Tables)
            {
                tbl.LogOnInfo.ConnectionInfo = _conn;
            }
        }
    }