此示例显示如何从代码连接到XML或SQL数据库。要从代码创建和显示查看器,您需要调用StiViewerFx.initialize() 静态方法。在应用程序的initialize事件中调用此方法。还要加载报表模板文件并将其分配给reportString变量:
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" minWidth="1024" minHeight="768" backgroundColor="#e8e8e8" initialize="onInitialize()" xmlns:viewer="stimulsoft.viewer.*">
private function onInitialize(): void { StiViewerFx.initialize(); var request: URLRequest = new URLRequest(demoFile); var loader: URLLoader = new URLLoader(); loader.addEventListener(Event.COMPLETE, onLoadComplete); loader.load(request); } private function onLoadComplete(event: Event): void { var loader: URLLoader = event.target as URLLoader; reportString = loader.data as String; }
要创建XML数据连接,需要使用StiXmlDatabase类。在构造函数的参数中,您应该传递数据连接名称,部分传递给XSD架构和XML数据文件的路径。然后使用report.dictionary.databases.add()方法将创建的数据连接对象添加到报表中。如果需要清除报表中的现有数据连接,可以使用report.dictionary.databases.clear()方法:
private function onConnectToXMLClick(): void { // Create new report object var report: StiReport = new StiReport(); // Load report from XML string report.loadReportFromString(reportString); // Create new XML database with same name "Demo" var database: StiXmlDatabase = new StiXmlDatabase("Demo", "reports/data/Demo.xsd", "reports/data/Demo.xml"); // Clear all existing databases in report report.dictionary.databases.clear(); // Add database to report report.dictionary.databases.add(database); // Show report in Viewer dialog window report.showDialog(); }
要创建MySQL数据连接,操作将是相同的,除了您需要使用StiMySqlDatabase类。在构造函数的参数中,您应该传递数据连接名称和别名,连接字符串和标志以进行密码管理:
private function onConnectToMySqlClick(): void { // Create new report object var report: StiReport = new StiReport(); // Load report from XML string report.loadReportFromString(reportString); // Create new MySql database with same name "Demo" var database: StiMySqlDatabase = new StiMySqlDatabase("Demo", "", "Server=localhost;Port=3306;Database=db_name;Uid=root;Pwd=;", false); // Clear all existing databases in report report.dictionary.databases.clear(); // Add database to report report.dictionary.databases.add(database); }
下面的屏幕截图中,您可以看到示例代码的结果。