2012-03-15 46 views
1

使用C sharp,winforms,visual studio 2010,.NET 4和devexpress API。C#Devexpress,更新报告

嗨,我最近试图使用devexpress xtreport控件进行报告。 它工作正常,看起来不错,唯一的问题是我需要它在运行时更新。

我遇到的问题是当我的控件更新时,我需要它们将值传递给我的报告,到目前为止,这不工作,也不是我的报告xtrachart,没有更新。

如果有这样的方法,我正在徘徊我应该调用更新整个报告。

原因我正在使用文本框值放入报表是由于报表的显示不会改变,事实上我正在使用少量的数据在我的Winforms应用程序中得到处理。

继承人一些代码:

public partial class XtraReport1 : DevExpress.XtraReports.UI.XtraReport 
{ 
    DataTable chartTable3 = new DataTable("Table1"); 
    DataTable chartTable4 = new DataTable("Table2"); 
    DataTable chartTable5 = new DataTable("Table3"); 
    DataTable chartTable6 = new DataTable("Table4"); 
    public DevExpress.XtraReports.UI.XRChart xrChart1; 

    public XtraReport1() 
    { 
     InitializeComponent(); 

    } 

    public void branchname(string bname) 
    { 
     branch.Text = bname; 
    } 


    public void names(string pg1k, string pg2k, string pg3k, string pg4k) 
    { 
     Pg1.Text = pg1k; 
     Pg2.Text = pg2k; 
     Pg3.Text = pg3k; 
     Pg4.Text = pg4k; 
    } 

    public void TotalSalesk(string totS) 
    { 
     Sales.Text = totS; 
    } 

    public void TotalQtyk(string totQ) 
    { 
     Qty.Text = totQ; 
    } 

    public void SelectedSales(string pg1S, string pg2S, string pg3S, string pg4S) 
    { 
     //xrLabel1.Text = label1; 
     Pg1Sales.Text = pg1S; 
     Pg2Sales.Text = pg2S; 
     Pg3Sales.Text = pg3S; 
     Pg4Sales.Text = pg4S; 
    } 

    public void SelectedQty(string pg1Q, string pg2Q, string pg3Q, string pg4Q) 
    { 
     Pg1Qty.Text = pg1Q; 
     Pg2Qty.Text = pg2Q; 
     Pg3Qty.Text = pg3Q; 
     Pg4Qty.Text = pg4Q; 
    } 

    public void PgGrpPercent(string pg1P, string pg2P, string pg3P, string pg4P) 
    { 
     Pg1Perc.Text = pg1P; 
     Pg2Perc.Text = pg2P; 
     Pg3perc.Text = pg3P; 
     Pg4perc.Text = pg4P; 
    } 

    public void PgTop50(string pg1t5, string pg2t5, string pg3t5, string pg4t5) 
    { 
     Pg1T50.Text = pg1t5; 
     Pg2T50.Text = pg2t5; 
     Pg3T50.Text = pg3t5; 
     Pg4T50.Text = pg4t5; 
    } 

    public void PgTop100(string pg1t1, string pg2t1, string pg3t1, string pg4t1) 
    { 
     Pg1T100.Text = pg1t1; 
     Pg2T100.Text = pg2t1; 
     Pg3T100.Text = pg3t1; 
     Pg4T100.Text = pg4t1; 
    } 

    public void PgTop200(string pg1t2, string pg2t2, string pg3t2, string pg4t2) 
    { 
     Pg1T200.Text = pg1t2; 
     Pg2T200.Text = pg2t2; 
     Pg3T200.Text = pg3t2; 
     Pg4T200.Text = pg4t2; 
    } 

    public void PgOver(string pg1tO, string pg2tO, string pg3tO, string pg4tO) 
    { 
     Pg1Over.Text = pg1tO; 
     Pg2over.Text = pg2tO; 
     Pg3over.Text = pg3tO; 
     Pg4over.Text = pg4tO; 
    } 

    public void CheckClear(bool checkme) 
    { 
     if (checkme == true) 
     { 
      //DevExpress.XtraReports.UI.XRChart xrChart1; 
      chartTable3.Clear(); 
      chartTable3.Columns.Clear(); 
      chartTable4.Clear(); 
      chartTable4.Columns.Clear(); 
      chartTable5.Clear(); 
      chartTable5.Columns.Clear(); 
      chartTable6.Clear(); 
      chartTable6.Columns.Clear(); 
     } 
    } 

    public void myChartSeries1(double top, double tmid, double bmid, double bottom, string pgName, bool table) 
    { 
     //xrChart1.Series.Clear(); 


      // Add two columns to the table. 
      chartTable3.Columns.Add("Names", typeof(string)); 
      chartTable3.Columns.Add("Value", typeof(Int32)); 
      chartTable3.Rows.Add("Below 50", top); 
      chartTable3.Rows.Add("Between 50-100", tmid); 
      chartTable3.Rows.Add("Between 100-200", bmid); 
      chartTable3.Rows.Add("Greater than 200", bottom); 

      Series series3 = new Series(pgName, ViewType.Bar); 

      //.Series.Add(series1); 
      series3.DataSource = chartTable3; 

      series3.ArgumentScaleType = ScaleType.Qualitative; 

      series3.ArgumentDataMember = "Names"; //error here 

      series3.ValueScaleType = ScaleType.Numerical; 

      series3.ValueDataMembers.AddRange(new string[] { "Value" }); 

      //series1.Label.PointOptions.PointView = PointView.ArgumentAndValues; 

      series3.LegendPointOptions.PointView = PointView.ArgumentAndValues; 

      series3.LegendPointOptions.ValueNumericOptions.Format = NumericFormat.Percent; 

      series3.LegendPointOptions.ValueNumericOptions.Precision = 0; 
      xrChart1.Series.Add(series3); 

      xrChart1.Legend.Visible = true; 


    } 

    public void myChartSeries2(double top, double tmid, double bmid, double bottom, string pgName, bool table) 
    { 

      // Add two columns to the table. 
      chartTable4.Columns.Add("Names", typeof(string)); 
      chartTable4.Columns.Add("Value", typeof(Int32)); 
      chartTable4.Rows.Add("Below 50", top); 
      chartTable4.Rows.Add("Between 50-100", tmid); 
      chartTable4.Rows.Add("Between 100-200", bmid); 
      chartTable4.Rows.Add("Greater than 200", bottom); 

      Series series4 = new Series(pgName, ViewType.Bar); 

      //.Series.Add(series1); 
      series4.DataSource = chartTable4; 

      series4.ArgumentScaleType = ScaleType.Qualitative; 

      series4.ArgumentDataMember = "Names"; 

      series4.ValueScaleType = ScaleType.Numerical; 

      series4.ValueDataMembers.AddRange(new string[] { "Value" }); 

      //series1.Label.PointOptions.PointView = PointView.ArgumentAndValues; 

      series4.LegendPointOptions.PointView = PointView.ArgumentAndValues; 

      series4.LegendPointOptions.ValueNumericOptions.Format = NumericFormat.Percent; 

      series4.LegendPointOptions.ValueNumericOptions.Precision = 0; 
      xrChart1.Series.Add(series4); 

      xrChart1.Legend.Visible = true;   
    } 

