目前日期文章:201101 (14)

瀏覽方式: 標題列表 簡短摘要

伊 發表在 痞客邦 PIXNET 留言(0) 人氣()

伊 發表在 痞客邦 PIXNET 留言(0) 人氣()

這邊文章是參考:http://www.dotblogs.com.tw/puma/archive/2008/09/03/5288.aspx修改後而成。


.js file:

function openWindowWithPost(url, name, keys, values) { //開新視窗,這邊我不指定新視窗的網址
    var newWindow = window.open("", name, "height=700, width=600, toolbar=no, menubar=no, scrollbars=yes, resizable=yes, location=no, status=no");
    if (!newWindow) return false;
    var html = "";
    html += "<html><head></head><body><form id='formid' method='post' action='" + url + "'>";
    if (keys && values && (keys.length == values.length))
        for (var i = 0; i < keys.length; i++)
        html += "<input type='hidden' name='" + keys[i] + "' value='" + values[i] + "'/>";
    html += "</form><script type='text/javascript'>document.getElementById(\"formid\").submit()</script></body></html>";
    newWindow.document.write(html);
    return newWindow;
}
function Post(url) { //這個function會把網頁中所有的form找出來,並且找出每個form所包含的elements
    var keys = [];
    var values = [];
    for (var i = 0; i < document.forms.length; i++) {
        for (var j = 0; j < document.forms[i].elements.length; j++) {
            if (document.forms[i].elements[j].name != undefined &&
                document.forms[i].elements[j].value != undefined) {
                keys[keys.length] = document.forms[i].elements[j].name;
                values[values.length] = document.forms[i].elements[j].value;
            }
        }
    }
    openWindowWithPost(url, "網頁標題", keys, values);
}

.aspx file:

<form...>
    <input...>
    <input...>
    <input...>
</form>
<input type="button" value="Post" onclick="Post('處理POST資料的ASPX網頁');" />

處理POST資料的ASPX網頁:(VB.NET)

If Request.Form("ItemName") <> Nothing Then
    Response.Write(Request.Form("ItemName").ToString())
End If

應用:
開新視窗後,如果要顯示的頁面資料很多,怎麼先顯示一個Loading圖片讓使用者知道網頁還在跑,沒有死掉呢?
如下。

js 部分:

<script type="text/javascript">
    function init() {
        //alert("主要網頁已完全載入");
        var _oTag = document.getElementById("divLoading");
        _oTag.style.display = "block"; //顯示動畫
        //在這邊處理接下來要做的事情。
        document.getElementById("formid").submit();
    }
    
    if (window.attachEvent) {
        window.attachEvent('onload', init);
    }
    else {
        window.addEventListener('load', init, false);
    }
    function iframeOnLoad() {
        var _oTag = document.getElementById("divLoading");
        _oTag.style.display = "none"; //當iframe網頁已完全載入後,隱藏動畫
    }
</script>

html 部分:

<form id='formid' target='mains' method='post' action='目標頁.aspx'>
    <input...>
    <input...>
    <input...>
</form>

<div align="center" id="divLoading">
<img border="0" src="images/loading14.gif" alt="" /><br/>網頁載入中,請稍候...
</div>

<iframe id="mains" name="mains" title="iframe頁框" allowtransparency="true" 
border="0" frameBorder="0" width="550" height="550"
scrolling="no" onload="javascript:iframeOnLoad();"></iframe>

PS.
html部份可以用ASP寫form的input field進去。
為什麼用ASP,因為我覺得用ASP.NET時,要動態生成form的input field實在是麻煩的事...囧。

伊 發表在 痞客邦 PIXNET 留言(0) 人氣()

這是一個發生在美國通用汽車的客戶與該公司客服部間的真實故事。

有一天美國通用汽車公司的龐帝雅克(Pontiac)部門收到一封客戶抱怨信,上面是這樣寫:

