2015年6月29日 星期一

[JavaScript]小數位數的進位法

JavaScript本身就有各種進位法
Math.round() 四捨五入至整數
Math.floor() 取小於指定數的最大整數
Math.ceil() 取大於指定數的最小整數
不過眼尖的人都會發現「只有整數」,所以不外乎要多寫幾行程式


JavaScript用固定字元的函數就是無條件捨去法, 直接使用就可以了(計算到小數第一位)
無條件捨去
                var BMI = (weight / (height * height);

而JavaScript的四捨五入功能只能用「Math.round()」到整數
可以先乘以10的n次方(視保留位數而定),四捨五入後再除以10的n次方

四捨五入
                var BMI = Math.round((weight / (height * height))*10);                
                BMI = BMI/10;

    //or 
    var BMI = weight / (height * height)
    BMI = BMI.toFixed(1);

不過這樣子,每次都要去調整10的倍數, 常使用的話, 就寫成一個function
不保留小數點的四捨五入法
function myRound(value, len){
  return Math.round(value * Math.pow(10, len)) / Math.pow(10, len);
}
var BMI = (weight / (height * height);
BMI = myRound(BMI, 1) 

除了固定字元外,前面提到的toFixed()可以做為小數第n位的實現方法
會保留小數點的四捨五入法
function myRoundFixed(value, len)
{
  return value.toFixed(len);
}

2015年6月13日 星期六

[JQuery]選擇同一列, 第n欄的第m個元素


DayNo.IntervalsTimeActualNote
-11-2507 : 0007:00
-12-24.507 : 3007:30


如果是Label就用.text();, 如果是TextBox就用val();
function(){}的外殼省略, 直接寫內容

1. 抓同欄的前一個
$(this).next().text();

2. 抓前一欄
$(this).parent().prev().children().text();
$(this).parent().prevAll(":last").children().text();
//二選一, 以此例而言, 結果相同
//而「parent().prev().children()」或「parent().prevAll().children()」,的作用, 是要先退到外層 移動, 再進到裡面抓東西

3. 抓第一欄
$(this).parent().prevAll(":last").children().text();
//別懷疑, 用prevAll()抓第一欄要用":last", 有點像感染擴散的方式

4. 抓第n欄, 第m個元素(例如Note為起點)
$(this).parent().prevAll(":eq(2)").children(":eq(0)").text();
//第一順位為0, Actual=prevAll("eq(0)"), Time=prevAll(":eq(1)")...

----
那不同列呢? 其實只要再往外退
用「.parent().parent()」或是「.parentsUntil("tr")」都可以 :D
鑽進去的方法也只是children()的延伸而已喔~

不過鑽的那層, 需要影響複數特定標籤的話, 可以用「>」 (ex:"tr>td")
這樣底下所有的<td>都會套用到喔

2015年6月7日 星期日

自訂PagerStyle (分頁樣式)


用VS提供的「自動化格式...」雖然可以迅速完成美化
但是要自訂樣式時, 可用UI操作的屬性就略顯不足

簡單來說,就是要從這樣(眼痛到有剩)
DayDateNo. TimeComments
1Jun/9/2016110:30test
2Jun/10/2016216:15test2
3Jun/11/20163
12
改變成成下方的樣式,其中應用了

  • 改變Pager的底色, 文字置中
  • 改變文字大小
  • 改變連結顏色


要達到這樣的效果, 大致上分成兩種
◎一種是純後台coding(asp.net & C#)
方法可參考:Custom Paging with the ASP.NET Repeater Control
此方法不是本篇重點, 就暫不介紹

◎另一種是比較簡單的前後台混合型(asp.net & css)
參考自:How to change gridview paging numbers size?
主要是為Pager附加CSS, 然後就可以做想做的事

1. 指定要應用的css, 並設定背景顏色和文字置中
<PagerStyle CssClass="fvPagerStyle" BackColor="#889999" HorizontalAlign="Center" />

2. 利用CSS改變文字大小
 .fvPagerStyle span {
            font-size:18px;
            color:white;
        }

3. 利用CSS設定超連結顏色
.fvPagerStyle a {
            color:#CCEEff;
        }

這樣就可以快速地自訂Pager, 也不怕改錯
DayDateNo.TimeComments
1Jun/9/2016110:30test
2Jun/10/2016216:15test2
3Jun/11/20163
12

2015年6月5日 星期五

當值為0時加1, 為null刪去

遇到「當值為0時加1, 為null刪去」的需求
當然, 第一次嘗試是大失敗
因為在JS中, 自動轉型下, 0和null會被劃作等號
如果直接0==null又是另一種結果了, 可以試試, 相當有趣

直到發現了這篇文章《JS 中如何判断-null》

簡單來說,用「 var === null」或是 「 (!var && typeof var != "undefined" && var != 0 」
就可以解決了


  1. 要把第一排的數字+1
  2. 「var==0」, 連null都被視為0而+1了
  3. 「!var」, 0一起被刪除了
  4. 最後兩張是可行的方法

※「===」不只判斷值, 還同時判斷型別, 需要嚴謹判斷時使用
※JQuery的語法不是主角, 可以無視

2015年6月3日 星期三

複製網頁後, EEP要注意的主要事項


個人的習慣, 將要確認的事情分成四大項
1. 資料庫和表格關聯是否需要修改
2. ASP.NET和後臺的資料關聯修改
3. 將資料水管接到網頁中的各個物件
4. 各種輔助程式

第一階段(Server DLL)
如果有動到資料庫結構或之間的關聯, 就需要更動對ServerDLL
建置修改過的ServerDLL(建議先關閉EEP NetServer)
(建議這時再度預覽先前的網頁, 看是不是有改過頭的現象)
如果有用到新的InfoDataCommand, 也別忘了為它添加新的UpdateComponent

第二階段(*.aspx.vi-VN.resx, *.aspx)
重新設定DataSet(右click網頁→檢視設計元件工具或到「*.aspx.vi-VN.resx」修改)
設定新的DataSource(進入*.aspx)
將*.aspx的「CodeFile」指向新的名稱
將DataGrid或FormView之類的設定新的「資料來源」

第三階段(*.aspx)
大致分成兩種「結構大幅變化」」「小幅變化結構不動」
「大幅變動」反而簡單,重新選好資料來源後
用「重新整理結構描述」,然後各種血淚排版

「小幅度變化」由於不能使用自動功能,要各自調整
以GridView而言, 使用「編輯資料行」將「DataField」指向正確的欄位
可能會遇到沒顯示新的欄位,這時就使用「重新繫結欄位」
基本上, 做完就能存檔並預覽了

第四階段(*.aspx, *.aspx.cs ...)
各種Default, 驗證, 畫面呈現... (code behind 和 code beside都要注意)
基本上是各種潤飾, 可以做也可以不做
但是光做完第三階段卻打不開時, 不是前面有做錯, 就是第四階段媒改好的程式在干擾你
此階段可以說是最麻煩卻也最簡單的, 單看與前身的差異
(不過光複製貼上和簡單調整的網頁, 也輪不到程式設計師來改 orz)

Blogger的第一篇

用的東西越來越複雜

比起google site是以類型來區隔
此處是以日期為主要區隔, 分類為輔
方便記錄自己的成長

第一篇文章, 就做瀏覽版面的sample吧!