2009年11月11日

自製無用小工具系列 - 語系檔案顯示器

前幾天坎尼低調了窗邊奈奈美的佈景 (見下圖


本來想說用 notepad 打開 theme 檔來看一下每個音效檔的設定
沒想到 notepad 就是那麼不爭氣的無法顯示日文



當時手邊也沒可轉換的軟體...於是就開了 visual studio 自己寫一個

I.工具 UI

在畫面上先放個 Textbox 及 Button,做選擇檔案用
接著放個 comboBox,內容物是各種可轉換的 Encoding 語系
再放個 Button 當功能執行鍵
最後加入個 Multiline 的 Textbox 來顯示轉換過的內容


 

 

 

 

 

 

 

 

II. 功能 - 取得可支援的 Encoding

在載入程式的時候
坎尼直接用 System.Text.Encoding.GetEncodings() 抓取所有的 Encoding name
並把所有可用的 Encoding Name 放到 comboBox 裡去

這邊用 LINQ 語法直接抓出名稱















補充一下,LINQ 雖然可發音為 lin cue lynx
不過印象中官方是讀為 link ,因為要 link to everything (Object、SQL、XML....)
使用上還是看個人,坎尼是比較喜歡讀成 link

III. 功能 - 轉換

接著就很簡單的用 StreamReader 加上 Encoding 參數
把資料轉成想要的編碼,再顯示在畫面上
















大功告成,來看一下成果吧

















這邊選擇的是日文系統用的 shift-jis 編碼
轉換之後就可以看到日文內容了 ^^

IV. 小結

當然這個程式也可以用來轉換簡體中文之類的內容檔
有興趣的人可以下載回去玩玩 ^^

本次的執行檔下載 (source code由於沒什麼技巧,就不放了
由於有用到 Linq 語法,所以執行的使用者要更新到 .net framework 3.5 以上

參考資料
LINQ 發音
System.IO.StreamReader Constructor
System.Text.Encoding.GetEncodings()

2009年10月9日

利用 jQuery 替 GridView 加上點擊高亮顯示

在 GridView 上要做到 highlight 效果
通常會利用 mouseover mouseout 兩個事件去修改背景色
之前坎尼在 MSDN 論譠看到有人想點擊後再改背景色
且點擊下一列之後,前一列要回復原來的背景色,這要怎麼做呢?

I. 畫面設定

首先,在畫面上加入個 GridView,並給予樣式
<asp:GridView ID="GridView1" runat="server" Width="450px"
CellPadding="4" ForeColor="#333333" GridLines="None">
    <RowStyle CssClass="rowstyle" />
    <FooterStyle BackColor="#507CD1" Font-Bold="True"
        ForeColor="White" />
    <PagerStyle BackColor="#2461BF" ForeColor="White" 
        HorizontalAlign="Center" />
    <SelectedRowStyle BackColor="#D1DDF1" Font-Bold="True"
        ForeColor="#333333" />
    <HeaderStyle BackColor="#507CD1" Font-Bold="True"
        ForeColor="White" />
    <EditRowStyle BackColor="#2461BF" />
    <AlternatingRowStyle CssClass="alterrowstyle" /> 
</asp:GridView>
可以看到,奇偶行的 RowStyle 分別有自己 class
樣式內容如下 (含 highlight 的樣式
.highlight
{
    background-color: Yellow;
}
.rowstyle
{
    background-color: #CCF3FB;
}
.alterrowstyle
{
    background-color: White;
}

II. jQuery 程式碼

接著在 javascript 區段內加入下列的 code
<script type="text/javascript">
    //記錄前一個 jQuery 物件及原class
    var preElement;
    var preClass;
    $(function() {
        //替 GridView1 的所有 tr 加入 click 事件
        $("#GridView1 tr").click(function() {
            //回復上一個物件的樣式
            if (preElement != null)
                preElement.removeClass().addClass(preClass);
            //取得目前點選物件
            var nowElement = $(this);
            //記錄物件,等待下次使用
            preElement = nowElement;
            preClass = nowElement.attr("class");
            //修改目前點選物件樣式
            nowElement.removeClass().addClass("highlight");
        });
    });
</script> 
只要在點擊下一列時,把記錄下來的上一列樣式給回復就好
是不是很簡單呢?  來看一下成果




















此時有人可能會有疑問:
既然只抓取 GridView1 內的 tr,那點到 Header 不會變色嗎?

以這個範例來講,並不會有那種情況
雖然點下 header 時,仍會把 class 附加上去

但 header 本身已有 inline-style,優先權會高於 class
所以 background-color 會維持原來的顏色

III.小結

其實以上範例也可以用單純的 DOM 加上 javascipt 來達成
(配合 GridView 的 RowDataBound)
實際做起來不難,坎尼這邊就賣個關子,有興趣的人可以自己試試 ^^

2009年10月4日

[Tips] 讓 Visual Studio 自動解析要引用的 namespace

本篇來介紹個算蠻實用的小技巧:讓 Visual Studio 自動解析該使用的 namespace

I. 問題描述

當要宣告或使用其他 namespace 的類別時,忘了是哪個 namespace 該怎麼辦呢?
(尤其是像坎尼這種老人記憶力的...

下圖旁白「啊,我忘了 Color 的 namespace該怎麼辦?」





II. 解決方式

使用 Visual Studio 的 解析 (resolve) 功能,讓 vs 自動解析要用的 namespace在上圖的 Color 字尾有出現個紅底線,把滑鼠移過去之後會出現選單 (如下圖







或是在 Color 上點右鍵選 resolve (解析) 也會出現相同的選單








此時會有兩個選項,上面選項是自動加入 using namespace




下面選項則是直接在原類別關鍵字前加入 namespace




如此一來就可以使用該類別囉 :)

III.小結

Visual Studio 真是很好用的開發工具不要再罵它開啟時為什麼會那麼慢,要多體諒陪大家熬夜加班的這位好朋友

2009年10月3日

輕鬆學會 Chart Control - 替 chart 加上 javascript 事件

之前坎尼介紹過 如何用 postbackvalue 來與使用者互動
但每次都要 postback 很麻煩,有些動作其實用 javascript 來做就好
今天就來教如何加入 javascript 事件

I.實戰

首先要在畫面上佈置 Chart (如下圖


















接著就是撰寫 javascript function,本次範例是把訊息 alert 出來






最後是今天的主角,Series 裡的 MapAreaAttributes 屬性
這個屬性可以替每個 DataPoint (也就是每一條長條圖) 加上可支援的屬性
如 Url、Target、javascript 事件

坎尼在範例中把每個長條加上 onclick 事件
來呼叫前面所寫的 javascript function

















另外再提醒一點,這個屬性也可支援 Chart Keywords
所以坎尼把 X 軸關鍵字 #VALX 傳給 javascript function
接著把DataSource繫結到 Chart 後,就趕緊來看一下成果吧!!!
















點了第一個 Column,果然跳出了該店家的訊息
以上,能簡簡單單地把 javascript function 送給 Chart 執行

II. 小結

MapArea 是 Chart 中很好用的屬性,小平叔贏牌還要靠它呢!!!
而且不只資料點有,其他像 Label、Legend、Title 都有 MapAreaAttributes 屬性
所以想要簡單打造出豐富的互動式圖表已經不是遙遠的夢想

還沒學 MS Chart Control 嗎? 快點來學吧 ^^

III.本次範例下載及參考資料

2009年9月24日

[jQuery] 替 dynDateTime (Date Picker Plugin) 加入民國年屬性

坎尼在小喵大的站上又看到了好物
[jQuery]挑選日期的好物 jQuery Plugin [dynDateTime]中文化特別處理
小喵大佛心的把 jQuery 的日期選擇 Plugin 中文化
但坎尼公司在實務上是比較常遇到要民國年,所以就做了小小的改版啦

I.使用方式

坎尼加入了兩個屬性:isChtChtYearLen
isCht為布林值,預設為 false,設為 true 表示回傳值為民國年
ChtYearLen為數值,預設為 2,表示回傳的年份位數










II.使用畫面

選擇日期畫面


選擇之後回填 0980924 (因為坎尼將年的位數設為3




 

III.小結

目前坎尼只是先將回傳值改為民國年
未來若是有需求再來做介面的民國年客製化吧 ^^
使用上有任何問題歡迎回報
如果使用上不順手,可以自行把範例中客製過的 js 打開修改

範例下載

IV.參考資料

參考來源:【topcat姍舞之間的極度凝聚】  [jQuery]挑選日期的好物 jQuery Plugin [dynDateTime]中文化特別處理

2009年9月21日

口試心得 & 題目彙整

前陣子去某大公司的面試,前兩關都是很普通的問題,例如求學經歷、工作經歷等等,正在心情略微放鬆之際,第三關的壓軸考官丟出了一個從沒遇過的問題 :「如果你的主管交付給你一項很不合裡的任務,請問你會怎麼辦?」

幸好在遲疑了兩秒以後有勉強擠出一個回答,但這次驚悚的體驗讓我仔細的思考了一陣子,在面試時若要展現敏捷的反應,除非應試者天生就是才思敏捷,不然對於很多人來說,要有好的表現恐怕有相當的難度。一個可行的準備方法就是利用平時的空閒時間,預先模擬面試時可能會遇到的各種問題,並且記錄下來,有空就多思考,每隔一段時間根據新的思考和經驗來更新這些想法,面試時才能有好的表現。

目前彙整的題目在這裡,包括「職場倫理」、「主管相關」、「公司背景」、「工作經驗」、「個人特質」、「求學經歷」、「技術能力」、「.NET技術」、「其他/想像力/創造力」等類別共40題,如果有什麼想法的話可以留言聯絡我和砍尼 :)

以下測試 Google Spreadsheet 產生的內嵌 iframe 長什麼樣子:

2009年9月18日

[Tips] 在方案總管(Solution Explorer)中顯示未加入專案的資料

有鑒於坎尼同事不知道 visual studio 還有很多很好用的功能
以後會不定時推出 Tips 系列,說明一些好用的小技巧
讓 visual studio 不只是用來當文字編輯器 (那還不如用 notepad++)

I.功能按鈕所在

如下圖,當把focus放在專案時,上面會出現此項 圖示

點選之後,會出現淺灰色的資料檔或資料夾
這就是包含於專案實體路徑裡,但又沒加入專案的資料

II.檔案管理

直接在灰白色的圖示上點選右鍵,即可將檔案加入專案中,如下圖
(可以搭配 shift ctrl 選取多個檔案)

當然有加入就會有移除,可以在要移除的檔案圖示上點選右鍵移除

移除有什麼用呢? 一般在發佈時,若沒有把檔案設為「不要複製」到專案資料夾中
檔案在每次進行部署時就會把檔案給複製過去

要是有些比較大且不需更新的圖片、資料庫檔、A片種子
就可以先從專案中移除,需要時再用手動複製到部署的資料夾中

另外像是 vs2008 sp1 提供的 js intellisense 定義檔功能 (ex. jquery-vsdoc.js)
其實可以把 -vsdoc.js 檔案從專案中給移掉,開發時一樣可以抓到定義的說明

III.小結

本篇是 Tip 第一篇,未來會陸陸續續的提供實用的技巧
當然也歡迎指教和提供意見 ^^

Google Spreadsheet 裡用規則運算式

最近因為工作關係,遇到要用 Google Form 及 Google Sheet 所以研究了 Google Sheet 裡的一些 function 怎麼用 首先,分享一下如何在 Google Sheet 裡用規則運算 :D