    public void myChartSeries3(double top, double tmid, double bmid, double bottom, string pgName, bool table) 
    { 

      // Add two columns to the table. 
      chartTable5.Columns.Add("Names", typeof(string)); 
      chartTable5.Columns.Add("Value", typeof(Int32)); 
      chartTable5.Rows.Add("Below 50", top); 
      chartTable5.Rows.Add("Between 50-100", tmid); 
      chartTable5.Rows.Add("Between 100-200", bmid); 
      chartTable5.Rows.Add("Greater than 200", bottom); 

      Series series5 = new Series(pgName, ViewType.Bar); 

      //.Series.Add(series1); 
      series5.DataSource = chartTable5; 

      series5.ArgumentScaleType = ScaleType.Qualitative; 

      series5.ArgumentDataMember = "Names"; 

      series5.ValueScaleType = ScaleType.Numerical; 

      series5.ValueDataMembers.AddRange(new string[] { "Value" }); 

      //series1.Label.PointOptions.PointView = PointView.ArgumentAndValues; 

      series5.LegendPointOptions.PointView = PointView.ArgumentAndValues; 

      series5.LegendPointOptions.ValueNumericOptions.Format = NumericFormat.Percent; 

      series5.LegendPointOptions.ValueNumericOptions.Precision = 0; 
      xrChart1.Series.Add(series5); 

      xrChart1.Legend.Visible = true; 


    } 

    public void myChartSeries4(double top, double tmid, double bmid, double bottom, string pgName, bool table) 
    { 

      // Add two columns to the table. 
      chartTable6.Columns.Add("Names", typeof(string)); 
      chartTable6.Columns.Add("Value", typeof(Int32)); 
      chartTable6.Rows.Add("Below 50", top); 
      chartTable6.Rows.Add("Between 50-100", tmid); 
      chartTable6.Rows.Add("Between 100-200", bmid); 
      chartTable6.Rows.Add("Greater than 200", bottom); 

      Series series6 = new Series(pgName, ViewType.Bar); 

      //.Series.Add(series1); 
      series6.DataSource = chartTable6; 

      series6.ArgumentScaleType = ScaleType.Qualitative; 

      series6.ArgumentDataMember = "Names"; 

      series6.ValueScaleType = ScaleType.Numerical; 

      series6.ValueDataMembers.AddRange(new string[] { "Value" }); 

      //series1.Label.PointOptions.PointView = PointView.ArgumentAndValues; 

      series6.LegendPointOptions.PointView = PointView.ArgumentAndValues; 

      series6.LegendPointOptions.ValueNumericOptions.Format = NumericFormat.Percent; 

      series6.LegendPointOptions.ValueNumericOptions.Precision = 0; 
      xrChart1.Series.Add(series6); 

      xrChart1.Legend.Visible = true; 


    } 
} 

我意识到这个代码需要大量的清理工作,因为它可以做了很多整洁短,但这是暂时的测试,如果我能得到的报告工作。 也请原谅方法和变量与坏名字,这些被映射到我的设计作为我的参考,并且当这完成时也将被改变,我可以想出一些好名字。

非常感谢。我的报告

副本

enter image description here

@reniuz

namespace RepSalesNetAnalysis 
{ 
public partial class MyPrintPreviewForm : DevExpress.XtraEditors.XtraForm 
{ 
    public MyPrintPreviewForm() 
    { 
     InitializeComponent(); 
    } 

    XtraReport1 report = new XtraReport1(); 

    private void MyPrintPreviewForm_Load(object sender, EventArgs e) 
    { 
     printControl1.PrintingSystem = report.PrintingSystem; 
     //creating document 
     report.CreateDocument(); 
    } 

    public void addSeries1(double top, double tmid, double bmid, double bottom, string pgName, bool table1) 
    { 
     //calling your method in report 
     report.myChartSeries1(top, tmid, bmid, bottom, pgName, table1); 
     //recreate document 
     //report.CreateDocument(); 
    } 

    public void addSeries2(double top, double tmid, double bmid, double bottom, string pgName, bool table2) 
    { 
     //calling your method in report 
     report.myChartSeries2(top, tmid, bmid, bottom, pgName, table2); 
     //recreate document 
     //report.CreateDocument(); 
    } 

    public void addSeries3(double top, double tmid, double bmid, double bottom, string pgName, bool table3) 
    { 
     //calling your method in report 
     report.myChartSeries3(top, tmid, bmid, bottom, pgName, table3); 
     //recreate document 
     //report.CreateDocument(); 
    } 

    public void addSeries4(double top, double tmid, double bmid, double bottom, string pgName, bool table4) 
    { 
     //calling your method in report 
     report.myChartSeries4(top, tmid, bmid, bottom, pgName, table4); 
     //recreate document 
     //report.CreateDocument(); 
    } 

