水晶报表制作

 
View Code
 1 <script type="text/javascript"  >
2
3 // $("#IFRAME1").attr("src", "PrintRpt.aspx");src="jquery-1.7.js"
4 // $(document).load(function() { $("#IFRAME1").attr("src", "PrintRpt.aspx") })
5
6 function openPrintCode() {
7
8 var stockName = document.getElementById("ddltStockName").value;
9 var codeNo = document.getElementById("ddltCODE_NAME").value;
10 var bClass = document.getElementById("ddltCLASS_NAME").value;
11 document.getElementById("IFRAME1").src = "PrintRpt.aspx?codeNo=" + codeNo + "&stockName=" + stockName + "&bClass=" + bClass;
12 document.getElementById("MyFormLayer").style.display = "block";
13 }
14
15
16
17 function ClearIframe() {
18 // document.getElementById("IFRAME1").src = " ";
19 document.getElementById("MyFormLayer").style.display = "none";
20 }
21 function hiddenRpt() {
22 document.getElementById("ddltCODE_NAME").value = "";
23 document.getElementById("ddltStockName").value = "";
24 document.getElementById("ddltCLASS_NAME").value = "";
25 document.getElementById("MyFormLayer").style.display = "none";
26 }
27 </script>
28
29
30 <div>
31 <asp:ScriptManager ID="ScriptManager1" runat="server">
32 </asp:ScriptManager>
33 <asp:UpdatePanel ID="upAjax" runat="server">
34 <ContentTemplate>
35 <table style="width: 100%">
36 <tr>
37 <td align="center" colspan="2" class="td_Add">
38 <asp:Label ID="Label3" runat="server" Font-Bold="True" Font-Italic="False" Text="查詢條件"
39 Width="115px" CssClass="td-Itemtitle" Font-Names="標楷體" Height="22px"></asp:Label>
40 <asp:Label ID="Label5" runat="server" Text="(* 號表示:不得空值)" CssClass="td-ItemtLab"></asp:Label>
41 </td>
42 </tr>
43 <tr>
44 <td align="right" class="td_Add">
45 <asp:Label ID="Label1" runat="server" Text="倉庫別" Width="125px" CssClass="td-labWhite"></asp:Label>
46 </td>
47 <td align="left" style="width: 65%" class="td_Add_V">
48 <asp:DropDownList ID="ddltStockName" runat="server" Height="26px" Width="125px" TabIndex="1">
49 </asp:DropDownList>
50 </td>
51 </tr>
52 <tr>
53 <td align="right" class="td_Add">
54 <asp:Label ID="Label2" runat="server" Text="屬性別" Width="125px" CssClass="td-labWhite"></asp:Label>
55 </td>
56 <td align="left" style="width: 65%" class="td_Add_V">
57 <asp:DropDownList ID="ddltCODE_NAME" runat="server" Height="26px" Width="125px" TabIndex="2"
58 AutoPostBack="True" OnSelectedIndexChanged="ddltCODE_NAME_SelectedIndexChanged">
59 </asp:DropDownList>
60 </td>
61 </tr>
62 <tr>
63 <td align="right" class="td_Add">
64 <asp:Label ID="Label4" runat="server" Text="分類別" Width="125px" CssClass="td-labWhite"></asp:Label>
65 </td>
66 <td align="left" style="width: 65%" class="td_Add_V">
67 <asp:DropDownList ID="ddltCLASS_NAME" runat="server" Height="26px" Width="125px"
68 TabIndex="3">
69 </asp:DropDownList>
70 </td>
71 </tr>
72 <tr>
73 <td align="center" style="width: 20%; height: 32px" colspan="2" class="td_Add_V">
74 <input id="Button1" type="button" onclick="openPrintCode();" value="查詢" tabindex="4" />
75 &nbsp;&nbsp;&nbsp;&nbsp;
76 <%-- <input id="btnCancel" type="button" onclick="hiddenRpt();" value="取消" tabindex="4" />--%>
77 <asp:Button ID="btnCancel" runat="server" Text="取消" TabIndex="5"
78 onclick="btnCancel_Click" OnClientClick="ClearIframe();"/>
79 </td>
80 </tr>
81 </table>
82
83 </ContentTemplate>
84 </asp:UpdatePanel>
85
86 <div align="center" id="MyFormLayer" style="display: none; width: 100%; height: 700px;">
87 <iframe frameborder="0" align="middle" id="IFRAME1" runat="server" style="border: solid #ffffff;
88 width: 100%; height: 95%" scrolling="no" ></iframe>
89 </div>
90
91 </div>

其中有两个 DropDownList是联动的。需要在SelectedIndexChanged()事件中操作,写完代码后一运行才发现根本没有触发些事件,纠结了一下下,突然间

灵感大发,原来下拉单的AUTOPOSTBACK属性没有设置为TRUE,肯定联动不起来啊。呵呵。

 

下面贴出Iframe控件中src 中的后台代码:

 protected void Page_Init(object sender, EventArgs e)
{

string stockNo = Request["stockName"];
string codeNo = Request["codeNo"];
string bClass = Request["bClass"];
DataTable dt = new DataTable();
dt = acc.GetPrintData(stockNo, codeNo, bClass);
//foreach (DataRow dr in dt.Rows)
//{
// dr["SETACT_YM"] = dr["SETACT_YM"].ToString().Substring(0, 4) + "/" + dr["SETACT_YM"].ToString().Substring(4);
//}
ReportDocument report = new ReportDocument();

report.Load(Server.MapPath("StockRpt.rpt"));
report.SetDataSource(dt);
this.CrystalReportViewer1.ReportSource = report;
}

 

些为报表页面,点击资料库栏位可设置它的资料来源。(下面的name)

<xs:element name="urgedRpt">
<xs:complexType>
<xs:sequence>
<xs:element name="STOCK_NAME" type="xs:string" />
<xs:element name="PRODUCT_FROM" type="xs:string" />
<xs:element name="CLASS_NAME" type="xs:string" />
<xs:element name="MTL_NO" type="xs:string" />
<xs:element name="MTL_NAME" type="xs:string" />
<xs:element name="BEGIN_QTY" type="xs:string" />
<xs:element name="INCOME_QTY" type="xs:string" />
<xs:element name="SUBTRACT_QTY" type="xs:string" />
<xs:element name="BALANCE_QTY" type="xs:string" />
<xs:element name="AVERACE_PRICE" type="xs:string" />
<xs:element name="BALANCE_AMT" type="xs:string" />
<xs:element name="SETACT_YM" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>

这样报表差不多就做好了噢!只是我在做的过程当中,由于下拉单的SelectedIndexChange()触发,页面回传了,所以iframe中就没有东西了。虽然只是一个小bug,

但是还是纠结了蛮久的。呵呵,尝试了很多方法,body与Iframe的OnLoad()事件,还尝试用JQUERY来给IFRAME的SRC属性另赋值等等。后来一个高手说Iframe与下拉单不要同时位于UpdatePanel中,不然会有干扰。将IFRAME弄出来,Iframe中的报表果然不刷新啦。他说用ScriptManager+UpdatePanel可以实现“异步刷新”.

位于UpdatePanel中的東西一般來說是都可以實現無刷新提交數據,把二者分開來,下面IFAME中部分不會提交刷新。

下面是效果图:点击属性别后,报表 不会消失了。



posted @ 2012-03-19 17:00  Flyyingzi77  阅读(294)  评论(0)    收藏  举报