“這是我為了同一件事第二次寫信給你,我不會怪你們為什麼沒有回信給我,因為我也覺得這樣別人會認為我瘋了,但這的確是一個事實。

“我們家有一個傳統的習慣,就是我們每天在吃完晚餐後,都會以冰淇淋來當我們的飯後甜點。由於冰淇淋的口味很多,所以我們家每天在飯後才投票決定要吃哪一種口味,等大家決定後我就會開車去買。但自從最近我買了一部新的龐帝雅克後,在我去買冰淇淋的這段路程問題就發生了。”

“你知道嗎?每當我買的冰淇淋是香草口味時,我從店理出來車子就發不動。但如果我買的是其他的口味,車子發動就順得很。”

“我要讓你知道,我對這件事情是非常認真的,儘管這個問題聽起來很豬頭。

※ 為什麼這部龐帝雅克當我買了香草冰淇淋它就秀逗,而我不管什麼時候買其他口味的冰淇淋,它就一尾活龍?為什麼?為什麼?※ ”

事實上龐帝雅克的總經理對這封信還真的心存懷疑,但他還是派了一位工程師去查看究竟。

當工程師去找這位仁兄時,很驚訝的發現這封信是出之於一位事業成功、樂觀、且受了高等教育的人。

工程師安排與這位仁兄的見面時間剛好是在用完晚餐的時間,兩人於是一個箭步躍上車,往冰淇淋店開去。那個晚上投票結果是香草口味,當買好香草冰淇淋回到車上後,車子又秀逗了。

這位工程師之後又依約來了三個晚上。
第一晚,巧克力冰淇淋,車子沒事。
第二晚,草莓冰淇淋,車子也沒事。
第三晚,香草冰淇淋,車子“秀逗”。

這位思考有邏輯的工程師,到目前還是死不相信這位仁兄的車子對香草過敏。因此,他仍然不放棄繼續安排相同的行程,希望能夠將這個問題解決。

工程師開始記下從頭到現在所發生的種種詳細資料,如時間、車子使用油的種類、車子開出及開回的時間…,根據資料顯示他有了一個結論,這位仁兄買香草冰淇淋所花的時間比其他口味的要少。(---> 資料收集、整理、分析、結論)

為什麼呢?原因是出在這家冰淇淋店的內部設置的問題。

因為,香草冰淇淋是所有冰淇淋口味中最暢銷的口味,店家為了讓顧客每次都能很快的取拿,將香草口味特別分開陳列在單獨的冰櫃,並將冰櫃放置在店的前端;至於其他口味則放置在距離收銀檯較遠的後端。

現在,工程師所要知道的疑問是,為什麼這部車會因為從熄火到重新啟動的時間較短時就會秀逗?原因很清楚,絕對不是因為香草冰淇淋的關係,工程師很快地由心中浮現出,答案應該是“蒸氣鎖”。

因為當這位仁兄買其他口味時,由於時間較久,引擎有足夠的時間散熱,重新發動時就沒有太大的問題。但是買香草口味時,由於花的時間較短,引擎太熱以至於還無法讓“蒸氣鎖”有足夠的散熱時間。



讀後感想:

即使有些問題看起來真的是瘋狂,而且有時候它還是真的存在;但是如果我們每次在看待任何問題並秉持著冷靜的思考去找尋解決的方法,這些問題將看起來會比較簡單,不那麼複雜。所以碰到問題時不要直接就反應說那是不可能的(IMPOSSIBLE),而沒有投入一些真誠的努力。
仔細觀察----“不可能”這個字【IMPOSSIBLE】,
你也許可以看到-“我可能” 【I’M POSSIBLE】。

這個差別的關鍵乃在於我們在看待一件事情的“態度”及“理解力”。

伊 發表在 痞客邦 PIXNET 留言(0) 人氣()

很多時候,二個人生活比一個人過日子還要辛苦。

