前言: 話說前陣子爸爸家陽台不斷出現米奇老鼠,立刻清理陽台所有東西,然後又跟市政部門反映問題,可是情況還沒有好轉,米老鼠來完一隻又一隻,我爸陽台在老鼠界應該是網紅打卡聖地(誤),要不然就是米奇老鼠版米奇林三星餐廳(?) 雖然我們抓到了三隻,到上兩個禮拜為止還有至少一隻一直抓不到,每天淩晨還會來吃事後煙留下老鼠屎,真_北。 這隻老鼠對傳統攻擊有抗性,有IT9朋友前陣子用Raspberry pi自製了一台electric mouse trap ,用pi的超聲波雷達放在鞋盒裡,鞋盒裡有一堆食物,底部佈了鐵網,偵測到有老鼠進去以後立即關門通9V電,通個1分鐘再放牠離開,大推我自己也造一台 (Youtube片搜尋一大堆,人類真變態啊,朋友好變態啊)。可是我覺得這樣又好像有點太殘忍,不如先偵測牠們什麼時候來,嚇嚇牠們看看有沒有效果再說吧。 目的: 用Raspberry pi及手上有的感測器弄一隻放陽台用來偵測和嚇嚇老鼠的東西,並把紀錄圖像化到雲端給老爸使用。 邏輯及設計: 當老鼠進入偵測範圍,Motion Sensor偵測到生物活動Raspberry pi 處理來自Motion Sensor的訊號,如果夠強的話開始準備作出回應 Raspberry pi在Angry cats sounds中隨機選出叫聲,再經由Speaker輸出貓叫聲 Raspberry pi指示強光元件發出強光束照射目標 把偵測計數上傳到雲端圖表 材料: Sensor 在網路上看了一些Raspberry pi wild animal camera ,很多也是用Motion Sensor先偵測動物再來,我用的是PIR Motion Sensor被動式紅外線感測器,有低耗電成本便宜的好處。[1],而且可手動調整靈敏度及反應時間。 PIR Motion Sensor就是下面這個 圖片來源: learn.adafruit.com 可手動調整敏感度還有反應時間,這個有點不好調,要試好多遍才找到最佳位置。 可以在Raspbian中輸入pinout查詢GPIO避免插錯 圖片來源: learn.adafruit.com . 一台Raspberry pi 這次使用較舊的Raspberry pi model B+ 萬一老鼠生氣被咬爛錢包也不太痛 . ...
前言:
我想很多大大寫ASP.NET的時候也會遇到同樣的問題: 很多時候為了很多原因, 例如Data size, 速度, 不過度扁平化資料表等等, 在資料庫的設計上我們會進行normalization. 例如公司名稱用CompanyID取代, 然後把真實給人看的名字分割到另外一個Table.
因此當我們要把資料顯示在Presentation layer(就是使用者介面)的時候, 一定逃不過要把資料表JOIN起來.
傳統的做法是把JOIN好的SQL直接寫在SqlDataSource裡面. 這樣很方便是沒錯, 不過除了在維護上會很困難, 也違反了把Data access layer跟Presentation layer 盡量loosely coupled的原則.
不過好死不死, ASP.NET 的Gridview功能實在有點雞肋, 它不能像dropdownlist一樣可以選擇Display value. 我自己之前用的笨方法是先把只有值的table跟Gridview進行連結, 再寫一個class放在Data bounded的事件中把值換成顯示的值. 老實說真笨....
前幾天又遇到了老問題, 我堅決不相信就是沒有解決方法, 查了MSDN老半天 終於守得雲開見月明, 柳暗花明又一.....(喂).
方法:
準備工作:
參考資料:
Tutorial 1: Creating a Data Access Layer
我想很多大大寫ASP.NET的時候也會遇到同樣的問題: 很多時候為了很多原因, 例如Data size, 速度, 不過度扁平化資料表等等, 在資料庫的設計上我們會進行normalization. 例如公司名稱用CompanyID取代, 然後把真實給人看的名字分割到另外一個Table.
因此當我們要把資料顯示在Presentation layer(就是使用者介面)的時候, 一定逃不過要把資料表JOIN起來.
傳統的做法是把JOIN好的SQL直接寫在SqlDataSource裡面. 這樣很方便是沒錯, 不過除了在維護上會很困難, 也違反了把Data access layer跟Presentation layer 盡量loosely coupled的原則.
不過好死不死, ASP.NET 的Gridview功能實在有點雞肋, 它不能像dropdownlist一樣可以選擇Display value. 我自己之前用的笨方法是先把只有值的table跟Gridview進行連結, 再寫一個class放在Data bounded的事件中把值換成顯示的值. 老實說真笨....
前幾天又遇到了老問題, 我堅決不相信就是沒有解決方法, 查了MSDN老半天 終於守得雲開見月明, 柳暗花明又一.....(喂).
方法:
準備工作:
- 先用XSD檔案(Dataset)描述資料表, 例如公司資料表中的CATEGORY欄位對應顯示用資料表COMPANY_TYPE的COMPANY_TYPE_ID.
另外資料表中的TableAdapter使用最簡單的SQL STATEMENT, 例如資料表COMPANY使用的就是select * from COMPANY, 完成後應該會自動產生UPDATE, INSERT跟DELETE的指令. - 接下來修改COMPANY資料表. 在COMPANY資料表上的TableAdapter按一下右鍵->Configure
- 把原來超簡單的sql換成下面這一句
好像很難, 說穿了其實只是在原本COMPANY資料表後面加上要願示的欄位而已. 改好了以後按NEXT NEXT NEXT到OK就可以了.
實作:
設定ObjectDataSource
- 首先反回aspx頁面, 抽一個ObjectDataSource叫ObjectDataSourceCompany, 在ObjectDataSource上按下Smart tag, 選取 "Configure Data Source"
- 選取COMPANY資料表的TableAdapter, 按下一步
- 確認一下SELECT UPDATE INSERT DELETE的Tab是否已經自動填好, 然後按FINISH.
綁定Gridview bounding
參考資料:
Tutorial 1: Creating a Data Access Layer
Comments
Post a Comment