2011年12月6日 星期二

[ASP.NET] 日期與時間的運算

轉載自  http://www.dotblogs.com.tw/regionbbs/archive/2008/10/09/5636.aspx
by 小朱大大


好像不少人都不知道時間是可以相減的,而且不會太難,DateTime 有覆寫 "-" 這個運算子,所以只要 DateTime2 - DateTime1,或是 DateTime - TimeSpan 都可,不過它傳回來的是一個 TimeSpan (時間幅度) 的物件,可以由這個物件中的方法來取得兩個時間的差異。
TimeSpan ts = DateTime.Now - startDate;
Console.WriteLine(ts.Seconds); // 取得兩個時間相差幾秒。
另一個運算的方法是,兩個時間是否可以相加?答案是可以的,DateTime 也有覆寫 "+" 這個運算子,不過它要求 "+" 右邊的物件必須是一個 TimeSpan 物件,這樣的想法也沒錯,因為如果是兩個 DateTime 相加,那要根據什麼來加呢?
不過以加減日期時間運算來說,最常用的還是下列幾個方法:
  • DateTime.AddYears()
  • DateTime.AddMonths()
  • DateTime.AddDays()
  • DateTime.AddHours()
  • DateTime.AddMinutes()
  • DateTime.AddSeconds()
  • DateTime.AddTicks() // 刻度,單位為 100 亳微秒
  • DateTime.AddMilliseconds() // 加亳秒 (ms)
這些方法都可以支援正負數 (正數為加,負數為減),並且部份方法的資料型別是 double,也就是你可以浮點數格式。

2011年12月5日 星期一

window.open()的所有參數列表

