我尝试解决问题,但我仍然没有成功。
我在Win 8.1,VS2013社区工作。
我有简单的Winform应用程序,包含DatagridView和Button。 Datagridview有一列,在表单的构造函数中填充了样本值。
private List<StringValue> list;
private List<Report> lr;
public Form1()
{
InitializeComponent();
list = new List<StringValue>();
lr = new List<Report>();
list.Add(new StringValue("bla1"));
list.Add(new StringValue("bla2"));
dataGridView1.DataSource = list;
}
作为项目的一部分,我还有数据集组件,在按钮点击后填充。并为datagridview的每一行创建水晶报告及其名称并添加到列表中。
private void button1_Click(object sender, EventArgs e)
{
int i = 1;
ReportDocument cr;
try
{
foreach (DataGridViewRow row in dataGridView1.Rows)
{
cr = new CrystalReport1();
dataSet11.DataTable1.Rows.Clear();
cr.SetDataSource(dataSet11);
DataRow nr = dataSet11.DataTable1.NewRow();
nr["sloup1"] = row.Cells["sloup1"].Value;
dataSet11.DataTable1.Rows.Add(nr);
cr = new CrystalReport1();
cr.SetDataSource(dataSet11);
cr.Refresh();
lr.Add(new Report(i.ToString(), cr));
i++;
}
ReportViewer viewer = new ReportViewer(lr);
viewer.Show();
}
catch (Exception ex)
{ }
}
}
报告类
public class Report
{
private string m_name = null;
private CrystalDecisions.CrystalReports.Engine.ReportDocument m_document;
public string Name
{
get{return m_name;}
set{m_name = value;}
}
public ReportDocument reportDocument
{
get { return m_document; }
set { m_document = value; }
}
public Report(string name, ReportDocument doc)
{
m_name = name;
m_document = doc;
}
}
我还使用listBox创建了其他表单,其中显示了报表和crystalreportviewer控件的名称。单击列表框中的项目后,我想打开从form1发送的crystalreport。这是源代码:
List<Report> lr = null;
public ReportViewer()
{
InitializeComponent();
}
public ReportViewer(List<Report> reports) : this()
{
lr = reports;
foreach (Report report in reports)
{
listBox1.Items.Add(report.Name);
}
listBox1.SelectedIndex = 0;
}
private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
crView.ReportSource = null;
ReportDocument rep = new ReportDocument();
rep = GetReport(listBox1.SelectedIndex);
crView.ReportSource = rep;
this.crView.RefreshReport();
}
private ReportDocument GetReport(int p)
{
return lr[p].reportDocument;
}
}
现在出现了什么问题:当我点击列表框中的项目时,在查看器中仅显示上一个报告。有两个名称不同的项目,但是只有一个报告。 如果我尝试在form1上为每个创建的报告显示报告,则值和报告都可以,但在selectedindexchanged事件中,两个reportdocument都是相同的。 请问哪里有错误? 如何更新crzstal报告,以便显示正确的数据?
提前感谢。