有時在作字串截取處理時,常常遇到字串中有中文、英文或特殊符號,利用substring or mid 函數,無法截取的很準確(因為兩者都是以Length來計算長度而不是用位元組數)。
索性動手寫了一支小程式解決這個問題 。程式碼如下:
''' <summary>

忙裡偷閒 發表在 痞客邦 留言(0) 人氣()

因工作需要,想在網站上做到讓User在客戶端自由點選pdf檔,選完後一次打包下載。本想利用jQuery ajax將客戶選定的資料送回後端處理後,再Response.BinaryWrite出來。怎知jQuery報錯。原來要進行檔案下載,是不能以ajax方式,而必須讓網頁postback回後端,經後端處理後Response.BinaryWrite出來。但畫面User選定的值會被洗掉,且不想讓畫面"閃"一下。參考了網路上前輩們的作法,決定利用iframe這個html tag來實作。
思路:當user點選button後,會call 一支javascript function,該function會在html body中append一個iframe,並指定iframe的src(../download.aspx)。此時iframe會根據指定的src載入download.aspx。而在download.aspx的code-behind Page_Load中,撰寫將多個pdf檔壓縮成zip的程式,並傳回客戶端。
經過孤狗大神的指示,找到了DotNetZip這個好用的壓縮/解壓縮元件。
 

忙裡偷閒 發表在 痞客邦 留言(0) 人氣()

1擷取
閒來無事在點部落上壓馬路,無意中發現了SignalR這個強大的套件,它把Real-Time功能封裝,且功能強大。有了它,可以很輕易的實現及時訊息的傳遞(ex:Chat、ProgressBar)。
根據原開發者的設定,SignalR提供了兩種訊息傳遞的開發方式,一種為Hub,另一種為PersistentConnection。兩者比較在朱大的文章中有較詳細的說明,我試玩之後,覺得Hub實作起來較簡單;而PersistentConnection較為彈性。
首先透過擴充管理員以NuGet將SignalR的套件自動安裝到專案或網站上。

忙裡偷閒 發表在 痞客邦 留言(0) 人氣()

擷取.PNG
有時候,我們會以下拉式選單呈現的方式讓User選擇想要的功能,再執行該功能。例如以下拉式選單增加兩個項目,匯出DOC及匯出PDF,並建立兩Class:CExportDOCCExportPDF。分別在Class中建構匯出文件的程式碼,然後在aspx檔的Code Behind中寫個switch條件式,去產生新的執行個體執行方法。Ex:

忙裡偷閒 發表在 痞客邦 留言(0) 人氣()

有時候在前端頁面中想要到資料庫中查詢少許的資料,憑此資料寫相對應的判斷式。如果以postback方式回後端,會將整個頁面的資料(含ViewState、ControlState)一併傳回後端,再次歷經Page的生命週期,對系統來說,無一不是種負擔。即使是以UpdatePanel方式回後端,也同樣會巡覽Page一次,與PostBack不同之處,只是使用UpdatePanel的方式會將部分資料重新Render後回傳回前端(有包UpdatePanel的區塊)。其實,可以利用ScriptManager的PageMethods來實現ajax。網路上已有許多教學文章可供參考學習。如以下連結:
http://www.dotblogs.com.tw/pbnttttt/archive/2009/01/20/6897.aspx
http://www.dotblogs.com.tw/petedotnet/archive/2011/03/22/aspdotnetajax_calling_pagemethods.aspx
http://www.dotblogs.com.tw/swtnwr/archive/2008/03/16/1571.aspx
現紀錄的筆記是關於後端的靜態方法欲以DataTable型別回傳時,前端的Javascript是否能接收到呢?如何接收呢?答案是:可行的!
Step 1:
在專案中匯入Microsoft.Web.Preview.dll。匯入前須安裝ASP.NET 2.0 AJAX Futures December CTP,安裝完後在C:\Program Files\Microsoft ASP.NET\ ASP.NET 2.0 AJAX Futures January CTP\ v.1.0.61025目錄夾可找到Microsoft.Web.Preview.dll。

忙裡偷閒 發表在 痞客邦 留言(0) 人氣()

在ASP.NET網站中經常使用主版頁面(MasterPage)來製作相同的配置樣式以統一所有頁面的外觀,今作了一個小實驗,以釐清觀念,在套用了主版頁面後,網頁的生命週期是如何進行的。
Step 1:在MasterPage中的後置程式碼中,依序建立PreInit、Init、InitComplete、PreLoad、Load、LoadComplete、PreRender、Render....的事件區塊,再Response.Write() 輸出識別用的字串,如以下code:
protected void Page_PreInit(object sender, EventArgs e)
    {
        Response.Write("1 Master Page_PreInit" + "<br/>");
    }
    protected void Page_Init(object sender, EventArgs e)
    {
        Response.Write("2 Master Page_Init" + "<br/>");
    }
    protected void Page_InitComplete(object sender, EventArgs e)
    {
        Response.Write("3 Master Page_InitComplete" + "<br/>");
    }
    protected void Page_PreLoad(object sender, EventArgs e)
    {
        Response.Write("4 Master Page_PreLoad" + "<br/>");
    }
    protected void Page_Load(object sender, EventArgs e)
    {
        Response.Write("5 Master Page_Load" + "<br/>");

    }
    protected void Page_LoadComplete(object sender, EventArgs e)
    {
        Response.Write("6 Master Page_LoadComplete" + "<br/>");
    }
    protected void Page_PreRender(object sender, EventArgs e)
    {
        Response.Write("7 Master Page_PreRender" + "<br/>");
    }
    protected void Page_PreRenderComplete(object sender, EventArgs e)
    {
        Response.Write("8 Master Page_PreRenderComplete" + "<br/>");
    }
    protected void Page_SaveStateComplete(object sender, EventArgs e)
    {
        Response.Write("9 Master Page_SaveStateComplete" + "<br/>");
    }
    protected void Page_Render(object sender, EventArgs e)
    {
        Response.Write("10 Master Page_Render" + "<br/>");
    }
    protected void Page_Unload(object sender, EventArgs e)
    {
        //Response.Write("Page_Unload" + "<br/>");
    }

忙裡偷閒 發表在 痞客邦 留言(2) 人氣()

NPOI是在.NET上實現DataTable、Excel互轉的利器,工作上我習慣用該組件來實現所需的功能。具體做法可以參考MSDN CodePlex上的說明。我根據gipi大所提供的換行作法,修改了CodePlex上匯出excel部分的程式碼,如下所示 :
using System;

忙裡偷閒 發表在 痞客邦 留言(0) 人氣()

最近寫了一支定時執行工作的程式,想在工作結束時將寫入情況、耗費時間寫入到Log檔。無意中發現微軟已經把寫入到Log檔的功能已經包好了,真是佛心來的。
只要透過My.Application.Log.WriteEntry這支function就能寫入到Log檔。而預設的Log檔是存放在一個隱藏的資料夾中:
C:\Documents and Settings\登入的使用者名稱\Application Data\專案名稱\1.0.0.0     'Application Data為隱藏的資料夾
我們也能在程式裡去指定存放的路徑。完整程式碼如下 :

忙裡偷閒 發表在 痞客邦 留言(0) 人氣()

2011-7-5 20-50-27.png
情境模擬如示意圖 : 點擊GridView上的TextBox後,要帶出ModalPopupExtender,勾選ModalPopupExtender上的選項後再將值寫回Textbox上。
    
看似簡單的問題,卻也讓我折騰了好幾小時。所幸經過一番努力,終於TRY出來了。
解法如下 :
一、在Textbox旁邊,設置了一顆隱藏按鈕(display:none),給它個CommandName,CommandArgument抓的是GridView的row index,等等要在RowCommand Event裡要用到。若ModalPopupExtender出來的畫面是包在UpdatePanel中,在ModalPopupExtender的屬性裡,OkControlID、CancelControlID這兩個屬性不能設,好讓確定按鈕或取消按鈕以ajax的方式傳回。

<ItemTemplate>
    <asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
   
<cc1:ModalPopupExtender ID="TextBox2_ModalPopupExtender" runat="server"  PopupControlID="Panel1"
        
DynamicServicePath="" Enabled="True" TargetControlID="TextBox2" BackgroundCssClass="modalBackground" >
   
</cc1:ModalPopupExtender>
   
<asp:Button ID="Button1" runat="server" style="display:none" Text="Button" CommandName="Show" CommandArgument="<%#Container.DataItemIndex  %>" />                        </ItemTemplate>

忙裡偷閒 發表在 痞客邦 留言(0) 人氣()

微軟的ajax tool kit有個CalendarExtender控制項可以很方便的產生萬年曆供user選取日期,
也能在後置程式碼中取得選取值。但如果想在前端js中取到選許的日期,就沒那麼容易了。經過努力爬文後,
其實可以透過CalendarExtender控制項中的OnClientDateSelectionChanged屬性,指定處理的function,
透過該function幫你取值。

以下範例是一textbox中有預設Date Now的值,另一textbox透過CalendarExtender選取日期,所選取的日期不可小於預設日期,否則便清空欄位
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default4.aspx.cs" Inherits="Default4" %>
<%@ Register assembly="AjaxControlToolkit" namespace="AjaxControlToolkit" tagprefix="cc1" %>

忙裡偷閒 發表在 痞客邦 留言(0) 人氣()

以往在前端網頁中,利用javascript產生的資料想送回後端,交由後端程式處理時,會利用一個隱藏欄位+一個隱藏按鈕(display:'none'),將資料寫入到隱藏欄位中後,再利用javascript去觸發隱藏按鈕,去執行button_click中的程式,如以下寫法:
<script src="jquery-1.4.4.js" type="text/javascript"></script>
<script type="text/javascript">
    $(document).ready(function() {
        $('#Button1').click(function() {
            var txtdiv = $('#mydiv').text();
            $('#<%=TextBox1.ClientID %>').val(txtdiv);
        })
    })
</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div id="mydiv">andy</div>
    <asp:TextBox ID="TextBox1" runat="server" style="display:none"></asp:TextBox>
    <asp:Button ID="Button1" runat="server" Text="測試按鈕" onclick="Button1_Click" />
    </form>
</body>
</html>

忙裡偷閒 發表在 痞客邦 留言(1) 人氣()


長久以來,我的Visual Studio 2008經常跳出無法啟動程式的錯誤,按了確定後,沒執行偵錯又回到vs2008裡了,爬文許久,終於找到解決方法了 :
1)  Open RegEdit
2)  Browse to HKEY_LOCALMACHINE -> SOFTWARE -> Microsoft -> Internet Explorer -> Main
3)  Add a dword under this key called TabProcGrowth
4)  Set TabProcGrowth to 0
然後重啟vs2008,惱人的錯誤訊息就沒了

  

忙裡偷閒 發表在 痞客邦 留言(0) 人氣()

1 2
Blog Stats
⚠️

成人內容提醒

本部落格內容僅限年滿十八歲者瀏覽。
若您未滿十八歲,請立即離開。

已滿十八歲者,亦請勿將內容提供給未成年人士。