采用MSComDlg.CommonDialog 经常出现Automation 服务器不能创建对象--的情况,所以还是采用传统的IE 中的html来实现比较好。
<script language="javascript" type="text/javascript">
//根据选择的报表项目从服务器端载入报表模板
function LoadRpt() {
var Hid = document.getElementById("Hid");
var id = Hid.value;
if (id != "") {
var LoadURL = "ReportLoadFromDB.aspx?id=" + id;
var success = ReportDesigner.Report.LoadFromURL(encodeURI(LoadURL));
if (success == true) {
ReportDesigner.Reload();
}
else {
alert("载入报表失败!");
}
}
}
//将当前设计的报表模板保存到服务器上
function btnSave_onclick() {
var Hid = document.getElementById("Hid");
var id = Hid.value;
if (id == "") {
alert("请先保存报表的名称等信息,再保存报表信息!");
return;
}
ReportDesigner.Post();
var SaveURL = "ReportSaveToDB.aspx?id=" + id;
var success = ReportDesigner.Report.SaveToURL(encodeURI(SaveURL));
if (success == true)
alert("保存报表成功!");
else
alert("保存报表失败!");
}
/// type="file" 解决IE8下的C:\fakepath\路径问题
function getUPFilePath(obj) {
if (obj) {
if (window.navigator.userAgent.indexOf("MSIE") >= 1) {
obj.select();
return document.selection.createRange().text;
}
else if (window.navigator.userAgent.indexOf("Firefox") >= 1) {
if (obj.files) {
return obj.files.item(0).getAsDataURL();
}
return obj.value;
}
return obj.value;
}
}
//显示打开文件对话框选择一个文件,从客户端本地文件中载入报表模板
function btnLoadLocalFile_onclick() {
document.all.LOADFILE.click();
var file_upl = document.getElementById('LOADFILE');
FileName = getUPFilePath(file_upl);
if (FileName != "") {
var filetypes = FileName.substring(FileName.lastIndexOf('.') + 1, FileName.length)
if (filetypes == 'grf') {
ReportDesigner.Report.LoadFromFile(FileName);
ReportDesigner.Reload();
}
else {
alert("只能上传 *.grf 格式的报表文件!");
}
}
else {
alert("没有选择报表文件!");
}
}
//另存为
function btnSaveFile_onclick() {
ReportDesigner.Post();
try {
var FileName = 'c:\\Report.grf';
if (FileName != "") {
ReportDesigner.Report.SaveToFile(FileName);
alert("报表文件已经保存到:" + FileName);
}
} catch (e) {
if (e.message != 'Cancel was selected.')
alert(e.description);
}
}
</script>
注意 btnLoadLocalFile_onclick函数和getUPFilePath函数
HTML代码:
<body style="margin: 0" οnlοad="return LoadRpt()">
<form id="form1" runat="server">
<asp:HiddenField ID="Hid" runat="server" />
</form>
<div class="navigationBg">
<input type="file" name="LOADFILE" id="LOADFILE" style="width: 0px; height: 0px;">
<input id="Button2" name="btnLoadLocalFile" οnclick="return btnLoadLocalFile_onclick()"
class="Btn" type="button" value="载入本地文件" />
<input id="Button4" name="btnLoadLocalFile" οnclick="return btnSaveFile_onclick()"
class="Btn" type="button" value="另存为" />
<input id="Button1" name="btnSave" class="Btn2" type="button" value="保存" language="javascript"
οnclick="return btnSave_onclick()" />
<input id="Button3" class="Btn2" type="button" value="关闭" language="javascript" οnclick="javascript:window.close();" />
</div>
<script language="javascript">
CreateDesigner("", "", "");
// CreateDisplayViewer("../../attachment/Rpt/grf/www.grf", "")
</script>
</body>
注意:<input type="file" name="LOADFILE" id="LOADFILE>的样式,主要是为了隐藏该框
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
<title></title>
<object id="Report" classid="CLSID:50CA95AF-BDAA-4C69-A9C6-93E1136E68BC" codebase="../../lib/griectl/griectl.cab#Version=5,5,11,215">
</object>
<style type="text/css">
html, body
{
margin: 0;
height: 100%;
}
</style>
<script src="../../Scripts/RptCreateControl.js" type="text/javascript"></script>
<script src="../../Scripts/RptGRUtility.js" type="text/javascript"></script>
<script language="javascript" type="text/javascript">
//根据选择的报表项目从服务器端载入报表模板
function LoadRpt() {
var Hid = document.getElementById("Hid");
var id = Hid.value;
if (id != "") {
var LoadURL = "ReportLoadFromDB.aspx?id=" + id;
var success = ReportDesigner.Report.LoadFromURL(encodeURI(LoadURL));
if (success == true) {
ReportDesigner.Reload();
}
else {
alert("载入报表失败!");
}
}
}
//将当前设计的报表模板保存到服务器上
function btnSave_onclick() {
var Hid = document.getElementById("Hid");
var id = Hid.value;
if (id == "") {
alert("请先保存报表的名称等信息,再保存报表信息!");
return;
}
ReportDesigner.Post();
var SaveURL = "ReportSaveToDB.aspx?id=" + id;
var success = ReportDesigner.Report.SaveToURL(encodeURI(SaveURL));
if (success == true)
alert("保存报表成功!");
else
alert("保存报表失败!");
}
/// type="file" 解决IE8下的C:\fakepath\路径问题
function getUPFilePath(obj) {
if (obj) {
if (window.navigator.userAgent.indexOf("MSIE") >= 1) {
obj.select();
return document.selection.createRange().text;
}
else if (window.navigator.userAgent.indexOf("Firefox") >= 1) {
if (obj.files) {
return obj.files.item(0).getAsDataURL();
}
return obj.value;
}
return obj.value;
}
}
//显示打开文件对话框选择一个文件,从客户端本地文件中载入报表模板
function btnLoadLocalFile_onclick() {
document.all.LOADFILE.click();
var file_upl = document.getElementById('LOADFILE');
FileName = getUPFilePath(file_upl);
if (FileName != "") {
var filetypes = FileName.substring(FileName.lastIndexOf('.') + 1, FileName.length)
if (filetypes == 'grf') {
ReportDesigner.Report.LoadFromFile(FileName);
ReportDesigner.Reload();
}
else {
alert("只能上传 *.grf 格式的报表文件!");
}
}
else {
alert("没有选择报表文件!");
}
}
//另存为
function btnSaveFile_onclick() {
ReportDesigner.Post();
try {
var FileName = 'c:\\Report.grf';
if (FileName != "") {
ReportDesigner.Report.SaveToFile(FileName);
alert("报表文件已经保存到:" + FileName);
}
} catch (e) {
if (e.message != 'Cancel was selected.')
alert(e.description);
}
}
</script>
</head>
<body style="margin: 0" οnlοad="return LoadRpt()">
<form id="form1" runat="server">
<asp:HiddenField ID="Hid" runat="server" />
</form>
<div class="navigationBg">
<input type="file" name="LOADFILE" id="LOADFILE" style="width: 0px; height: 0px;">
<input id="Button2" name="btnLoadLocalFile" οnclick="return btnLoadLocalFile_onclick()"
class="Btn" type="button" value="载入本地文件" />
<input id="Button4" name="btnLoadLocalFile" οnclick="return btnSaveFile_onclick()"
class="Btn" type="button" value="另存为" />
<input id="Button1" name="btnSave" class="Btn2" type="button" value="保存" language="javascript"
οnclick="return btnSave_onclick()" />
<input id="Button3" class="Btn2" type="button" value="关闭" language="javascript" οnclick="javascript:window.close();" />
</div>
<script language="javascript">
CreateDesigner("", "", "");
// CreateDisplayViewer("../../attachment/Rpt/grf/www.grf", "")
</script>
</body>
</html>