window.open()的所有參數列表 
經常上網的朋友可能會到過這樣一些網站,一進入首頁立刻會彈出一個窗口,或者按一個連接或按鈕彈出,通常在這個窗口裡會顯示一些注意事項、版權信息、警告、歡迎光顧之類的話或者作者想要特別提示的信息。其實製作這樣的頁面效果非常的容易,只要往該頁面的HTML裡加入幾段Javascript代碼即可實現。下面俺就帶您剖析它的奧秘。 
【1、最基本的彈出窗口代碼】 
其實代碼非常簡單: 
<SCRIPT LANGUAGE="javascript"> 
<!-- 
window.open ('page.html') 
--> 
</SCRIPT> 
因為著是一段javascripts代碼,所以它們應該放在<SCRIPT LANGUAGE="javascript">標籤和</script>之間。<!-- 和 -->是對一些版本低的瀏覽器起作用,在這些老瀏覽器中不會將標籤中的代碼作為文本顯示出來。要養成這個好習慣啊。 
window.open ('page.html') 用於控制彈出新的窗口page.html,如果page.html不與主窗口在同一路徑下,前面應寫明路徑,絕對路徑(http://)和相對路徑(../)均可。 
用單引號和雙引號都可以,只是不要混用。 
這一段代碼可以加入HTML的任意位置,<head>和</head>之間可以,<body>間</body>也可以,越前越早執行,尤其是頁面代碼長,又想使頁面早點彈出就盡量往前放。 
【2、經過設置後的彈出窗口】 
下面再說一說彈出窗口的設置。只要再往上面的代碼中加一點東西就可以了。 
我們來定制這個彈出的窗口的外觀,尺寸大小,彈出的位置以適應該頁面的具體 
情況。 
<SCRIPT LANGUAGE="javascript"> 
<!-- 
window.open ('page.html', 'newwindow', 'height=100, width=400, top=0, left=0, toolbar=no, menubar=no, scrollbars=no, resizable=no,location=no, status=no') 
//寫成一行 
--> 
</SCRIPT> 
參數解釋: 
<SCRIPT LANGUAGE="javascript"> js腳本開始; 
window.open 彈出新窗口的命令; 
'page.html' 彈出窗口的文件名; 
'newwindow' 彈出窗口的名字(不是文件名),非必須,可用空''代替; 
height=100 窗口高度; 
width=400 窗口寬度; 
top=0 窗口距離屏幕上方的象素值; 
left=0 窗口距離屏幕左側的象素值; 
toolbar=no 是否顯示工具欄,yes為顯示; 
menubar,scrollbars 表示菜單欄和滾動欄。 
resizable=no 是否允許改變窗口大小,yes為允許; 
location=no 是否顯示地址欄,yes為允許; 
status=no 是否顯示狀態欄內的信息(通常是文件已經打開),yes為允許; 
</SCRIPT> js腳本結束 
【3、用函數控制彈出窗口】 
下面是一個完整的代碼。 
<html> 
<head> 
<script LANGUAGE="JavaScript"> 
<!-- 
function openwin() { 
window.open ("page.html", "newwindow", "height=100, width=400, toolbar=no, menubar=no, scrollbars=no, resizable=no, location=no, status=no" 
//寫成一行 
} 
//--> 
</script> 
</head> 
<body onload="openwin()"> 
...任意的頁面內容... 
</body> 
</html> 
這裡定義了一個函數openwin(),函數內容就是打開一個窗口。在調用它之前沒有 
任何用途。 
怎麼調用呢? 
方法一:<body onload="openwin()"> 瀏覽器讀頁面時彈出窗口; 
方法二:<body onunload="openwin()"> 瀏覽器離開頁面時彈出窗口; 
方法三:用一個連接調用: 
<a href="#" onclick="openwin()">打開一個窗口</a> 
注意:使用的「#」是虛連接。 
方法四:用一個按鈕調用: 
<input type="button" onclick="openwin()" value="打開窗口"> 
【4、同時彈出2個窗口】 
對源代碼稍微改動一下: 
<script LANGUAGE="JavaScript"> 
<!-- 
function openwin() { 
window.open ("page.html", "newwindow", "height=100, width=100, top=0,left=0,toolbar=no, menubar=no, scrollbars=no, resizable=no, location=no, status=no" 
//寫成一行 
window.open ("page2.html", "newwindow2", "height=100, width=100, top=100, left=100,toolbar=no, menubar=no, scrollbars=no, resizable=no, location=no, status=no" 
//寫成一行 
} 
//--> 
</script> 
為避免彈出的2個窗口覆蓋,用top和left控制一下彈出的位置不要相互覆蓋即可 
。最後用上面說過的四種方法調用即可。 
注意:2個窗口的name(newwindows和newwindow2)不要相同,或者乾脆全部為空。 
OK? 
【5、主窗口打開文件1.htm,同時彈出小窗口page.html】 
如下代碼加入主窗口<head>區: 
<script language="javascript"> 
<!-- 
function openwin() { 
window.open("page.html","","width=200,height=200" 
} 
//--> 
</script> 
加入<body>區: 
<a href="1.htm" onclick="openwin()">open</a>即可。 
【6、彈出的窗口之定時關閉控制】 
下面我們再對彈出的窗口進行一些控制,效果就更好了。如果我們再將一小段 
代碼加入彈出的頁面(注意是加入到page.html的HTML中,可不是主頁面中,否則 
...),讓它10秒後自動關閉是不是更酷了? 
首先,將如下代碼加入page.html文件的<head>區: 
<script language="JavaScript"> 
function closeit() { 
setTimeout("self.close()",10000) //毫秒 
} 
</script> 
然後,再用<body onload="closeit()"> 這一句話代替page.html中原有的<BO 
DY>這一句就可以了。(這一句話千萬不要忘記寫啊!這一句的作用是調用關閉窗 
口的代碼,10秒鐘後就自行關閉該窗口。) 
【7、在彈出窗口中加上一個關閉按鈕】 
<FORM> 
<INPUT TYPE='BUTTON' VALUE='關閉' onClick='window.close()'> 
</FORM> 
呵呵,現在更加完美了! 
【8、內包含的彈出窗口-一個頁面兩個窗口】 
上面的例子都包含兩個窗口,一個是主窗口,另一個是彈出的小窗口。 
通過下面的例子,你可以在一個頁面內完成上面的效果。 
<html> 
<head> 
<SCRIPT LANGUAGE="JavaScript"> 
function openwin() 
{ 
OpenWindow=window.open("", "newwin", "height=250, width=250,toolbar=no,scrollbars="+scroll+",menubar=no" ; 
//寫成一行 
OpenWindow.document.write("<TITLE>例子</TITLE>" 
OpenWindow.document.write("<BODY BGCOLOR=#ffffff>" 
OpenWindow.document.write("<h1>Hello!</h1>" 
OpenWindow.document.write("New window opened!" 
OpenWindow.document.write("</BODY>" 
OpenWindow.document.write("</HTML>" 
OpenWindow.document.close() 
} 
</SCRIPT> 
</head> 
<body> 
<a href="#" onclick="openwin()">打開一個窗口</a> 
<input type="button" onclick="openwin()" value="打開窗口"> 
</body> 
</html> 
看看 OpenWindow.document.write()裡面的代碼不就是標準的HTML嗎?只要按照 
格式寫更多的行即可。千萬注意多一個標籤或少一個標籤就會出現錯誤。記得用 
OpenWindow.document.close()結束啊。 
【9、終極應用--彈出的窗口之Cookie控制】 
回想一下,上面的彈出窗口雖然酷,但是有一點小毛病(沉浸在喜悅之中,一定 
沒有發現吧?)比如你將上面的腳本放在一個需要頻繁經過的頁面裡(例如首頁), 
那麼每次刷新這個頁面,窗口都會彈出一次,是不是非常煩人?:-( 
有解決的辦法嗎?Yes! ;-) Follow me. 
我們使用cookie來控制一下就可以了。 
首先,將如下代碼加入主頁面HTML的<HEAD>區: 
<script> 
function openwin(){ 
window.open("page.html","","width=200,height=200" 
} 
function get_cookie(Name) { 
var search = Name + "=" 
var returnvalue = ""; 
if (document.cookie.length > 0) { 
offset = document.cookie.indexOf(search) 
if (offset != -1) { 
offset += search.length 
end = document.cookie.indexOf(";", offset); 
if (end == -1) 
end = document.cookie.length; 
returnvalue=unescape(document.cookie.substring(offset, end)) 
} 
} 
return returnvalue; 
} 
function loadpopup(){ 
if (get_cookie('popped')==''){ 
openwin() 
document.cookie="popped=yes" 
} 
} 
</script> 
然後,用<body onload="loadpopup()">(注意不是openwin而是loadpop啊!) 
替換主頁面中原有的<BODY>這一句即可。你可以試著刷新一下這個頁面或重新進 
入該頁面,窗口再也不會彈出了。真正的Pop-Only-Once! 
寫到這裡彈出窗口的製作和應用技巧基本上算是完成了 


--------------------------------------- 
<td align=middle height=23 
onClick="window.location.href='http://www.wybook.net/cs/';this.style.backgroundColor='#606060'" 
onMouseOut="this.style.backgroundColor='#000000'" 
onMouseOver="this.style.backgroundColor='#606060'; this.style.cursor='hand'" 
style="FONT-SIZE: 9pt"><font 
color=#FFFFFF>設計論壇</font></td> 
---------------------------------------------------- 

利用頁面傳值獲取Calendar控件日期

1.構想:WebForm1構建一個TextBox,一個HyperLink控件。WebForm3(為什麼是3不是2呢?下面說明)構建一個Calendar控件。當點擊WebForm1的HyperLink時,打開WebForm3。在WebForm3的Calendar控件中選擇日期後,關閉WebForm3,並且WebForm1中的TextBox獲取剛才所選擇的日期。

2.實現:
1) 網上有現成的日期選擇控件,但考慮到軟件的安全性和版權問題,還是選擇自己開發。

2) 在WebForm3中獲取日期後,將數值記錄到Session中,並且採用Javascript:window.opener.location.reload();window.close的方法刷新WebForm1。這種方法在WebForm1中只構建了一個Textbox的時候可以很方便的使用,但是如果構建了多個TextBox,刷新的時候,會將其他TextBox內容清空,故不可取。

3) 使用ShowModalDialog的方法傳值,具體方法如下。

3.具體做法:(部分代碼)
WebForm1.aspx
<form id=「Form1「 method=「post「 runat=「server「>
<asp:textbox id=「textbox1「 runat=「server「></textbox>
<asp:hyperlink id=「hyperlink1「 runat=「server「 navigateurl=「javascript:void(0)「 onclick='javascript:var str=window.showModalDialog(「webform2.aspx「);document.Form1.textbox1.value=str'></asplink>
</form>

WebForm2.aspx
<html>
<head></head>
<frameset rows=「0,*「>
<frame src=「about:blank「>
<frame src=「WebForm3.aspx「>
</frameset>
<html>

註:為什麼要構建WebForm2呢?如果不構建WebForm2,直接打開WebForm3的話,在WebForm3中點擊Calendar空間選擇日期時,會彈出一個新窗口,致使程序無法按預期運行,具體為什麼會這樣,知識有限,搞不清楚..... :P

WebForm3.aspx.vb
Private Sub Calendar_selectionChanged(byval sender as object, byval e as system.eventargs) handles calendar.selectionchanged
response.write(「<script language='javascript'>window.parent.returnvalue='「 & calendar.selecteddate.tostring & 「';</script>「)
response.write(「<script language='javascript'>window.parent.close();</script「)
End sub

4.後記
按照此方法類推,還可以在窗口之間傳遞其他值。
特別感謝孟憲會老師的相關文章。 

Javascript刷新頁面

Javascript刷新頁面的幾種方法:
1 history.go(0) 
2 location.reload() 
3 location=location 
4 location.assign(location) 
5 document.execCommand('Refresh') 
6 window.navigate(location) 
7 location.replace(location) 
8 document.URL=location.href 

自動刷新頁面的方法:
1.頁面自動刷新:把如下代碼加入<head>區域中
<meta http-equiv="refresh" content="20">
其中20指每隔20秒刷新一次頁面.

2.頁面自動跳轉:把如下代碼加入<head>區域中
<meta http-equiv="refresh" content="20;url=http://www.wyxg.com">
其中20指隔20秒後跳轉到http://www.wyxg.com頁面

3.頁面自動刷新js版
<script language="JavaScript">
function myrefresh()
{
window.location.reload();
}
setTimeout('myrefresh()',1000); //指定1秒刷新一次
</script>

ASP.NET如何輸出刷新父窗口腳本語句
this.response.write("<script>opener.location.reload();</script>"); 

this.response.write("<script>opener.window.location.href = opener.window.location.href;</script>"); 

Response.Write("<script language=javascript>opener.window.navigate(''你要刷新的頁.asp'');</script>")

JS刷新框架的腳本語句
//如何刷新包含該框架的頁面用 
<script language=JavaScript>
parent.location.reload();
</script> 

//子窗口刷新父窗口
<script language=JavaScript>
self.opener.location.reload();
</script>
( 或 <a href="javascript:opener.location.reload()">刷新</a> )

//如何刷新另一個框架的頁面用 
<script language=JavaScript>
parent.另一FrameID.location.reload();
</script>

如果想關閉窗口時刷新或者想開窗時刷新的話,在<body>中調用以下語句即可。

<body onload="opener.location.reload()"> 開窗時刷新
<body onUnload="opener.location.reload()"> 關閉時刷新

<script language="javascript">
window.opener.document.location.reload()
</script>


ASP.NET - 顯示警告視窗(alert)後,再導向(跳轉)下一頁面

Response.Write("<Script language='JavaScript'>alert('警告訊息!');</Script>")
嵌入Literal控制項
Me.Literal1.Text = "<Script language='JavaScript'>alert('警告訊息!');</Script>"
導入頁面可以用
Response.Write("<Script language='JavaScript'>window.open('index.aspx');</Script>")
或
Response.Redirect("index.aspx")


但是將兩個功能放在一起,就會直接導到頁面,不會出現警告訊息。 

這時可以在最後加入Response.End()即可解決(但不能使用Response.Redirect)
另外用window.open會被瀏覽器擋住,所以可以使用location.href或window.location來取代,又由於location.href有些瀏覽器已經不支援,故建議使用window.location

範例如下
Response.Write("<Script language='JavaScript'>alert('警告訊息!');window.location('index.aspx');</Script>")
Response.End()

2011年12月1日 星期四

SQL 語法裡,篩選日期的寫法 -C#

string currentyear = DateTime.Now.Year.ToString();
string tempmonth = DateTime.Now.Month.ToString();
string currentmonth = (tempmonth.Length == 1 ? "0" + tempmonth.Substring(tempmonth.Length - 1, 1) : tempmonth.Substring(tempmonth.Length - 2, 2));
string tempday = DateTime.Now.Day.ToString();
string currentday = tempday.Length == 1 ? "0" + tempday.Substring(tempday.Length - 1, 1) : tempday.Substring(tempday.Length - 2, 2);

string temp =( Convert.ToInt32(tempday) + 1).ToString();
        string temptomo = temp.Length == 1 ? "0" + temp.Substring(temp.Length - 1, 1) : temp.Substring(temp.Length - 2, 2);
     
        string checkToday = currentyear + "-" + currentmonth + "-" + currentday;
        string checkTomo = currentyear + "-" + currentmonth + "-" + temptomo;
"SELECT * FROM [xxx] WHERE [DateTime] >= ""+ checkToday+"" AND < '"+checkTomo+"' ";


------------------------以下引述自 Allen Kuo大大----------------------------------

若SQL Server裡的 table 裡有一個日期欄位,只會放日期,那麼您可以寫成
SELECT .... FROM xxx WHERE xxx='2008/1/15'SELECT .... FROM xxx WHERE xxx BETWEEN '2008/1/15' AND '2008/1/20'
若日期欄位有包含時間, 由於時間可能值為 2008/1/15 23:59:59.50 如果您想找 2008/1/15 這一天裡的所有記錄(不拘時間), 卻將篩選條件寫成
SELECT .... FROM xxx WHERE xxx='2008/1/15' -->會找不到符合的記錄
SELECT .... FROM xxx WHERE xxx BETWEEN '2008/1/15' AND '2008/1/16' -->會連 2008/1/16 的記錄也被找到
SELECT .... FROM xxx WHERE xxx >= '2008/1/15' AND xxx<= '2008/1/15 23:59:59' -->若記錄值是2008/1/15 23:59:59.50 ,會找不到
因此,可以寫成
SELECT .... FROM xxx WHERE xxx >= '2008/1/15' AND xxx < '2008/1/16'
就沒什麼問題了

---------------------------------------------------------------------------------------

ASP.NET跨頁面傳值方法

*轉載

1. 使用QueryString變量

QueryString是一種非常簡單的傳值方式,他可以將傳送的值顯示在瀏覽器的地址欄中。如果是傳遞一個或多個安全性要求不高或是結構簡單的數值時,可以使用這個方法。但是對於傳遞數組或對象的話,就不能用這個方法了。下面是一個例子:

a.aspx的C#代碼

private void Button1_Click(object sender, System.EventArgs e)
{
string s_url;
s_url = "b.aspx?name=" + Label1.Text;
Response.Redirect(s_url);
}

b.aspx中C#代碼
private void Page_Load(object sender, EventArgs e)
{
Label2.Text = Request.QueryString["name"];
}

2. 使用Application 對象變量

Application對象的作用範圍是整個全局,也就是說對所有用戶都有效。其常用的方法用Lock和UnLock。

a.aspx的C#代碼

private void Button1_Click(object sender, System.EventArgs e)
{
Application["name"] = Label1.Text;
Server.Transfer("b.aspx");
}

b.aspx中C#代碼

private void Page_Load(object sender, EventArgs e)
{
string name;
Application.Lock();
name = Application["name"].ToString();
Application.UnLock();
}

3. 使用Session變量

想必這個肯定是大家使用中最常見的用法了,其操作與Application類似,作用於用戶個人,所以,過量的存儲會導致服務器內存資源的耗盡。

a.aspx的C#代碼

private void Button1_Click(object sender, System.EventArgs e)
{
Session["name"] = Label.Text;
}

b.aspx中C#代碼

private void Page_Load(object sender, EventArgs e)
{
string name;
name = Session["name"].ToString();
}

4. 使用Cookie對象變量

這個也是大家常使用的方法,與Session一樣,其是什對每一個用戶而言的,但是有個本質的區別,即Cookie是存放在客戶端的,而session是存放在服務器端的。而且Cookie的使用要配合ASP.NET內置對象Request來使用。

a.aspx的C#代碼

private void Button1_Click(object sender, System.EventArgs e)
{
HttpCookie cookie_name = new HttpCookie("name");
cookie_name.Value = Label1.Text;
Reponse.AppendCookie(cookie_name);
Server.Transfer("b.aspx");
}

b.aspx中C#代碼

private void Page_Load(object sender, EventArgs e)
{
string name;
name = Request.Cookie["name"].Value.ToString();
}

5. 使用Server.Transfer方法

這個才可以說是面象對象開發所使用的方法,其使用Server.Transfer方法把流程從當前頁面引導到另一個頁面中,新的頁面使用前一個頁面的應答流,所以這個方法是完全面象對象的,簡潔有效。

a.aspx的C#代碼

public string Name
{
get{ return Label1.Text;}
}
private void Button1_Click(object sender, System.EventArgs e)
{
Server.Transfer("b.aspx");
}

b.aspx中C#代碼
private void Page_Load(object sender, EventArgs e)
{
a newWeb; //實例a窗體
newWeb = (source)Context.Handler;
string name;
name = newWeb.Name;
}