【问题标题】:How to pass parameters to devexpress XtraReport from combobox如何从组合框将参数传递给 devexpress XtraReport
【发布时间】:2019-01-05 07:20:56
【问题描述】:

我有一个包含 3 个组合框和一个按钮的表单,如下所示

以及包含 3 个绑定到富文本的参数的报告

单击“打印”按钮时,我在此过程中使用了以下代码,但未传递参数且富文本字段为空

private void btnPrint_Click(object sender, EventArgs e)
{
    // Create a report instance.
    var report = new XtraReport1();

    // Obtain a parameter, and set its value.
    report.ClassName.Value    = cmbClass.SelectedText;
    report.SubclassName.Value = cmbDivision.SelectedText;
    report.StudentName.Value  = cmbStudent.SelectedText;

    report.RequestParameters = false;    // Hide the Parameters UI from end-users.
    report.ShowPreview();
}

【问题讨论】:

    标签: c# devexpress report xtrareport


    【解决方案1】:

    使用XtraReport.Parameters 集合将组合框值传递给参数名称,如下例所示:

    private void btnPrint_Click(object sender, EventArgs e)
    {
        // Create a report instance.
        var report = new XtraReport1();
    
        // Obtain a parameter, and set its value.
        report.Parameters["ClassName"].Value = cmbClass.SelectedText;
        report.Parameters["SubclassName"].Value = cmbDivision.SelectedText;
        report.Parameters["StudentName"].Value = cmbStudent.SelectedText;
    
        report.RequestParameters = false; // Hide the Parameters UI from end-users.
        report.ShowPreview();
    }
    

    或者您可以声明一个重载构造函数,在其中分配参数值,然后使用重载的构造函数参数创建XtraReport 实例:

    // XtraReport
    public partial class ReportName : DevExpress.XtraReports.UI.XtraReport
    {
        // default parameterless constructor here
    
        public ReportName(string ClassName, string SubclassName, string StudentName)
        {
            InitializeComponent();
    
            this.Parameters["ClassName"].Value = ClassName;
            this.Parameters["SubclassName"].Value = SubclassName;
            this.Parameters["StudentName"].Value = StudentName;
        }
    }
    
    // Form code
    private void btnPrint_Click(object sender, EventArgs e)
    {
        // Create a report instance.
        var report = new XtraReport1(cmbClass.SelectedText, cmbDivision.SelectedText, cmbStudent.SelectedText);
    
        report.RequestParameters = false; // Hide the Parameters UI from end-users.
        report.ShowPreview();
    }
    

    参考:Passing Parameter Values at Runtime

    更新:

    如果每个文本框的SelectedText 属性总是有空值,您可以使用TextSelectedItem 属性来获取实际的组合框值(类似问题here)。

    private void btnPrint_Click(object sender, EventArgs e)
    {
        // Create a report instance.
        var report = new XtraReport1();
    
        // Obtain a parameter, and set its value.
        report.Parameters["ClassName"].Value = cmbClass.Text;
        report.Parameters["SubclassName"].Value = cmbDivision.Text;
        report.Parameters["StudentName"].Value = cmbStudent.Text;
    
        report.RequestParameters = false; // Hide the Parameters UI from end-users.
        report.ShowPreview();
    }
    

    【讨论】:

    • 它没有用,但我认为问题出在组合框上,通过使用断点显示无论我选择什么,SelectedText 始终为空
    • 如果SelectedText 属性始终具有空值,请使用Text 属性或SelectedItem.ToString() - 如更新部分所述。
    猜你喜欢
    • 2019-06-21
    • 1970-01-01
    • 2014-02-19
    • 2018-06-05
    • 1970-01-01
    • 1970-01-01
    • 2013-09-07
    • 1970-01-01
    • 2015-10-05
    相关资源
    最近更新 更多