2012年12月26日 星期三

{正則式} 參考文件

js版本
http://msdn.microsoft.com/zh-cn/library/az24scfc.aspx

.net 版本
http://msdn.microsoft.com/zh-tw/library/20bw873z.aspx


範例(特殊字元過濾)
http://blog.miniasp.com/post/2010/04/27/How-to-filter-special-characters-using-NET-Regex.aspx

相關資源:
http://blog.miniasp.com/post/2008/03/Regular-Expression-Regex-Learning-Resources.aspx

eMail 正則式:
http://design2u.me/blog/896/javascri-t-regular-expression-email-form-validation

測試工具:
Expresso 3.0 上網註冊免費序號
否則只有5天又12小時可使用

2012年12月20日 星期四

{C#.JavaScript} HtmlEncode Htmldecode 寫法

將字串、連結做編碼、解碼寫法
JavaScript:
//Encode
var abc="this is a book";
var encode = escape(abc);

//Decode
var abc="this is a book";

var encode = unescape(abc);


C# 寫法於參考資料

參考資料:
http://blog.miniasp.com/post/2008/11/Explain-web-related-encoding-decoding-method-in-detail.aspx

{C#} Transaction-Entity(未實作)


參考資訊
http://blog.darkthread.net/post-2012-12-19-transactionscope-suppress.aspx

2012年12月19日 星期三

{JQuery} dialog 顯示「正在....」畫面


$(document).ready(function () {
            $("#dialog:ui-dialog").dialog("destroy");
    $('#Button1').click(function () {

        var dlg = $("#<%=DivPage.ClientID%>").dialog({
                            modal: true,
                            height: 200,
                            width: 400
                       });
                        $('a.ui-dialog-titlebar-close').hide();
                        $("#<%=DivPage.ClientID%>").dialog("open");
                       dlg.parent().appendTo(jQuery("form:first"));
                       $("#dialog:ui-dialog").dialog("destroy");
    });
    //當程序運作完成時,關閉
    $('#Button2').click(function () {
        $("#<%=DivUploadIframePage.ClientID%>").dialog("close");
    });
});


<form>
<body>

 <div runat="server" id="DivPage" title="Please Wait..." style="width: 260px;
        height: 400px; display: none">
        <table width="100%" class="f12black">
            <tr>
                <td align="center">
                    正在加載中,請稍後...<br />
                </td>
            </tr>
        </table>
    </div>
</body>
</form>


API:
http://api.jqueryui.com/dialog/#option-buttons

2012年12月6日 星期四

{C#} Transaction-Linq


//此例可直接運用 context.SubmitChanges();自動執行Transaction,
此側僅供自訂Transaction code參考用

using (var context = new ServiceDataContext())
            {
                try
                {
                    context.Connection.Open();
                    context.Transaction = context.Connection.BeginTransaction();
                    var query = context.tableA.Where(s => s.DocId == DocId).ToList();
                    if (query.Count > 0)
                    {
                        context.tableA.DeleteAllOnSubmit(query);
                        context.SubmitChanges();
                    }
                    context.tableA.InsertOnSubmit(pNewItemA);
                    context.SubmitChanges();

                    var queryTT = context.tableB.Where(s => s.DocId ==DocId).ToList();
                    if (queryTT.Count > 0)
                    {
                        context.tableB.DeleteAllOnSubmit(queryTT);
                        context.SubmitChanges();
                    }
                    context.tableB.InsertOnSubmit(pNewItemB);
                    context.SubmitChanges();
                    context.Transaction.Commit();
                    return "Successful";
                }
                catch (Exception ex)
                {
                    context.Transaction.Rollback();
                    return ex.Message;
                }
            }

註記:
1.Linq2SQL will use an implicit transaction. If all of your updates are done within a single Submit, you may not need to handle the transaction yourself.
當只執行一SubmitChanges()時,會自動啟動Transaction 機制
故如非同一context 時,才需自訂Transaction



參考資料:
http://blog.darkthread.net/blogs/darkthreadtw/archive/2009/06/12/3037.aspx
http://stackoverflow.com/questions/542525/transactionscope-vs-transaction-in-linq-to-sql
http://72.15.222.47/post-2008-05-14-transaction-in-linq-to-sql.aspx

//Update之Transaction  相關
http://72.15.222.47/post-2009-07-14-linq-to-sql-research1.aspx
http://blog.miniasp.com/post/2008/05/Resolve-LINQ-to-SQL-Change-Conflict-Exception.aspx

{JavaScript} 取代多個字符、控制項中游標位置、日期轉換


 function RemoveFormate(num) {
        //取代多個逗號
        var str = /,/gi;
        return num.replace(str, '').replace('.00', '');
    }

    //要游標出現的字串位置--傳入控制項內字串中所要放的位置
    function startFocus(range) {
        var e = event.srcElement;
        var r = e.createTextRange();
        r.moveStart("character", e.value.length);
        r.collapse(true);
        r.select();
    }
//Example:

//游標停的位子在字串最後面
startFocus($(this).val().length);


    //日期轉換
    function TransferDateFormate(dateString) {
        if (dateString != null) {
            if (dateString.indexOf("/Date") == -1 && dateString.indexOf("/") == -1) {
                var dateFormate = dateString.substring(0, 4) + "/" + dateString.substring(4, 6) + "/" + dateString.substring(6, 8);
                return dateFormate;
            } else if (dateString.indexOf("/Date") != -1) {
                var date = eval("(new Date(" + dateString.replace("/Date(", "").replace(")/", "") + "))");
                var dateFormate = date.getFullYear() + "/" + (date.getMonth() + 1) + "/" + date.getDate();
                if (dateFormate == "1/1/1") dateFormate = "N/A"
                return dateFormate;
            }
            return dateString;

        }

        return '';
    }

參考資料:
http://www.cnblogs.com/taobox/archive/2012/11/23/2784760.html

{JavaScript} 小數位補零、檢查是否為數值、四捨五入


//小數位不足自動補零
    function showAsFloat(n) {
        return parseFloat(n).toFixed(2);
    }

    //檢查是否是數字
    function checkFormate(num) {
        num = num + "";
        //去掉一個小數點(如有二個小數點也會出現警示
        num = num.replace('.', '');
        //只能输入有0~2位小数的正实数
        //        var re = /^[0-9]+(.[0-9]{0,2})?$/;
        if (num != '') {
            //無限制小數數量
            var re = /^[0-9]+(.[0-9])?$/;
            if (!re.test(num) || num < 0) {
                return false;
            }
        }
        return true;
    }

    //四捨五入
    function round(num, pos) {
        var size = Math.pow(10, pos);
        return Math.round(num * size) / size;
    }

參考資料:
正則式:http://www.dotblogs.com.tw/killysss/archive/2009/11/18/12039.aspx

{JavaScript} JS控制控制項Enable、Visible


// Visible 不顯示(不出現在Html中)    
 if ($('#<%=select.ClientID%>').find("option:selected").val() != '我選了')
    $('#<%=trCPSDMailNotice.ClientID%>').attr('style', 'display:none');
//出現
 else
    $('#<%=trCPSDMailNotice.ClientID%>').attr('style', 'display:');

//Enable  顯示但不可用
 if (!$('#<%=chkBoth.ClientID%>')[0].checked)
    $('#<%=txtMyFare.ClientID%>').attr('disabled', 'disabled');
//顯示且可用
else
    $('#<%=txtMyFare.ClientID%>').removeAttr('disabled');

2012年11月9日 星期五

{Note} SSD與Ghost相關文章

1.不要Ghost和重装 两招把Win7克隆到SSD
http://www.mcplive.cn/index.php/article/index/id/11085/page/2

2.简单易上手 SSD装Win7系统的三种办法
http://ssd.zol.com.cn/306/3063938.html

3.Crucial m4 128GB mSATA SSD-安裝篇
http://blog.xuite.net/walf/life/63296773#axzz2AeU1dWcT

4.關於ssd使用ghost
http://www.mobile01.com/topicdetail.php?f=490&t=2895090&p=1

5.請教 安裝SSD前.後 應該做的事??
http://5i01.com/topicdetail.php?f=490&t=2560701&p=1

6.Windows 7 安裝固態硬碟SSD系統碟簡單、傻瓜優化
http://hikari-solving.blogspot.tw/2012/05/windows-7-ssd.html

{C#} ajax call WebMethod &ashx 應用

一、WebMethod :
aspx:
var strURL = 'WebForm2.aspx/GetValue';
                $.ajax({
                    type: 'POST',
                    url: strURL,
                    data: "{'orderNo':'" + value + "'}",//傳入參數
                    contentType: "application/json; charset=utf-8",
                    dataType: 'json',
                    error: function (xhr, ajaxOptions, thrownError) {
                    alert('Ajax request 發生錯誤 ' + xhr.responseText);
                    },
                    success: function (html) {
                        var dataArr = JSON.parse(html.d);
                    }

WebForm2.aspx.cs:
 [WebMethod]
        public static string GetValue(string orderNo)
        {
            object temp = new object();
            temp = DateTime.Now.ToString("yyyy");
            var data = new JavaScriptSerializer().Serialize(temp);
            return data;
        }


二、ashx 應用

aspx:
  var value = $('#<%=txtOrderNo.ClientID %>').val();
                var customer = $('#<%=lblCustomerNo.ClientID %>').text();
                var strURL = 'OrderDetailSource.ashx';
                $.ajax({
                    type: 'GET',
                    url: strURL,
                    data: { orderNo: value, customerId: customer },
                    contentType: "application/json; charset=utf-8",
                    dataType: 'json',
                     error: function (xhr, ajaxOptions, thrownError) {
                    alert('Ajax request 發生錯誤 ' + xhr.responseText);
                    },
                    success: function (result) {
                      //result 直接就是一個json
         alert(result[0].屬性);
                    }});


OrderDetailSource.ashx:
    public void ProcessRequest (HttpContext context) {
        context.Response.ContentType = "text/plain";
        //傳入的參數
        string orderNo = context.Request.QueryString["orderNo"] ?? string.Empty;
        string customerId = context.Request.QueryString["customerId"] ?? string.Empty;

        //service 2.0 寫法
        var result = new Service.Operator().abc(orderNo, customerId);
        var temp = JsonConvert.SerializeObject(result, Formatting.Indented);
        //回傳一個json格式資料
        context.Response.Write(temp);
    }

註:
當用方法二時,type要為GET,因為有傳入參數,用Post會直接跑error


參考資料:
http://www.dotblogs.com.tw/threeday0905/archive/2011/01/07/20648.aspx
http://zh-tw.yescript.com/JavascriptScripts-67-.ajaxFanHuiDeJSONWuF/
http://blog.sina.com.cn/s/blog_5ee49d5a0100ss13.html
xhr error message 屬性方法
http://kevyu.blogspot.tw/2010/06/ajaxerror-message.html

Jquery ajax 屬性值列表
http://www.w3school.com.cn/jquery/ajax_ajax.asp

//下面這個範例的$.toJSON({ ids : id })試不出來
http://www.dotblogs.com.tw/rx836/archive/2011/05/10/24658.aspx

{C#} Gridview 加一欄為流水號欄位


<asp:TemplateField HeaderText="No" ItemStyle-HorizontalAlign="Center">
    <ItemTemplate>
        <%# (Container.DataItemIndex+1).ToString()%>
    </ItemTemplate>
</asp:TemplateField>


參考資料:
http://www.dotblogs.com.tw/petedotnet/archive/2009/01/11/6733.aspx

{C#} 呼叫靜態Fucntion



建立一靜態Function
public class abc
{


public static DataTable ReadData(string commStr)
{
     return new DataTable();
}

}




//呼叫靜態Function
 var resultDt = abc.ReadData(strComm);


使用靜態:
當只有單個function呼叫此靜態function時使用,以不使變數資料錯亂
Ex:計算來站人數

參考資料:
http://msdn.microsoft.com/zh-tw/library/98f28cdx%28VS.80%29.aspx
http://www.oreilly.com.tw/column_sleepless.php?id=j021
http://www.blueshop.com.tw/board/FUM20050124192253INM/BRD20101210144748M1L.html
http://www.dotblogs.com.tw/kkman021/archive/2011/08/17/33357.aspx

2012年10月25日 星期四

{C#} Dictionary Custom Key is class

如 Dictionary的key 值是客製,從class而來
如要讓Dictionary裡的key不重覆,需覆寫GetHashCode()與Equals(object obj)
Dictionary.ContainsKey() 才會有效果

EX:
Dictionary<ErrorData, string> dicTemp = new Dictionary<ErrorData, string>();
ErrorData er=new ErrorData();
er.CUR="abc";
er.Name="Jake";
if (!dicTemp.ContainsKey(er))
    dicTemp.Add(er,"good");


建立類別
  public class ErrorData
    {
        public string CUR{ set; get; }

        public string Name{ set; get; }

        public override int GetHashCode()
        {
            //return base.GetHashCode();
            return Name.GetHashCode() ^ CUR.GetHashCode();
        }

        public override bool Equals(object obj)
        {
            ErrorData v1 = obj as ErrorData;
            return v1.PN == PN && v1.Currency == Currency;
        }
       
    }


參考資料:
http://www.cnblogs.com/pmars/archive/2012/03/02/2376610.html

2012年10月24日 星期三

{C#} enum 使用

//列舉排序的選項
    public enum Rank:int
    {
         中文, 中文二, 中文三
    }
列舉中各代表的數值(預設)
中文=0
中文二=1
中文三=2

//將一文字值轉為Enum
(Rank) Enum.Parse(typeof (Rank), Value);

//取得Enum的所有值
Enum.GetNames(typeof (Rank))
>>string[0] 中文 string[1] 中文二 string [2] 中文三

//宣告 rank變數為一個Enum Rank形態
                Rank rank=Rank.中文;
                switch ((int)rank)
                {
                    case 0://中文
                        return finalResult.OrderBy(s => s.Code).ToList();
                    case 1://中文二
                        return finalResult.OrderBy(s => s.Sourer).ToList();
                    case 2://中文三
                        return finalResult.OrderByDescending(s => s.AllYearCurrencyRate).ToList();
                }


參考資料:
http://www.dotblogs.com.tw/johnny/archive/2010/01/25/13300.aspx
http://diary.tw/tim/743

2012年10月18日 星期四

{JQuery} Autocomplete 進階應用-text、value值不同(像DropdownList)

autocomplete.aspx :
$("#<%=Txt.ClientID %>").autocomplete('Datasource.aspx', {
                noCache: true,
                lineSeparator: ",",//設定基準為Datasource.aspx中紅色資料連接符號
                //當資料被選擇時
                onItemSelect: findValue,
                onFindValue: findValue,
                //擴充參數給Datasource.aspx
                extraParams: {
                    MPSNo: function () {
                        return $('#<%=TxtVersionNo.ClientID%>').val();
                    }
                }
            });


  function findValue(li) {

                if (li == null) {
                    document.getElementById('<%=TxtItemName.ClientID %>').innerText = '';
                    document.getElementById('<%=TxtItemSpec.ClientID %>').innerText = '';
                }
                else {
                    document.getElementById('<%=TxtItemName.ClientID %>').innerText = li.extra[0];
                    document.getElementById('<%=TxtItemSpec.ClientID %>').innerText = li.extra[1];
                }
            }

Datasource.aspx:
 protected void Page_Load(object sender, EventArgs e)
    {

        var query = "";
        var mpsNo = "";
        if (!string.IsNullOrEmpty(Request.QueryString["q"]))
            query = Request.QueryString["q"].ToUpper();
        if (!string.IsNullOrEmpty(Request.QueryString["MPSNo"]))
            mpsNo = Request.QueryString["MPSNo"];
        var modelList = new PMOperator().ReadPNAuotcompleteDataSource(query, mpsNo).Take(10).ToArray();

        var count = modelList.Count();
        string[] str = new string[count];
        for (int i = 0; i < count; i++)
        {
            if (i == count - 1)
            str[i] = string.Format("{0}|{1}|{2}", modelList[i].PN, modelList[i].PNName, modelList[i].PNSpec);
            else
            {
                str[i] = string.Format("{0}|{1}|{2},", modelList[i].PN, modelList[i].PNName, modelList[i].PNSpec);
            }
        }
        Response.Write(string.Join(Environment.NewLine, str));
    }


PS.
當使用extraParams屬性擴充參數時,autocomplete.js對下列的寫法,會產生問題
MPSNo: function () {
                        return $('#<%=TxtVersionNo.ClientID%>').val();
需將autocomplete.js檔中makeUrl(q) function 修改下段程式碼 (主要是紅字部分):

    function makeUrl(q) {
        var url = options.url + "?q=" + escape(q);
        $.each(options.extraParams, function (key, param) {

            url += "&" + key + "=" + (typeof param == "function" ? param() : param);

        });
        return url;
    };


參考資料:
http://forums.asp.net/t/1830016.aspx/1
http://blog.darkthread.net/post-2009-07-10-jquery-autocomplete-sample.aspx
http://jsgears.com/viewthread.php?tid=114&extra=&page=1

API:
http://api.jqueryui.com/autocomplete/#entry-examples

{Linq} 當取第一筆取不到時,預設值自訂

有時要去資料庫查某個條件下
是否有筆數,當有筆數要取第一筆
如筆數為零,則帶空值回來
可使用「.DefaultIfEmpty()」來設定
當值為空的時候要給什麼資料

service.functionName().Where(s=>s.Id==No).Select(s=>s.Name).DefaultIfEmpty('').First();


FirstOrDefault()的預設值為NULL
故要使用 DefaultIfEmpty()輔助設定預設值,以避免回傳Null值
msdn上寫到......
http://msdn.microsoft.com/zh-tw/library/bb340482.aspx


參考資料:
http://msdn.microsoft.com/zh-tw/library/bb340482.aspx

2012年10月5日 星期五

{JavaScript} html-select option Postback後指定選取


Html:

<select name="ddlNo" id="ddlNo" style="width: 10%">
<% var No= ViewState["No"] as List<string>;%>
<% if (No!= null) %>
<% { %>
<%=         "<option value=''></option>"%>
<%      foreach (var item in No)%>
<%      { %>
<%=         "<option value=" + item + ">" + item + "</option>"%>
<%      } %>
<% } %>
</select>

C#:
//用一個Hidden將被選取的值記錄下來,以供PostBack後重新Load畫面給JS判斷用
string No = Request.Form["ddlNo"];
HiddenselectNo.Value = No ;


JS:
if ($('#<%=HiddenselectNo.ClientID%>').val() != '') {
                var selectObj = $('#ddlNo')[0];
                for (var i = 0; i < selectObj.length; i++) {
//當值相同時,則被選取,否則為False;預設是第一個是被選取
var selectObj = $('#ddlSupplierNo')[0];
for (var i = 0; i < selectObj.length; i++) {
    if (selectObj[i].text == $('#<%=HiddenselectNo.ClientID%>').val())
        selectObj[i].selected = true;
    else
        selectObj[i].selected = false;
}


參考資料:
http://www.xiaoxiaozi.com/2010/08/17/1856/

2012年10月2日 星期二

{C#} Code Behind、Code File、Code Inline

Code Behind--
建立Code Behind的.cs檔案,通常在建立asp.net的網頁會自動出現,也就是說「預設」就是Code Behind,做到code tag 分離,經過「三點式分離」「關注點分離」的洗禮,就覺的是一個三小的名詞,而code behind大概就是原始時代的分離法,而此頁面需要繼承Basepage ,而這個Basepage 也是相當的複雜,也延申程式碼會非常的多。

Code Inline--
而與他相匹的就是Code Inline(單一檔案)
Code Inline就是把程式碼寫在aspx檔案裡,就像回到了asp時代,但沒人說古時候就不好,這樣的程式簡潔有力。

Code File--
而在查Code Behind時,也查到另一個屬性,就是Code File,這個曾經取代Code Behind的屬性當初與Code Behind的差異就是將程式碼另寫在Code File 的.cs檔案中,並放置Server上呼叫到時才去編譯,而非Code Behind先編譯成dll 去運行。

現行的asp.net 3.5~4.5 以Code Behind為「預設」


Code Behind:將檔編譯成dll檔執行;asp.net 1.1版本
Code File:cs檔上傳到Server編譯;asp.net 2.0的版本

Code Inline:在aspx上
<script type="text/C#" runat="server">
protected  void Page_Load(object  sender,EventArgs e)
{
    Response.Write("abc");

}
</script>

參考資料:
http://blog.miniasp.com/post/2008/12/23/ASPNET-Code-Behind-and-Code-Inline-Tips-in-Visual-Studio.aspx
http://blog.sanc.idv.tw/2011/07/codebehindcodefile.html
http://atic-tw.blogspot.tw/2012/05/code-inline.html

2012年10月1日 星期一

{工具}HightChart 圖表套件

圓餅圖實例:
xxx.cs >>
//資料來源
var newData =ReadResult;
//資料轉為Json
data = new JavaScriptSerializer().Serialize(newData.Data);
 HiddenField1.Value=data;
//被統計項目
returnValue = new JavaScriptSerializer().Serialize(newData.Title);

xxx.aspx >>
<script type="text/javascript">
        var chart;
        $(document).ready(function () {
//解析資料來源
            var dataArr=new Array();
            if ($('#<%=HiddenField1.ClientID%>').val() != '') {
                dataArr = JSON.parse($('#<%=HiddenField1.ClientID%>').val());
                }
            var categories = <%=returnValue %>;
            var data=new Array();
            for(i=0;i<dataArr.length;i++)
            {
                data.push({name:categories[i],y:dataArr[i]});
            }

       //開始畫圖   
            chart = new Highcharts.Chart({
                chart: {
                    renderTo: 'container',
//圓餅圖表
                    defaultSeriesType:'pie'
                },
                title: {
                    text: 'High Chart'
                },
                xAxis: {
                    categories: <%=returnValue %>
                },
                tooltip: {
                    pointFormat: '{series.name}: <b>{point.percentage}%</b>',
                    percentageDecimals: 1
                },
                plotOptions: {
                pie: {
                    allowPointSelect: true,
                    cursor: 'pointer',
                    dataLabels: {
                        enabled: true,
                        color: '#000000',
                        connectorColor: '#000000',
                        formatter: function() {
                            return '<b>'+ this.point.name +'</b>: '+ this.percentage +' %';
                        }
                    }
                }
            },
                series: [{ data: data}]
            });

        });
       
      
    </script>




http://www.highcharts.com/demo/line-log-axis

相關範例∶
http://www.dotblogs.com.tw/lastsecret/archive/2011/01/30/21137.aspx
http://www.cnblogs.com/jsonzheng/archive/2011/05/13/2045344.html

長條圖:
http://www.cnblogs.com/jsonzheng/archive/2011/01/18/1938489.html

API:
http://api.highcharts.com/highcharts#title

{C#} ViewState 出現未將xx序列化問題

當將一集合傳給Viewstate資料來源時,
如是用自定義類別產成之集合,會出現類似下列的錯誤訊息

未將型別 'FormJSON' 標記為可序列化


 ViewState內的資料,只是傳化為畫面上隱藏欄位
<input type="hidden" value=".....">
 故要將自定類別轉為序列化狀態

public void Page_Load()
{
    var serializer = new JavaScriptSerializer();
    var itemsResult = serializer.Deserialize<FormJSON>(FormDataSource.Value); 
}



[Serializable]
        public class FormJSON
        {
            public int FormId { set; get; }

            public string Title { set; get; }

        }


 參考資料:
http://w3937.pixnet.net/blog/post/78687168-%5Basp.net%5D-%E5%88%A9%E7%94%A8viewstate%E4%BF%9D%E5%AD%98%E8%87%AA%E8%A8%82%E7%89%A9%E4%BB%B6

{Note} Url的編碼


Url編碼:ASCII碼,如非ASCII字元,則會因瀏覽器支援的字元集不同而產成亂碼或其問題

詳細說明:
http://www.189works.com/article-42584-1.html

2012年9月17日 星期一

{Linq} 多個OrderBy 條件

var sum = pSumDollar.OrderBy(s => s.No).ThenBy(s => s.Date);

最先排序Order By
之後每一次的排序用ThenBy

ex:
原始資料>>
No   Date
1      2012/09/17
2      2012/09/18
1      2012/06/19
3      2012/07/20

第一次 Order By

No   Date
1      2012/09/17
1      2012/06/19
2      2012/09/18
3      2012/07/20

第二次

No   Date
1      2012/06/19
1      2012/09/17
2      2012/09/18
4      2012/07/20


參考資料:
http://www.cnblogs.com/meil/archive/2011/12/08/2281054.html

{C#} 對數值四捨五入


Math.Round() ,Decimal.Round() 這兩個函式>>前一位為奇數則進位;反之則不進位(就算大於5,也不進位)
Decimal.Round(1.45,1)>>1.4
Decimal.Round(1.55,1)>>1.6


實現四捨五入:
1.無條件進位=>Math.Ceiling()  ;  無條件捨去=>Math.Floor()
        四捨五入
        dNum = 12.5;
        dNum = Math.Floor(dNum+0.5);

       取小數後兩位
       dNum = 0.1312141231;
       dNum = Math.Floor(dNum*100+0.5) / 100;

2.利用ToString()
       double dd = 300.56;
       dd.ToString("0"); --> 結果是 301
       dd.ToString("0.0"); --> 結果是 300.6

3.Decimal.Round參數
(數值,取小數幾位, 不管小數第二位為奇或偶數值,第三位過五(含五)就進位)
decimal.Round(Quota, 2, MidpointRounding.AwayFromZero)





參考來源:
http://blog.yam.com/terrytg259/article/26728510
http://msdn.microsoft.com/zh-tw/library/6be1edhb%28v=vs.80%29.aspx
http://msdn.microsoft.com/zh-tw/library/system.midpointrounding(v=vs.80).aspx

{SQL,Linq} 取前幾個月的資料寫法

SQL:
--本月最後一天
   SELECT dateadd(ms,-3,DATEADD(mm, DATEDIFF(m,0,getdate())+1, 0))


--前二個月的資料 ex:now為九月 則取出七月與八月的資料
    SELECT *   FROM  tableName
  WHERE   Date       between   DATEADD(month,   -2,   GetDate())     and  DATEADD(month,   0,   GetDate())


Linq:
--指定區間內資料
               var  invoiceData = (from item in table
                               where item.Date >= startDT && item.Date <= endDT
                               select new
                               {
                                   Id = item.Id,
                                   Date = item.Date
                               });
參考資訊:
http://topic.csdn.net/t/20040920/18/3391864.html
http://topic.csdn.net/u/20110622/10/11c96822-edf8-4f7b-8cf5-49a8354f6edc.html
http://www.itpub.net/thread-232401-1-1.html
http://blog.sina.com.cn/s/blog_5067ef490100lg49.html
http://horacerobot.blogspot.tw/2010/10/linq-datetime-between.html

{C#} Gridview 欄位合並


//結果圖:

//針對前三欄如上一欄資料與下一欄資料相同,則合並
protected void MainDG_PreRender(object sender, EventArgs e)
        {
                //分格Row
                int i = 1;
                foreach (GridViewRow item in MainDG.Rows)
                {
                    if (item.RowIndex != 0)
                    {
                        if (item.Cells[0].Text.Trim() == MainDG.Rows[item.RowIndex - i].Cells[0].Text.Trim() && item.Cells[1].Text.Trim() == MainDG.Rows[item.RowIndex - i].Cells[1].Text.Trim()
                            && item.Cells[2].Text.Trim() == MainDG.Rows[item.RowIndex - i].Cells[2].Text.Trim() && item.Cells[3].Text.Trim() == MainDG.Rows[item.RowIndex - i].Cells[3].Text.Trim())
                        {
                            MainDG.Rows[(item.RowIndex - i)].Cells[0].RowSpan += 1;
                            item.Cells[0].Visible = false;
                            MainDG.Rows[(item.RowIndex - i)].Cells[1].RowSpan += 1;
                            item.Cells[1].Visible = false;
                            MainDG.Rows[(item.RowIndex - i)].Cells[2].RowSpan += 1;
                            item.Cells[2].Visible = false;
                            MainDG.Rows[(item.RowIndex - i)].Cells[3].RowSpan += 1;
                            item.Cells[3].Visible = false;
                            i++;
                        }
                        else
                        {
                            MainDG.Rows[(item.RowIndex)].Cells[0].RowSpan += 1;
                            MainDG.Rows[(item.RowIndex)].Cells[1].RowSpan += 1;
                            MainDG.Rows[(item.RowIndex)].Cells[2].RowSpan += 1;
                            MainDG.Rows[(item.RowIndex)].Cells[3].RowSpan += 1;
                            i = 1;
                        }
                    }
                    else
                    {
                        item.Cells[0].RowSpan = 1;
                        item.Cells[1].RowSpan = 1;
                        item.Cells[2].RowSpan = 1;
                        item.Cells[3].RowSpan = 1;
                    }
                }
           
        }


參考資料:
http://www.dotblogs.com.tw/mis2000lab/archive/2008/04/24/3451.aspx
http://epaper.blueshop.com.tw/board/show.asp?subcde=BRD20061225110536B4G&fumcde=FUM20050124192253INM
http://pramaire.pixnet.net/blog/post/28100706-gridview%E6%A8%99%E9%A1%8C%28%E8%A1%A8%E9%A0%AD%29%E5%90%88%E4%BD%B5

{C#} C#中讀取JavaScript 方法

1.Response.Write("JavaScript的字串")
>>執行後Script語法將跑至最上頭,以致產生「找不到物件」的問題


2.RegisterClientScriptBlock('script','JavaScript的字串')
>>執行後,置於<body>區塊 最頂端

3.RegisterClientScriptInclud('script','JavaScript的字串')
>>執行後,置於<head>裡

4.RegisterStartupScript ('script','JavaScript的字串')
>>執行後,置於<body>區塊最末端, 所有的control重新Load一次後才執行

5.把JavaScript 加在控制項上
>>使用 Ex:
button1.Attributes.Add('onclick', JS FunctionName);


http://dnowba.blogspot.tw/2012/07/aspnetjavascript_12.html

多種使用方式:
http://irismyself.pixnet.net/blog/post/12388073-%E3%80%90asp.net%E3%80%91%E3%80%90javascript%E3%80%91%E5%9C%A8asp.net-%E5%91%BC%E5%8F%AB-javascript-




Page.ClientScript.RegisterClientScriptBlock
Page.ClientScript.RegisterStartupScript
Page.ClientScript.RegisterClientScriptInclude

http://welkingunther.pixnet.net/blog/post/27831277-(asp.net)%E5%8B%95%E6%85%8B%E8%A8%BB%E5%86%8Ajavascript%E8%87%B3client%E7%AB%AF

{Linq}將Linq結果轉為dt

當把Datatable的資料做Linq的查詢處理後
轉為一Datatable

CopyToDataTable()只支援Datarow
可加擴充功能
 http://msdn.microsoft.com/en-us/library/bb669096.aspx

http://bibby.be/2008/05/anonymous-typeclass.html
http://saam0813.wordpress.com/2010/06/08/linq-copytodatatable-of-t/
http://saam0813.wordpress.com/2010/06/08/linq-copytodatatable-of-t/

{SQL} SQL DECIMAL Type Use

DECIMAL(m,n)>>整數值+小數值=m

參考資料:
http://www.cppblog.com/prayer/archive/2009/05/04/81825.html

{C#} log4net Use

//引入.dll與xml

//宣告
static log4net.ILog logger =
log4net.LogManager.GetLogger(System.Reflection.MethodBase
.GetCurrentMethod().DeclaringType);

code:
loger.ErrorFormat("{0} {1}", a, ex.b);




參考資料:
http://luckystar1216.pixnet.net/blog/post/13159723-%E4%BD%BF%E7%94%A8log4net%E7%B4%80%E9%8C%84%E7%A8%8B%E5%BC%8F%E5%9F%B7%E8%A1%8C%E9%81%8E%E7%A8%8B%E7%9A%84log%28for-c%23%29




2012年8月30日 星期四

{C#} List 取指定筆數

當要取List中指定筆數之後的幾筆資訊
可使用Skip(3).Take(2)
=>取List中第三筆開始取二筆




參考資料:
http://blog.xuite.net/cppbuilder/blog/14806307

>>網址中有實用於List的方法運用

{C#} Datatable複製、搜尋功能

Datatable複製
僅格式:DataTable dt = DatasoruceDT.Clone();
格式與資料:DataTable dt = DatasoruceDT.Copy();


Datatable搜尋
方法一、
  var drList =DatasoruceDT.Select("abc='" + item.abc+ "' and QTY=" + item.Qty + ");
如果是字串型態,則要加單引號;如是數字型態,則不需要加單引號

方法二、
 //1.設定多個主鍵
    DatasoruceDT.PrimaryKey = new DataColumn[] { DatasoruceDT.Columns["abc"],
    DatasoruceDT.Columns["QTY"]};
//2.欲查詢的資料集
    object[] searchObj = new object[] { "Data",50};
//3.搜尋DataRow  與傳入的List比對出所要的資料
    DataRow dr = DatasoruceDT.Rows.Find(searchObj );

參考資料:
http://msdn.microsoft.com/zh-tw/library/system.data.datatable.select.aspx

http://www.dotblogs.com.tw/yc421206/archive/2009/10/20/11152.aspx

http://souts.pixnet.net/blog/post/9132068-ado.net%E4%B8%ADdataset%E3%80%81datatable%E3%80%81datarow%E8%A4%87%E8%A3%BD%E6%96%B9%E5%BC%8F

http://kkxl.iteye.com/blog/866318

{C#} .NET控件不要PostBack設定(尚未實作過)


取消某一button 的postback
 UseSubmitBehavior 屬性設為 False

參考資料:
http://cate-taiwan.blogspot.tw/2008/08/aspnet-button-postback.html

{GridView} 當無資料時,顯示標題與無資料字眼

Gridview 當無資料時,顯示「沒資料」設定

ShowHeaderWhenEmpty="true"
EmptyDataText="沒資料"


參考資料:
http://jenmingisme.blogspot.tw/2009/02/gridview.html

2012年8月17日 星期五

{JQuery} 修改dialog 樣式與功能、按鈕事件

關閉dialog右上角叉叉功能
$('a.ui-dialog-titlebar-close').hide();

樣式修改
http://hi.baidu.com/zdz8207/item/4cb5726bcfc9d735ac3e83b7

在dialog上加按鈕
http://mini.nidbox.com/diary/read/193

其他屬性
http://www.phptogether.com/juidoc/dialog.html

dialog 按鈕事件

$("#dialog-confirm").dialog({
resizable: false,
height: 160,
modal: true,
buttons: {
"OK": function () {
//建立一個新的Option於select 控制項
varreason= $("#reason").val();
var newOption = $('<option value=' +reason+ '>' +reason+ '</option>');
$('#<%=ddlItemType.ClientID%>').append(newOption);
newOption.attr("selected", "true");
$(this).dialog("close");
},
Cancel: function () {
$(this).dialog("close");
}
}
});


參考資料:
http://lovang.iteye.com/blog/647317

{C#} 延遲執行程式


//延遲執行程式5秒
..........
......
System.Threading.Thread.Sleep(5000);
Response.Write("<script language='javascript'>alert('延遲成功');</script>");

2012年8月16日 星期四

{WinServer} WinServer2008 讀取Excel時相關設定


Excel放置Server端後,在Server 端開啟Excel檔案不斷產生「無法存取檔案」「拒絕存取路徑」檢查方式:
1.Server端資料夾權限
2.Server端是否有灌Excel(如是使用Excel Reader元件)
3.config是否有設定 .
<identity impersonate="true" userName="Userid" password="Password" />

參考資料: http://tsaiyuchi.blogspot.tw/2011/02/excel-manipulate.html#more
4.是否有建立C://win...../Desktop資料夾
參考資料:http://tsaiyuchi.blogspot.tw/2011/02/winserver2008-iis-manipulate-excel.html

補充參考資料:
http://www.dotblogs.com.tw/shadow/archive/2011/05/02/24043.aspx

2012年8月7日 星期二

{C#} Math屬性



參考資料:
http://msdn.microsoft.com/en-us/library/system.math.aspx

中文:
http://www.1000year.com/blog/335.htm

2012年8月6日 星期一

{HTML} Gridview數據格式設定:千分位、小數點

數值千分位,且取小數第二位
方法一、DataFormatString="{0:N2}"

方法二、DataFormatString="{0:#,##0.00}"
               HtmlEncode="false"
方法二的寫法,必設定屬性 HtmlEncode="false",使可執行方法二DataFormatString 格式
ps.當欄位標題設定「HeaderText="CPU <br> Landed Cost"」時,也要將屬性 設定HtmlEncode="false" ,以可解讀成html語法不被編碼。

參考資料:
http://www.allenkuo.com/EBook5/view.aspx?TreeNodeID=82&id=486

2012年7月26日 星期四

{Linq} LINQ Group 群組加總資料

//Group PN欄位,總計Instock欄位內數量

   var Inventory = (from inv in context.InventoryDatas.ToList()
                                    group inv by inv.PN
                                        into gropData
                                        select new
                                        {
                                            PN = gropData.Key,
                                            Instock = gropData.Sum(s => s.Instock),
                                        }).ToList();


參考資料:
http://www.dotblogs.com.tw/chhuang/archive/2008/05/01/3772.aspx

2012年7月23日 星期一

{C#} decimal 型態運用

當要做二值相除時,要保留小數點或指定小數點數量
則將二個欲相除的值轉為decimal型態
再使用Math.Round(結果值-decimal 型態,小數量數量)

Sample: 取結果的小數點第一位
decimal finalFesult = Math.Round((decimal)result,1);


參考資料:
http://createps.pixnet.net/blog/post/33098568-c%23-%E9%99%A4%E6%B3%95%E9%A1%AF%E7%A4%BA%E5%B0%8F%E6%95%B8%E9%BB%9E

2012年7月19日 星期四

{工具} Excel Data Reader 讀取Excel第三方元件

用來讀取Excel轉為Dataset的一項工具
但2003與2007 需call 不同的function

Sample:

FileStream stream = File.Open(FileUploader.PostedFile.FileName, FileMode.Open, FileAccess.Read);
//副檔名,區分是2003版 or 2007版
var arr = FileUploader.FileName.Split('.');
 IExcelDataReader excelReader;
if(arr.Count()==2)
  {
      if(arr[1]=="xlsx")
          //2007
          excelReader  = ExcelReaderFactory.CreateOpenXmlReader(stream);
      else
      {
           //2003
           excelReader = ExcelReaderFactory.CreateBinaryReader(stream);
       }
       DataSet result = excelReader.AsDataSet();
//取出Excport成Datatable的Excel資料
       DataTable table = result.Tables[0];
//關閉連線
       excelReader.Close();
}

參考資料:
http://exceldatareader.codeplex.com/
http://www.dotblogs.com.tw/yc421206/archive/2011/03/13/21819.aspx

{Knowledge} Http 網頁執行的方法Get、Post

Http(Hypertext Transfer Protocol)是一種通訊協定,用於網頁發出請求(Request)給伺服器(Web Server)

往返瀏覽器、伺服器 傳輸埠
Https->443 Port
Http-->80 Port

Http Method分為9種,分別為OPTIONS、GET、HEAD、POST、PUT、DELETE、TRACE、CONNECT、DEBUG,其中Get、Post是可以將資料送到IIS(Web Server)端

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

Get:
使用GET的方法會將表單資訊附加在URL上並作為QueryString的一部分,QueryString是一種key/value的組合,從問號「?」開始,每一組值都是用「&」隔開,這是一種不安全的方法,具有高風險性。有心的人可以透過操控QueryString字串的方式來取得或破壞資料庫的資料

QueryString長度不能高過1,024個字元,但可在ASP.NET在4.0的版本中設定maxRequestPathLength、maxQueryStringLength這二個參數以擴大值

使用GET,如果request的網址沒有變動,則Result會是cache的,這意謂著我們取得的不見得是最新的資訊

結論:Get就像是明信片,將內容寫在外觀上(Request Headers),是容易被看見的,但也是比較便宜


Post
使用POST方法是將要傳送的資訊放在message-body中,就不用擔心資料大小的限制,可以防止使用者操作瀏覽器網址,表單的資料被隱藏在message-body中,因此,在大多數的情況下,使用POST方法將表單資料傳到Web Server端是更有效的方法,但也相對傳輸資料量大就會較慢

結論:Post就像一封信,內裝內容物(Request Body),容量比較大,但也比較貴比較沉重

差異:
在Request Headers/Request Body兩個也有差別,主要是POST有透過Send將資料送出去,因此Content-Length跟Body中都有內容,而GET則沒有,也 因此衍生了一些差異,POST因為要多送Request Body中的內容,若以達到相同功能來說,GET會比POST快一些。

--------------------------------------------------------------
使用XMLHttpRequest物件來看
XMLHttpRequest XHR=new XMLHttpRequest();
Get用法:
XHR.open('GET', url?key=value, false);
XHR.send() ;
Post用法:
XHR.open('POST', url, false);
XHR.send(FormData) ;

傳入參數時:
GET 方式
var postContent ="name=" + encodeURIComponent("xiaocheng") + "&email=" + encodeURIComponent("xiaochengf_21@yahoo.com.cn");
xmlhttp.open("GET", "somepage" + "?" + postContent, true);
xmlhttp.send(null);


POST 方式

var postContent ="name=" + encodeURIComponent("xiaocheng") + "&email=" + encodeURIComponent("xiaochengf_21@yahoo.com.cn");
xmlhttp.open("POST", "somepage", true);
xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
//xmlhttp.setRequestHeader("Content-Type", "text/xml"); //如果发送的是一个xml文件
xmlhttp.send(postContent);

註:
1.在ASP.NET AJAX裡,所有WebMethod只接受HTTP POST verb,更進一步還要求檢核Content-Type: application/json標頭,做到雙重保險。
2.可使用Request.HttpMethod == "POST"的檢查限阻止GET請求

參考資料:
http://www.dotblogs.com.tw/marcus116/archive/2011/05/29/26428.aspx
http://blog.toright.com/archives/1203
W3C Http Code 表示意義
http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html
Http Method 各類定義
http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Request_methods
http://www.yongfa365.com/Item/Ajax-GET-POST.html
http://blog.darkthread.net/blogs/darkthreadtw/archive/2009/04/16/dont-use-get-ajax.aspx

{Knowledge} Page Life Cycle

八個階段:
  Page發出Request
  初始化
  載入網頁
  驗証
  事件
  顯示頁面
  缷載

初始化(Page Initialization)階段會觸發--Page物件的PreInit、Init、InitComplete事件
載入網頁(Loading)階段會觸發--ProLoadLoadLoadComplete
事件(Event) 階段會觸發--有PostBack的控制項事件
顯示頁面(Render) 階段會觸發--PreRenderRender
缷載(Unload) 階段會觸發--Unload


圖出處:http://msdn.microsoft.com/en-us/library/ms972976.aspx

每一事件的大致功能
Preinit
1.可檢查IsPostBack屬性判斷是否第一次處理網頁
2.建立動態控制項、建立MasterPage;其動態控制項其值,因ViewState未還原,值之後可被覆寫

ProLoad
1.已將ViewState 載入,可使用Control的屬性

Load
1.遞迴每個子控制項執行相同的動作,設定Control屬性,也可建立與DB的連接

有PostBack的控制項事件
1.驗證(Validation)資料有沒有問題(使用者輸入資料、或資料來源的資料)--避免垃圾資料
2.Control Event對應
3.也可重新Bind資料

Load Complete
1.也可在此重新整頁面資料

PreRender
1.覆寫控制項屬性

SaveStateComplete
1.這是頁面呈現給要求瀏覽器之前的最後一個引發事件--msdn
2.此時ViewState的資料已被觸發此事件前儲存

Render
繪圖畫面


參考資料:
http://www.dotblogs.com.tw/hatelove/archive/2009/12/18/pagelifecycle.aspx
http://msdn.microsoft.com/zh-tw/library/ms178472.aspx
http://www.dotblogs.com.tw/marcus116/archive/2011/05/24/25923.aspx
http://msdn.microsoft.com/en-us/library/ms972976.aspx

{SQL} 產生DDL語法 建立Table







產生一個DDL語法,使可建立、執行建立Table等;建立方式如圖

2012年7月18日 星期三

{Note}ViewState架構

正常Web 應用程式沒有狀態,也就是說,當User key in的資料,傳到伺服器,伺服器回傳後,User key in的資料就不會被保存,因為當HTTP發出一個Request時,會建立Web網頁類別個體,而每一個Resuest 都是一個新的個體,所以不會被保存;.net針對目前的.net架構設計一個狀態管理機制,將User key in的資料,保存在編碼後的ViewState中,以保存Web Control上的值

Clinet State分類:
View State,Control State,Hidden Fields,Cookie,Query Strings
Server State分類:
Application State,Session State,Profile Properties


ViewState:預設是啟用的,當網頁Post back 時,即為轉為一個Hidden 類型(<input type=hidden>);而他會將畫面上所有控制項的值都存成View State,如是 Gridview等類型的值對網頁來說是無效的,卻仍
然會被轉為ViewState,造成ViewState很龐大,傳輸網頁相對較慢
關閉方式:
Control的ViewState
<asp:Gridview id="abc" runat="server" EnableViewState="false" />

Page的ViewState
<%@ Page EnableViewState="false" %>

WebConfig的ViewState
<pages enableViewState="false" />

參考資料:
http://www.dotblogs.com.tw/marcus116/archive/2011/05/29/26428.aspx

2012年7月12日 星期四

{C#} 文件下載-Response.AddHeader

Response.AddHeader("Content-Disposition", attachment;filename全名(含附檔));


參考資料:
中文檔名問題
1.Response.HeaderEncoding = System.Text.Encoding.GetEncoding("big5");
http://blog.darkthread.net/blogs/darkthreadtw/archive/2007/09/05/kb-open-and-download-file-in-chinese-filename.aspx

2.Server.UrlEncode(fileName)
http://blog.miniasp.com/post/2008/04/20/ASPNET-Force-Download-File-and-deal-with-Chinese-Filename-correctly.aspx

http://www.pctartarus.com/bbs/thread-982-1-1.html

Response 物件解說
http://www.study-area.org/coobila/tutorial_336.html

使用方式完整版
http://stackoverflow.com/questions/3889521/response-addheadercontent-disposition-not-opening-file-in-ie6

{工具} NPOI Excel 讀寫工具(2013 更新,可支援到2007版本)

2013 更新:NPOI 2.0 可支援2003~2007 Excel版本

差異:

//2007
XSSFWorkbook workbook = new XSSFWorkbook(FileUpload1.FileContent);
//2003
HSSFWorkbook workbook = new HSSFWorkbook(FileUpload1.FileContent);

//辯別是2007還是2003
IWorkbook workbook = WorkbookFactory.Create(FileUpload1.FileContent);


匯入Example:

protected void Button1_Click(object sender, EventArgs e)
        {
            //NPOI.DLL:NPOI 核心函式庫。
            //NPOI.DDF.DLL:NPOI 繪圖區讀寫函式庫。
            //NPOI.HPSF.DLL:NPOI 文件摘要資訊讀寫函式庫。
            //NPOI.HSSF.DLL:NPOI Excel BIFF 檔案讀寫函式庫。
            //NPOI.Util.DLL:NPOI 工具函式庫。
            //NPOI.POIFS.DLL:NPOI OLE 格式存取函式庫。
            //ICSharpCode.SharpZipLib.DLL:檔案壓縮函式庫。
            if(FileUpload1.HasFile)
            {
                //辯別是2007還是2003
                IWorkbook workbook = WorkbookFactory.Create(FileUpload1.FileContent);
                
                ////2007
                //XSSFWorkbook workbook = new XSSFWorkbook(FileUpload1.FileContent);
                ////2003
                //HSSFWorkbook workbook = new HSSFWorkbook(FileUpload1.FileContent);


                int sheetCount= workbook.NumberOfSheets;
                DataSet ds=new DataSet();
                //讀每一個Sheet
                for (int i = 0; i < sheetCount; i++)
                {
                    var  hs = workbook.GetSheetAt(i);
                    DataTable dt = new DataTable();
                    //第一行是標題
                    var  hr =  hs.GetRow(0);
                    if (hr == null) continue;
                    int cellCount = hr.LastCellNum;
                    for (int j = hs.FirstRowNum; j < cellCount; j++)
                    {
                        DataColumn column=new DataColumn(hr.GetCell(j).StringCellValue);
                        dt.Columns.Add(column);
                    }

                    int rowCount = hs.LastRowNum;
                    
                    bool flag = false;
                    //略過第0列
                    for (int j = (hs.FirstRowNum+1); j < rowCount; j++)
                    {
                        var  hssfRow = hs.GetRow(j);
                        if (hssfRow == null) continue;
                        DataRow dr = dt.NewRow();
                        flag = false;
                        for (int k = hssfRow.FirstCellNum; k < cellCount; k++)
                        {
                            if (hssfRow.GetCell(k) != null)
                            {
                                switch (hssfRow.GetCell(k).CellType)
                                {
                                    case CellType.NUMERIC:
                                        {
                                            if(!flag)
                                                flag = CheckValue(hssfRow.GetCell(k).ToString());
                                            dr[k] = hssfRow.GetCell(k).NumericCellValue;
                                            break;
                                        }
                                    case CellType.STRING:
                                        {
                                            if(!flag)
                                                flag = CheckValue(hssfRow.GetCell(k).StringCellValue);
                                            dr[k] = hssfRow.GetCell(k).StringCellValue;
                                            break;
                                        }
                                    default:
                                        {
                                            if(!flag)
                                                flag = CheckValue(hssfRow.GetCell(k).ToString());
                                            dr[k] = hssfRow.GetCell(k).ToString();
                                            break;
                                        }
                                }
                            }
                        }

                        if (flag)
                            dt.Rows.Add(dr);
                    }
                    //讀完一個Sheet關閉一個Sheet
                    hs = null;

                    ds.Tables.Add(dt);
                }
                //全部Sheet讀完關閉Excel
                workbook = null;
                GridView1.DataSource = ds.Tables[0];
                GridView1.DataBind();

                GridView2.DataSource = ds.Tables[1];
                GridView2.DataBind();

            }
        }


匯出Excel格式設定範例:
http://wenku.baidu.com/view/035c53d0c1c708a1284a4444.html

EEPlus vs NPOI
http://www.dotblogs.com.tw/kkman021/archive/2012/04/21/71692.aspx


--------------------------------我是分隔線---------------------------------------
相關文章:
官網
http://npoi.codeplex.com/documentation

轉出Excel
http://dotnetmis91.blogspot.tw/2011/02/npoi-gridview.html

NPOI Library--中文解說
http://msdn.microsoft.com/zh-tw/ee818993.aspx

與EPPlus比較
http://wupinny.blogspot.tw/2011/07/aspnet-export-excel-with-npoi-and.html
http://www.dotblogs.com.tw/kkman021/archive/2012/04/21/71692.aspx

詳細應用
http://tonyqus.sinaapp.com/

合併多個Excel
http://www.dotblogs.com.tw/hunterpo/archive/2010/02/25/13759.aspx

NPOI匯出圖表
http://dotnetmis91.blogspot.tw/2010/03/chart-control-excel-npoi.html
http://www.cnblogs.com/atao/archive/2009/09/28/1576044.html

{C#}在C#中調整Button 字體顏色

button4.ForeColor = System.Drawing.Color.Red;

{HTML}GridView BoundField、TemplateField 千分位

在BoundField之下
DataFormatString="{0:N0}"

在TemplateField之下
'<%# string.Format("{0:N0}",Eval("Qty")) %>'

'<%# Eval("Qty","{0:N0}") %>'

以上設定僅千分位,不會有小數點之設定


參考資料:
http://kuanglian2000.wordpress.com/2009/10/23/templatefield-add-number-format/
http://topic.csdn.net/u/20071130/11/3C3D2D26-5D0D-4DCB-BF3A-F00438209A6C.html

{工具} HttpWatch Basic 測試網頁載入速度

下載處:(支援IE與Firfox)
http://www.azofreeware.com/2008/11/httpwatch-basic-edition-6017.html

使用與安裝方式:
http://steachs.com/archives/1450


2012年7月10日 星期二

{JavaScript} Json格式日期在JS中比對

當遇到Json格式轉出的DataTime
要在JavaScript裡做日期對比的function
則需先轉為new Date(),再去比對



function ConvertJsonDateAndCompare(JsondateString) {
            var date = new Date(parseInt(dateString .replace("/Date(", "").replace(")/", ""), 10));
            if(Date.parse(date)==Date.parse(controlDateString))
                            {
                                alert( '日期相同');
                            }

        }


如是一般JS字串
則:Date.parse(controlDateString)


參考資料:
http://www.jb51.net/article/24215.htm
http://uiop7890.pixnet.net/blog/post/24839177-%5B%E5%8E%9F%E5%89%B5%5D-javascript-%E7%A8%8B%E5%BC%8F%E7%AF%84%E4%BE%8B-%E4%B9%8B-%E6%97%A5%E6%9C%9F%E6%AF%94%E8%BC%83

2012年7月9日 星期一

{JavaScript} 動態新增刪除select頁籤之Option項目


                 var appendStr = "";
                 for (i in dataArr) {
                     if (dataArr[i].aaa== selectValue) {
                         appendStr += "<option value='" + dataArr[i].bb+ "'>" + dataArr[i].bb+ "</option>";
                     }
                 }
                 //先刪除所有Option 再增加Option
                 if(appendStr!="")
                 {
                    $('#ddl').find("option").remove().end().append(appendStr);
                 }

參考資料:
http://stackoverflow.com/questions/47824/using-core-jquery-how-do-you-remove-all-the-options-of-a-select-box-then-add-o

{JavaScript} 結束一for迴圈

當要結束一For 迴圈
 for(i in a.count)
{
    break;
}
alert('abc');
---->仍會跳出abc的彈跳視窗



 for(i in a.count)
{
    return false;
}
alert('abc');
-->不會跳出abc的彈跳視窗,即結束此Function


參考資料:http://topic.csdn.net/t/20050223/15/3800857.html

2012年7月8日 星期日

{SQL} 本機還原資料庫執行步驟



















紅框處新增查詢頁面,輸入下列sql
路徑轉為自已bak相關路徑

restore DATABASE KTMS
from disk='D:\KTMS.bak'  
with
move 'KTMS' to 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\KTMS.mdf',
move 'KTMS_Log' to 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\KTMS_log.ldf'
,NoRecovery
,Replace
go



重覆一次還回資料庫動作,即可完成

參考資訊:http://blog.yam.com/iamshiao/article/18601917



2012年7月6日 星期五

{Note} 筆記,無自行整理,只放上連結;更新時間2014/09/29

//Excel Upload (6/10)
http://lhp-self-learning.blogspot.tw/2011/02/c-upload-excel-to-oracle.html

//Dictionary To DataSet  & DataSet To Dictionary (6/13)
http://stackoverflow.com/questions/4181986/extension-method-to-get-list-of-dictionaries-as-dataset

//二個Usercontrol傳值(6/28)
http://king971119.blogspot.tw/2009/06/c-ascx-usercontrol.html

//ViewState 範例 (6/28)
http://www.dotblogs.com.tw/darren.net/archive/2008/12/19/6447.aspx

//新技術:Entity Framework和NHibernate (7/06)
linq與Enity framwork比較:http://blog.sina.com.tw/dotnet/article.php?pbgid=4907&entryid=581590

//Ado.not entity Framework (7/06)
http://www.cnblogs.com/tracy/archive/2010/08/12/1798284.html

//Server 端存取Excel工具 (7/06)
http://msdn.microsoft.com/zh-tw/ee818993.aspx

//EEplus元件 (7/06)
http://blog.darkthread.net/post-2012-05-12-epplus.aspx

//SQL ROW_NUMBER()    RANK() 資料排序 (7/06)
http://www.dotblogs.com.tw/topcat/archive/2009/08/06/9906.aspx
http://www.flag.com.tw/book/cento-5105.asp?bokno=F6221&id=119

//GridView TableSection屬性 (7/06)
http://blog.roodo.com/cat1020/archives/10978111.html

//IQueryable和IEnumerable (9/17)
http://www.cnblogs.com/hiteddy/archive/2011/10/01/Difference_among_IQueryable_IEnumeralb_IList_in_Entity_Framework.html

http://www.dotblogs.com.tw/regionbbs/archive/2012/01/12/linq.deferred.execution.aspx

//.Net code相關 功用大全(9/17)
http://catchtest.pixnet.net/blog/post/28219055-asp.net-%E4%BD%BF%E7%94%A8%E7%AD%86%E8%A8%98

//CSS3試做(9/17)
http://css3button.net/

//VS快速鍵大全(9/17)
http://vmiv.blogspot.tw/2009/02/visual-studio2.html
http://www.cnblogs.com/dragonstreak_1/archive/2011/10/07/2200296.html

//SQL 四大語言( DDL、DML、DCL、TCL) (10/1)
http://www.cnblogs.com/henryhappier/archive/2010/07/05/1771295.html

//out、ref、params 用法 (10/1)
http://www.cnblogs.com/hunts/archive/2007/01/13/619620.html

//Autocomplete 參數說明(10/18)
http://adisonwu.blogspot.tw/2010/08/jquery-autocomplete-plugin.html
http://m.oschina.net/blog/13455

//Read Exce 元件-ClosedXml-只支援2007 excel 以上版本(3/4)
http://blog.darkthread.net/post-2012-12-28-closedxml.aspx

//Autocomplete Twitter版本(3/12)
https://github.com/twitter/typeahead.js

//.net framework 記錄Log -N Log(5/3)
http://www.dotblogs.com.tw/wadehuang36/archive/2012/07/11/nlog-exception.aspx

//MySQL / SQL Server / Oracle / MS Access 資訊查詢(5/3)
http://webdesign.kerthis.com/sql/sql_primary_key

//office automation (server 自動化啟動office)(5/3)
http://support.microsoft.com/kb/257757/zh-tw

Excel匯出 使用OLEDB 方式範例(5/5)
http://www.dotblogs.com.tw/dotjum/archive/2008/06/26/4376.aspx

Excel 匯出 三種常見方式介紹(OLEDB、Excel.dll、XML)(5/5)
http://pcdou.pixnet.net/blog/post/24075850-.net-excel%E5%8C%AF%E5%85%A5-(c%23)

//自寫Jquery 編輯小工具 (5/13)
http://kevintsengtw.blogspot.tw/2012/02/jqueryjquerypad.html#.UZBdn7XX_T4

//動態更新資料(使用Ajax)(5/21)
http://dotnetmis91.blogspot.tw/2010/03/gridview.html

IIS 上啟用後,出現「剖析器錯誤訊息: 無法辨認的屬性 'targetFramework'。請注意,屬性名稱必須區分大小寫。
<compilation debug="true" targetFramework="4.0" />」(9/29)
http://blog.xuite.net/chengvanting/Life/62792888-IIS+7.5+%E6%89%BE%E4%B8%8D%E5%88%B0.Net+Framework+4.0

2012年7月4日 星期三

{Html} 取出純文字html原碼轉Html語法Show出


在Html中,將純文字Html原碼,轉為Html語法Show於Web上方法:
<%=string.IsNullOrWhiteSpace(原碼內容) ? "" :  原碼內容 .Replace("\\r\\n\n\n", "<br/>").Replace("\\r\\n", "<br/>")%>

2012年7月2日 星期一

{SQL& Linq} 取得某群組資料中日期最大

條件:
在一Table中有多個群組類別資料,取每一類別中日期最大的

sql:

select * from (
select b.* ,ROW_NUMBER() over (partition by b.商品類別 order by b.價格生效日 desc)as Sort 
from (select * from 商品類別價格Table where DATEDIFF(DAYOFYEAR, 價格生效日 ,GETDATE())>0) b)a
where a.Sort='1'

解說:
從上一SQL可發現同一種商品類別會有多個價格生效日,上一列子要取出生效日在今天(不含今天)以前日期最接近今天的一筆

SQL轉成Linq:

 var query=context.商品類別價格Table.Where(s=>System.Data.Linq.SqlClient.SqlMethods.DateDiffDay(s.價格生效日,DateTime.Now)>0).ToList().OrderByDescending(s => s.價格生效日).GroupBy(s => 商品類別).Select(
                    b => new {b, cout = b.Count()}).SelectMany(
                        c =>
                        c.b.Select(d => d).Zip(Enumerable.Range(1, c.cout),
                                               (j, i) => new  { j.PriceId, j.商品類別, j.價格生效日, Sort = i })).Where(s => s.Sort == 1).ToList();


參考資料:
http://pastebin.com/7SCG76uW

Zip用法...
http://msdn.microsoft.com/zh-tw/library/dd267698.aspx

{Linq} Group By 多個欄位

var query=from a in table
group a by new { a.file1,a.file2} into g
select g;

資料來源:http://bibby.be/2008/07/linqgroup.html

{C#}ViewState使用


<td >
    <%=ViewState["UpdateBy"] %>
</td>
ViewState 替代 Label Web Control
使解析時,不被解析為Input元件,改善網頁效率,卻可保存內文方式

C#--給值
ViewState["UpdateBy"] = UpdateBy;


C#--取值
var abcString=ViewState["UpdateBy"] ;

js--取值
var  temp= '<%:ViewState["UpdateBy"] %>';        
or
var  temp=$('<%= ViewState["dt_Year"]  %>').selector;

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

包一大包資料至ViewStatus

    <% var detail = ViewState["detail"] as WebServiceName.TableName; %>
    <% if (detail == null)
           return; %>


<td >
    <%:detail.Column1 %>
</td>



參考資料:http://yan3776.pixnet.net/blog/post/11094909-viewstate%E7%9A%84%E9%81%8B%E7%94%A8

{C#} Drop Down List 增加預設"請選擇"


當asp.net的web control使用Drop Down List時,Binding資料後,在預設要為空白選項或「請選擇」選項時,設定方式為下
1.設立屬性AppendDataBoundItems為True
2.增加一個ListItem為請選擇或空白
<asp:DropDownList ID="ddlList" runat="server" AutoPostBack="true" AppendDataBoundItems="true" >
<asp:ListItem ></asp:ListItem>        
</asp:DropDownList>


在Post back後,asp.net會自動檢查使用者是否選到所另增加的資料,無需另外判斷

{C#} string.Empty與""的差別

使用String.Empty時,不會建立任何物件
如是使用var stringTest="",則會一開始就建立好物件
對程式效率來說,String.Empty會較好

資料來源:http://www.wretch.cc/blog/wthomasu/9649447

{LInq} Linq Pad 工具使用說明連結


Linq Pad 工具使用教學:
http://www.haogongju.net/art/134418

{Linq} SqlMethods類別--日期差異Linq To Sql運用


在linq中執行日期相差之sql 語法
可使用SqlMethods類別
using System.Data.Linq.SqlClient.SqlMethods

範例:
假設要取今天以前的資料,不包含今天
SQL語法:
SELECT * FROM abcTable WHERE datediff (DAYOFYEAR,time,GETDATE())>0

Linq語法:
 context. abcTable. Where(s=>System.Data.Linq.SqlClient.SqlMethods.DateDiffDay(s.time,DateTime.Now)>0).ToList();



參考資料:http://msdn.microsoft.com/zh-tw/library/system.data.linq.sqlclient.sqlmethods.aspx
http://www.dotblogs.com.tw/dc690216/archive/2009/09/13/10602.aspx
http://www.cnblogs.com/jamin/archive/2008/09/17/1292562.html

sql之msdn
http://msdn.microsoft.com/zh-tw/library/ms189794.aspx


{C#} ArrayList 一次性增加多筆


在已存在的ArrayList中,一次性增加多筆ArrayList
前提:相同的型態格式下
ArrayList.AddRange(相同型態之ArrayList)


參考資料:

2012年6月26日 星期二

{C#} WebForm出現彈跳視窗


//彈跳訊息後關閉視窗
public void SowAndClose()
{
    Page p = (Page)System.Web.HttpContext.Current.Handler;
    ClientScriptManager CSM = p.ClientScript;
    String ScriptName = "close";
    String ScriptMsg = "alert('我是訊息');window.opener = null;window.open('','_self');window.close();";
    Type CsType = p.GetType();
    if (!CSM.IsStartupScriptRegistered(CsType, ScriptName))
    {
        CSM.RegisterStartupScript(CsType, ScriptName, ScriptMsg, true);
    }
}

//直接關閉視窗
public void Close()
{
    Page p = (Page)System.Web.HttpContext.Current.Handler;
    ClientScriptManager CSM = p.ClientScript;
    String ScriptName = "close";
    String ScriptMsg = "window.opener = null;window.open('','_self');window.close();";
    Type CsType = p.GetType();
    if (!CSM.IsStartupScriptRegistered(CsType, ScriptName))
    {
        CSM.RegisterStartupScript(CsType, ScriptName, ScriptMsg, true);
    }
}

資料來源:
http://www.aspxpet.com/ArchiveHtml/2010/1/Article-2b73c5fa-9068-4f00-ae35-0065853a6111.html

2012年6月22日 星期五

{Knowledge} 輸入法下keypress事件失效、事件無法同時使用

1.在新注音中文輸入法下,輸入文字將不會觸發KeyPress事件,只會有KeyDown事件
詳細解說:http://blog.darkthread.net/post-2011-04-26-keypress-event-under-ime.aspx

2.在Jquery下,同時使用change()、keyup()事件,無法同時被觸發
詳細解說:http://paladinprogram.blogspot.tw/2011/01/jquery-change-keyup.html

{JavaScript} 檢查輸入是否為數值、去掉左右空白

1.是否為數值
方法一、使用rregulate------/^\d+/.exec(Value)
如為null則為非數值,反之則為數值
方法二、IsNaN(Value)
---空白也會認定是數值
方法三、isFinite(Value)
---中文字會認定是數值



2.去掉空白
去掉左右空白正規化(Regulate):/^\s+|\s+$/g
去掉右邊空白正規化(Regulate):/(\s*$)/g
去掉左邊空白正規化(Regulate):/^\s+|\s+$/g





參考資料: