2009年6月11日 星期四

進度條

進度條
在處理檔案或資料時,如果處理時間過長導致使用者無法等待時,
常常會需要將處理資料的動作改為背景作業,以便使用者進行其他事項。

以下是進行背景作業時產生進度條的做法(資源來自這裡)

功能頁 (要執行資料處理的那頁)

private void btnHistory_Click(object sender, System.Web.UI.ImageClickEventArgs e)
{
System.Threading.Thread thread=new System.Threading.Thread(new System.Threading.ThreadStart(LongTask));
thread.Start();

Session["State"]=1;
OpenProgressBar(this.Page);
}

private void LongTask()
{
//模擬長時間任務
//每個循環模擬任務進行到不同的階段
for(int i=0;i<101;i++)
{
System.Threading.Thread.Sleep(1000);
//設置每個階段的state值,用來顯示當前的進度
Session["State"] = i+1;
}
//任務結束
Session["State"] = 1000;

}

public static void OpenProgressBar(System.Web.UI.Page Page)
{
StringBuilder sbScript = new StringBuilder();

sbScript.Append("<script language='JavaScript' type='text/javascript'>\n");
sbScript.Append("<!--\n");

//IE5.5以下使用window.open
sbScript.Append("window.open('Progress.aspx','', 'height=100, width=350, toolbar =no, menubar=no, scrollbars=no, resizable=no, location=no, status=no');\n");
sbScript.Append("// -->\n");
sbScript.Append("</script>\n");

Page.RegisterClientScriptBlock("OpenProgressBar", sbScript.ToString());

}



進度表(Progress.aspx)

<%@ Page language="c#" Codebehind="Progress.aspx.cs" AutoEventWireup="false" Inherits="Approve.Progress" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
<HEAD>

<title>Progress</title>
<base target="_self">

</HEAD>
<body MS_POSITIONING="GridLayout">
<form id="Form1" method="post" runat="server">
<asp:Label id="lblMessages" runat="server"></asp:Label> <asp:Panel id="panelBarSide" runat="server" Width="300px" BorderStyle="Solid" BorderWidth="1px" ForeColor="Silver"> <asp:Panel id="panelProgress" runat="server" Width="10px" BackColor="Green"></asp:Panel> </asp:Panel> <asp:Label id="lblPercent" runat="server" ForeColor="Blue"></asp:Label>
</form>
</body>
</HTML>

進度表(Progress.aspx.cs)

protected System.Web.UI.WebControls.Label lblMessages;
protected System.Web.UI.WebControls.Panel panelProgress;
protected System.Web.UI.WebControls.Panel panelBarSide;
protected System.Web.UI.WebControls.Label lblPercent;

private int state = 0;
private void Page_Load(object sender, System.EventArgs e)
{
// 在這裡放置使用者程式碼以初始化網頁 // Put user code to initialize the page here
if(Session["State"]!=null)
{
state = Convert.ToInt32(Session["State"].ToString());
}
else
{
Session["State"]=0;
}
if(state>0&&state<=100)
{
this.lblMessages.Text = "Task undertaking!";
this.panelProgress.Width = state*3;
this.lblPercent.Text = state + "%";
Page.RegisterStartupScript("","<script>window.setTimeout('window.Form1.submit()',100);</script>");
}
if(state==1000)
{
this.panelProgress.Visible = false;
this.panelBarSide.Visible = false;
this.lblMessages.Text = "Task Completed!";
Page.RegisterStartupScript("","<script>window.close();</script>");
}
}

master page

master page

這次的case是拿master page 當 frame set 用

不直接使用frame set是因為無法拿掉每個區塊間的空隙,

即使border width調成0,區塊間還是有空白的存在



正常使用master page的狀況如下
master page