一個人的時候,想去哪裡就去哪裡,想和誰出去就和誰出去,
不必為了男朋友今天被老闆罵了 心情不好 需要人陪 而犧牲和好友的聚會,
也不需要因為女朋友感冒發高燒 需要照顧 而犧牲早上重要會議。

一個月不出門,沒有人會對你抱怨日子很無聊,
每天吃泡麵,也不會有人嫌你對他不好,
一晚上不說話,沒人會在耳邊說你不關心他,
一個星期不洗澡,也不會有人嫌你髒。

二個人在一起,他不高興的時候,你有責任要傾聽、照顧、替他找樂子,
即使你自己心情也不好,也要打起精神幫對方加油打氣。

一個人的時候高興天天加班到天亮也沒人管你,
但是二個人的時候,你若是天天睡在公司,對方會抱怨你為什麼不肯花時間陪他,然後就是爭吵甚至分手。

有些男人以為戀愛很容易,只要花點時間問問︰「吃飽了沒?」之類言不及義的屁話,
偶爾一起吃吃飯、看看電影,只要有炮可以打就等於戀愛還在繼續。

但是,你如果真的這樣做,你會發現女人其實很寂寞,到頭來你才知道你根本不懂她在想什麼,
等你知道戀愛要「用心」才能繼續的時候,女人早就已經決定離開你了。

要把戀愛談好其實不難,花的心力愈多,愈有機會維持良好的關係。

當你羨慕某些感情不錯的情侶時,不妨想想他們背後付出的代價

很羨慕有些情侶做什麼事情總是在一起,
一起下班,一起看電視,一起吃飯,一起下廚,
一起散步,一起洗澡,然後一起睡覺。

你沒看到的是他們犧牲了工作的時間;
犧牲了和朋友出去喝酒作樂的時間;
犧牲了和老闆私下應酬拍馬屁的時間,
他們選擇犧牲一個人的快樂去成就兩個人的快樂。

也許男人犧牲了一場自己想看的球賽陪女人看「麥迪遜之橋」,或許女人犧牲了老闆指派加班的任務只為了回家下廚作二人的燭光晚餐。

或許他們一個曾經習慣於晝伏夜出,卻為了另一個人徹底改變了作息,他們覺得這樣犧牲很快樂也很值得,但若換做是你,你做得到多少?

你覺得有些情侶很棒,因為他們懂得給對方空間。
他們可以擁有各自的情人,但仍舊能把對彼此的關係在第一順位,他們不會要求對方一定要二十四小時陪著彼此,不會要求對方一定只可以和自己做愛,一旦一方覺得度孤獨、寂寞,需要有人陪伴的時候,另一方一定會犧牲其他的時間陪他。

你沒有看到的是,他們其實花了很多時間學習獨處;花了很多心思戰勝忌妒;花了很多精力修正自己的錯誤。

他們學會怎樣為自己的情緒負責而不依賴另一人的幫助,怎樣在眾多情人間做正確的時間安排方式而不引起更多的衝突,他們可以接受自己的男人?女人和別人上床也沒關係,而你是不是做得到?

你覺得那些心靈契合的情侶最值得羨慕,一件事情到了他們的口中,不管他們的看法有多少差異,你總是能看出他們互相支持的誠意。

他們總是會產生類似的感動,一人哭泣,另一人也跟著流淚,一人欣喜,另一個人也跟著微笑。

你沒看到的是,他們歷經了無數的爭辯,
因此他們常常發現自己完全不了解對方的想法,
所以他們花了比別人更多的時間探索、挖掘、辯論、溝通,他們放棄了許多自以為是的想法;在爭辯中學會讓步;學會不堅持;學會接受、欣賞、肯定

伊 發表在 痞客邦 PIXNET 留言(0) 人氣()

換位思考,不僅能夠讓我們得到別人的理解和支持,也有助於我們更好地瞭解別人,找到那個潛伏著的理由,同時也找到了順利解決問題的鑰匙。