    public void addBranchName(string BranchName) 
    { 
     report.branchname(BranchName); 
    } 

    public void addNames(string pg1k, string pg2k, string pg3k, string pg4k) 
    { 
     report.names(pg1k, pg2k, pg3k, pg4k); 
    } 

    public void addTotalSalesk(string totS) 
    { 
     report.TotalSalesk(totS); 
    } 

    public void addTotalQtyk(string totQ) 
    { 
     report.TotalQtyk(totQ); 
    } 

    public void addSelectedSales(string pg1S, string pg2S, string pg3S, string pg4S) 
    { 
     report.SelectedSales(pg1S, pg2S, pg3S, pg4S); 
    } 

    public void addSelectedQty(string pg1Q, string pg2Q, string pg3Q, string pg4Q) 
    { 
     report.SelectedQty(pg1Q, pg2Q, pg3Q, pg4Q); 
    } 

    public void addPgGrpPercent(string pg1P, string pg2P, string pg3P, string pg4P) 
    { 
     report.PgGrpPercent(pg1P, pg2P, pg3P, pg4P); 
    } 

    public void addPgTop50(string pg1t5, string pg2t5, string pg3t5, string pg4t5) 
    { 
     report.PgTop50(pg1t5, pg2t5, pg3t5, pg4t5); 
    } 

    public void addPgTop100(string pg1t1, string pg2t1, string pg3t1, string pg4t1) 
    { 
     report.PgTop100(pg1t1, pg2t1, pg3t1, pg4t1); 
    } 

    public void addpgTop200(string pg1t2, string pg2t2, string pg3t2, string pg4t2) 
    { 
     report.PgTop200(pg1t2, pg2t2, pg3t2, pg4t2); 
    } 

    public void addPgOver(string pg1tO, string pg2tO, string pg3tO, string pg4tO) 
    { 
     report.PgOver(pg1tO, pg2tO, pg3tO, pg4tO,); 
    } 

} 
} 

我应该在哪里把创建文件?

+0

的DevExpress报告有显示报告时,可输入参数。也许你应该使用它们,而不是自定义输入 – Reniuz 2012-03-15 09:18:16

+0

你的意思是显示报告时的用户输入?就像我说过的我有文本框显示我的表格中的计算结果。然后,我将它们显示的值作为报表的输入。硬编码分配给我需要的确切布局。这会降低动态性,但我知道报表从不会更改值,因此当我的文本框更新时,我还需要更新报表框以及xtrachart的信息。这需要发生在我预览我的报告或预览 – lemunk 2012-03-15 09:59:28

+0

你有什么意思吗? – lemunk 2012-03-15 10:01:25

回答

2

代码更新报告:

//XtraReport1 is your report 
XtraReport1 report = new XtraReport1(); 
//Open print preview form 
report.ShowPreview(); 

//Update your report content 
report.myChartSeries2(1,2,3,4,DateTime.Now.ToShortTimeString()); 
//Recreate/update document in print preview 
report.CreateDocument(); 

有关CreateDocument()方法访问更多的细节和注意事项DevExpress documentation

+0

theres有一个小问题,当我关闭printpreview窗体,然后再次运行按钮,它抛出异常错误。 set {printControl1.PrintingSystem = value.PrintingSystem;它说这需要一个“新”关键字来创建对象 – lemunk 2012-03-15 12:32:00

+1

好吧,我愚蠢:)你甚至不需要任何自定义窗体。当你使用'XtraReport1 report = new XtraReport1(); report.ShowPreview();'当你需要刷新报表时调用'report.CreateDocument();'所以在这个问题的答案你的问题的答案使用CreateDocument刷新它:)...第二杯咖啡大脑开始后工作:) – Reniuz 2012-03-15 12:44:46

+0

lmao,所以我需要的一切都是那一行哈哈 – lemunk 2012-03-15 12:46:21