<%@ Master Language="C#" AutoEventWireup="true" CodeFile="MasterPage.master.cs" Inherits="MasterPage" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title></title>
<LINK href="css/sub_index.css" type="text/css" rel="stylesheet">
</head>
<body>
<form id="form1" runat="server">
<div>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td colspan="2"><embed src=".\images\banner.swf" width="100%"></embed></td></tr>
<tr>
<td style="width: 74px" valign="top">
<table border=0 cellspacing=0 cellpadding=0>
<tr><td><img src="images/web_02.gif" /></td></tr>
<tr><td><a href="HyperLink7.aspx" target="_self"><img src="images/web_24.gif" alt="綠色車輛查詢" border="0" /></a></td></tr>
<tr><td><a href="GreenCar.aspx" target="_self"><img src="images/27005563.gif" alt="綠色車輛指南網首頁" border="0" /></a></td></tr>
<tr><td><a href="http://www.epa.gov.tw/index.aspx" target="_blank"><img src="images/web_04.gif" alt="環保署首頁" border="0" /></a></td></tr>
<tr><td><a href="http://air.epa.gov.tw/Public/Main.aspx" target="_blank"><img src="images/web_05.gif" alt="空保處首頁" border="0" /></a></td></tr>
<tr><td><a href="http://mobile.epa.gov.tw/index.aspx" target="_blank"><img src="images/web_06.gif" alt="移動污染源管制網首頁" border="0" /></a></td></tr>
<tr><td><a href="http://mobile.epa.gov.tw/car_mQuery.asp" target="_blank"><img src="images/web_23.gif" border="0" alt="歷年汽機車審驗值資料" /></a></td></tr>
<tr><td><img src="images/web_07.gif" alt="綠色車輛介紹" /></td></tr>
<tr><td><a href="HyperLink.aspx" target="_self"><img src="images/web_08.gif" alt="電動自行車" border="0" /></a></td></tr>
<tr><td><a href="HyperLink2.aspx" target="_self"><img src="images/web_09.gif" alt="電動輔助自行車" border="0" /></a></td></tr>
<tr><td><a href="HyperLink3.aspx" target="_self"><img src="images/web_10.gif" alt="電動機車" border="0" /></a></td></tr>
<tr><td><a href="HyperLink4.aspx" target="_self"><img src="images/web_11.gif" alt="油電混合車" border="0" /></a></td></tr>
<tr><td><a href="HyperLink5.aspx" target="_self"><img src="images/web_12.gif" alt="先進環保技術" border="0" /></a></td></tr>
<tr><td><a href="HyperLink6.aspx" target="_self"><img src="images/web_13.gif" alt="車輛污染防制知識" border="0" /></a></td></tr>
<tr><td><img src="images/web_14.gif" alt="各國綠色車輛資訊" /></td></tr>
<tr><td><a href="http://www.epa.gov/greenvehicle" target="_blank"><img src="images/web_15.gif" alt="美國環保署" border="0" /></a></td></tr>
<tr><td><a href="http://www.vcacarfueldata.org.uk/information/how-to-use-the-data-tables.asp" target="_blank"><img src="images/web_16.gif" alt="英國車輛認證署" border="0" /></a></td></tr>
<tr><td><a href="http://www.greenvehicleguide.gov.au/GVGPublicUI/ApplicationFirstStartTaskWebForm.aspx" target="_blank"><img src="images/web_17.gif" alt="澳洲運輸及區域服務" border="0" /></a></td></tr>
<tr><td><a href="http://www.rightcar.govt.nz/" target="_blank"><img src="images/web_18.gif" alt="紐西蘭交通署" border="0" /></a></td></tr>
<tr><td><a href="http://www.eta.co.uk/" target="_blank"><img src="images/web_19.gif" alt="英國運輸與環境機構" border="0" /></a></td></tr>
<tr><td><img src="images/web_20.gif" alt="綠色運具資訊查詢" /></td></tr>
<tr><td><a href="http://greentransport.iot.gov.tw/" target="_blank"><img src="images/web_21.gif" alt="綠色運輸系統教育宣導網" border="0" /></a></td></tr>
<tr><td><a href="http://proj.moeaidb.gov.tw/lev/Product/" target="_blank"><img src="images/web_22.gif" alt="電動車輛產業網" border="0" /></a></td></tr>
</table></td>
<td valign=top><asp:contentplaceholder id="ContentPlaceHolder1" runat="server"> </asp:contentplaceholder></td></tr>
<tr><td colspan="2"><embed src=".\images\down.swf" height="150" width="100%"></embed></td></tr>
</table>
</div>
</form>
</body>
</html>

content

<%@ Page Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="Default" Title="預設首頁" %>
<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
程式區
</asp:Content>

程式區:
1.可以自行拉介面,就像平常在aspx一樣!! 但只有<body></body>內的東西
2.可以使用<!-- #include file = "index.html"--> 將整個網頁包進去,aspx也可以
3.可以使用<iframe> 通通都可以包進去

建構出來的畫面如下:

2009年4月13日 星期一

timeout

這幾天因為轉檔時出現timeout
無法順利轉檔~~
第一個想到的就是提升效能
讓執行時速度變快
也許時間就能壓制在timeout時限內

經過一番努力
把原本cursor的方式改掉後
終於把時間壓縮了1/3
由快60秒壓到37秒左右
但是執行時一樣會發生timeout
...........

後來只好從延長timeout時間來著手
原來使用sqlDataAdapter元件時
timeout的時間default是30秒
可以從command的commandtimeout去設定timeout的時間