在美國,一位母親在耶誕節前夕帶著5歲的兒子去買禮物。

大街上迴響著耶誕節的讚歌,櫥窗裏裝飾著樅樹彩燈,喬裝的可愛小精靈載歌載舞,商店裏五光十色的玩具應有盡有。



「一個5歲的男孩將會以多麼興奮的目光觀賞這絢麗的世界啊!」母親毫不懷疑地想。

然而,她沒有想到,兒子卻緊拽著她的大衣角,嗚嗚地哭出聲來。



「怎麼了?要是總哭個沒完,聖誕精靈可就不到咱們這兒來啦!」母親有些生氣,語氣中充滿了嚴厲。

「我,我的鞋帶開了……」兒子怯怯地回答。

母親不得不在人行道上蹲下身來,為兒子繫好鞋帶。母親無意中抬起頭來,啊!怎麼會什麼都沒有?看不見絢麗的彩燈,沒有迷人的櫥窗,沒有聖誕禮物,也沒有裝飾豐富的餐桌……,

那些東西都放得太高了,孩子什麼也沒看見。落在孩子眼裏的,只有粗大的腳印和婦人們低低的裙擺,在那裏互相摩擦,碰撞,過來往去……,真是好可怕的情景!



這是母親第一次從5歲兒子的高度看世界。她感到震驚,立即把兒子抱起來,放在自己的肩上,兒子開心地笑了起來:「媽媽,好漂亮啊!」

從此,母親發誓,今後再也不把以自己為基準理解的『快樂』強加給自己的兒子。

「站在孩子的立場上」─母親以自己親身的體驗認識了這一道理。



換位思考是與人相處的一個十分重要的技巧,也就是將自己置身於對方的立場和視角,去體驗對方的內心感受,瞭解對方的確切需求,從而在彼此的心靈間,架起一座暢通無阻的溝通橋樑。

與此同時,當你站在對方立場上的時候,自然也會以對手的目光觀察自己,從而對自己多一份瞭解。



不妨經常問一下自己:「如果我是他,會怎麼樣呢?」

想想看,如果我處在我妻子的地位,我是否願意以我這樣的人為夫?

如果我處在我兒子的地位,我是否為有我這樣的父親而驕傲?

如果我處在我部下的地位,我是否為有我這樣的上司而慶幸?……

當你進行這種角色轉換的時候,就會驚奇地發現自己還有許多需要改進的地方。



戰場上,知己知彼,可以百戰百勝;社會交往中,也需要換位思考,才能知己知彼,從而達到人際交往的高境界。

美國汽車大王亨利福特說過:【如果說成功有秘訣的話,那就是站在對方立場來考慮問題】

伊 發表在 痞客邦 PIXNET 留言(0) 人氣()

http://webdesign.kerthis.com/sql/

伊 發表在 痞客邦 PIXNET 留言(0) 人氣()

void pointSample(void)
{
    int start=3, end=7;
    char *aa;
    char a[]="abcdefghijklm";
    aa = &a[start];
    
    for(int i=0; i<=(end-start); i++)
        printf("%c",*(aa+i));
}

伊 發表在 痞客邦 PIXNET 留言(0) 人氣()

Ackerman(m, n)定義為:
n+1, if m = 0
Ackerman(m-1, 1), if n = 0
Ackerman(m-1, Ackerman(m, n-1)), otherwise


遞迴寫法:
int A(int m, int n)
{
    if(m<0 || n<0)
        return -1;
    else if(m==0)
        return n+1;
    else if(n==0)
        return A(m-1,1);
    else
        return A(m-1,A(m,n-1));
}

 

伊 發表在 痞客邦 PIXNET 留言(0) 人氣()

寫一函數求兩個整數的最大公因數,解析:

此函數需要兩個參數x,y
當y不能整除x時,將x設成為y,y設為x%y, 重複此步驟直到x%y為0
此時y就是這兩個數的最大公因數

int gcd(int x, int y) {
int tmp;
// 如果x < y 則下面的迴圈執行第一次時就會交換x,y了
while (x % y != 0) {
tmp = y;
y = x % y;
x = tmp;
}
return y;
}

伊 發表在 痞客邦 PIXNET 留言(0) 人氣()

1.函數f(n), n>=0:
f(0)=0
f(1)=1
f(2)=3
f(3)=6
...
可得:
f(0)=0
f(1)=1
f(2)=f(1)+2=3
f(3)=f(2)+3=6

2.費氏函數
F(n)=n, if n<=1;
F(n)=F(n-1)+F(n-2), otherwise


#include
void fn1(void);
void fab(void);

void main(void)
{
    fn1();
    fab();
    return;
}
void fn1(void)
{
    int n=0;
    printf("please input n: ");
    scanf("%d",&n);
    printf("for: f(%d)=%d,recursive: f(%d)=%d\n",n,fn1for(n),n,fn1r(n));
    return;
}
int fn1r(int n)
{
    if(n<=0)
        return 0;
    else if(n==1)
        return 1;
    else
        return fn1r(n-1)+n;
}
int fn1for(int n)
{
    int fn=0;
    int i;
    
    for(i=1; i<=n; i++)
    {
        fn=fn+i;
    }
    
    return fn;
}
void fab(void)
{
    int n=0;
    printf("please input n: ");
    scanf("%d",&n);
    printf("for: f(%d)=%d,recursive: f(%d)=%d\n",n,fabfor(n),n,fabr(n));
    return;
}
int fabr(int n)
{
    if(n<=1)
        return n;
    else
        return fabr(n-1)+fabr(n-2);
}
int fabfor(int n)
{
    int f1=0,f2=0,fn=0,i;
    for(i=0; i<=n; i++)
    {
        if(i<=1)
            fn=i;
        else
            fn=f1+f2;
        
        f2=f1;
        f1=fn;
        /*printf("f1=%d,f2=%d,f(%d)=%d\n",f1,f2,i,fn);*/
    }
    return fn;
}

伊 發表在 痞客邦 PIXNET 留言(0) 人氣()

說明:
1.拖曳SqlDataSource至頁面,設定好SQL語法。
2.拖曳GridView至頁面,設定來源為SqlDataSource。
3.請於GridView_PreRender加入以下程式碼。

Protected Sub GridView1_PreRender(ByVal sender As Object, ByVal e As System.EventArgs) Handles GridView1.PreRender
    Dim i As Integer = 1
    Dim mySingleRow As GridViewRow

    For c As Short = 0 To GridView1.Columns.Count - 1
        i = 1
        For Each mySingleRow In GridView1.Rows
            If mySingleRow.RowIndex = 0 Then
                mySingleRow.Cells(c).RowSpan = 1
            Else
                If mySingleRow.Cells(c).Text.Trim() = _
                GridView1.Rows(mySingleRow.RowIndex - i).Cells(c).Text.Trim() Then
                    GridView1.Rows(mySingleRow.RowIndex - i).Cells(c).RowSpan += 1
                    i = i + 1
                    mySingleRow.Cells(c).Visible = False
                Else
                    GridView1.Rows(mySingleRow.RowIndex).Cells(c).RowSpan = 1
                    i = 1
                End If
            End If
        Next
    Next
End Sub



補充:
如使用程式碼指派DataSource給GridView,如下:
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    Dim sqlselect As String
    sqlselect = "SELECT * FROM TABLE"
    Dim dt1 As New Data.DataTable
    dt1 = db1.GetDataTable(sqlselect)
    GridView1.DataSource = dt1
    GridView1.DataBind()
End Sub

則GridView_PreRender內無法使用:For c As Short = 0 To GridView1.Columns.Count - 1
GridView1.Columns.Count抓不到值,需自行指派一個整數,例如:For c As Short = 0 To 2


