Currently we are looking for a report engine to integrate to our own system, and I would like to choose Stimulsoft Reports.Net. When I was making proposal, I need add datasource to the report dictionary dynamicly, but I failed.
And here is the code, could you give me a help, thanks a lot.
Code: Select all
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
StiReport report = new StiReport();
private void Form1_Load(object sender, EventArgs e)
{
StiOptions.Engine.GlobalEvents.DictionaryMenuEditOpenInDesigner += GlobalEvents_DictionaryMenuEditOpenInDesigner;
report.Design(true);
report.Compile();
}
private void GlobalEvents_DictionaryMenuEditOpenInDesigner(object sender, EventArgs e)
{
var t = sender as Stimulsoft.Controls.Win.DotNetBar.ButtonItem;
Stimulsoft.Controls.Win.DotNetBar.ButtonItem btnNewDb = new Stimulsoft.Controls.Win.DotNetBar.ButtonItem();
btnNewDb.Text = "Add My DataSource";
btnNewDb.Name="btnNewDb";
btnNewDb.Click += btnNewDb_Click;
if(!t.SubItems.Contains("btnNewDb"))
{
t.SubItems.Add(btnNewDb);
}
}
private void btnNewDb_Click(object sender, EventArgs e)
{
report.Dictionary.Clear();
DataSet ds = new DataSet("CustomerDatasource");
DataTable dt1 = new DataTable();
dt1.Columns.Add(new DataColumn("c1", typeof(int)));
dt1.Columns.Add(new DataColumn("c2", typeof(string)));
DataTable dt2 = new DataTable();
dt2.Columns.Add(new DataColumn("c3", typeof(int)));
dt2.Columns.Add(new DataColumn("c4", typeof(string)));
ds.Tables.Add(dt1);
ds.Tables.Add(dt2);
report.Dictionary.ImportXMLSchema(ds);
report.Dictionary.Synchronize();
report.Compile();
}
}