效果示意圖:
合併GridView儲存格.gif

伊 發表在 痞客邦 PIXNET 留言(0) 人氣()

當資料庫越來越肥大...
SQLServer資料庫壓縮.jpg

伊 發表在 痞客邦 PIXNET 留言(0) 人氣()

'DataTable存成CSV檔的程式碼----------------------------------
Dim SavePath As String = "C:\Temp\"
Dim FileName As String = "Test.csv"
Dim FilePath As String = SavePath + FileName
Dim sw As New System.IO.StreamWriter(FilePath , False, System.Text.Encoding.Default)

'寫入欄位名稱
If MyDataTable.Columns.Count > 0 Then
    sw.Write(MyDataTable.Columns.Item(0).ColumnName.ToString)
End If
For i As Integer = 1 To MyDataTable.Columns.Count - 1
    sw.Write("," + MyDataTable.Columns.Item(i).ColumnName.ToString)
Next
sw.Write(sw.NewLine)

'寫入各欄位資料
For i As Integer = 0 To MyDataTable.Rows.Count - 1
    For j As Integer = 0 To MyDataTable.Columns.Count - 1
        If j = 0 Then
            sw.Write(MyDataTable.Rows(i)(j))
        Else
            sw.Write("," + MyDataTable.Rows(i)(j))
        End If
    Next
    sw.Write(sw.NewLine)
Next

sw.Close()

'使用SaveAs.aspx隱藏檔案路徑讓使用者下載
Response.Redirect("SaveAs.aspx?filename=" + FileName)
'SaveAs.aspx.vb Page_Load 內的程式碼--------------------------
Dim SavePath As String = "C:\Temp\"
Dim FileName As String = Request.QueryString("filename").ToString
Dim FilePath As String = SavePath + FileName

'設定表頭並存檔
If System.IO.File.Exists(filep) Then
    With Response
        .ContentType = "application/save-as"
        .AddHeader("content-disposition", "attachment; filename=" & FileName)
        .ContentEncoding = Encoding.UTF8
        .WriteFile(FilePath)
    End With
Else
    Response.Write("no file")
End If
'做成Class方便使用
Public Class ExportCSV
    Function DataTableToCSV(ByVal dt As Data.DataTable, ByVal FileName As String, ByVal SavePath As String) As Boolean
        Dim FilePath As String = SavePath + FileName
        Try
            Dim sw As New System.IO.StreamWriter(FilePath, False, System.Text.Encoding.Default)

            If dt.Columns.Count > 0 Then
                sw.Write(dt.Columns.Item(0).ColumnName.ToString)
            End If
            For i As Integer = 1 To dt.Columns.Count - 1
                sw.Write("," + dt.Columns.Item(i).ColumnName.ToString)
            Next
            sw.Write(sw.NewLine)

            For i As Integer = 0 To dt.Rows.Count - 1
                For j As Integer = 0 To dt.Columns.Count - 1
                    If j = 0 Then
                        sw.Write(dt.Rows(i)(j))
                    Else
                        sw.Write("," + dt.Rows(i)(j))
                    End If
                Next
                sw.Write(sw.NewLine)
            Next
            sw.Close()
        Catch ex As Exception
            'MsgBox(ex.Message)
            Throw ex
        End Try

        If System.IO.File.Exists(FilePath) Then
            Return True
        Else
            Return False
        End If

    End Function
End Class
'存成CSV檔
Dim SavePath As String = "C:\Temp\"
Dim FileName As String = "Test.csv"
Dim epCsv As New ExportCSV
If epCsv.DataTableToCSV(MyDataTable, FileName, SavePath) = True Then
    Response.Redirect("SaveAs.aspx?filename=" + FileName)
End If

伊 發表在 痞客邦 PIXNET 留言(0) 人氣()