2012年3月14日 星期三

GridView隱藏欄位與取得其值

從資料庫取出的資料

不想被看到資料內容或是為了美觀
隱藏欄位方法
  Visible = false;

偏偏後續動作又需要用到那些参數

上面的方法又會抓不到資料

HiddenField?

可是GridView不認識HiddenField

還要用TemplateField包住

而且動態加入又要一大堆程式碼

那該怎麼辦呢?

其實只要搭配CSS就可以很輕鬆的做到

先來設定一個CSS
  .hiddencol { display:none; }

接著將ItemStyle的CssClass設定為hiddencol
ASPX:
  <asp:BoundField ItemStyle-CssClass="hiddencol"/>

CS:
  BoundField bfHid = new BoundField();
  bfHid.ItemStyle.CssClass = "hiddencol";

這樣在瀏覽網頁時就看不到被隱藏的欄位


再來是取得資料
  GridView1.Rows[x].Cells[y].Text;

或是當使用者選取其中一個ROW內的物件才做後續動作

這時可以用
  GridView1.SelectedRow.Cells[y].Text;

以上!

回aspnet目錄
回首頁

2012年3月12日 星期一

JQuery 程式設計目錄

  1. css 選擇器 ( css selector)
  2. VS加入jQuery Intellisense(提示功能)
  3. Jquery 子母頁面間的 json 參數傳遞



VS加入jQuery Intellisense(提示功能)

微軟已經在VS 2010上完整支援jQuery Intellisense
只要加入jquery-*.js與jquery-*-vsdoc.js(版本名稱要相同,這邊以1.7.1版做範例)
就可以看到跟VS一樣的提示功能

但是在VS 2008沒有直接支援
以往我們都需要做另外宣告
又因為在運行時會抓到vsdoc而將其隱藏
<script src="jquery-1.7.1.js" type="text/javascript"></script>
<% if(false) { %>
  <script src="jquery-1.7.1-vsdoc.js" type="text/javascript"></script>
<% } %>

要做到VS 2010一樣的效果
需要先將VS 2008升級到SP1
VS90SP1-KB958502-x86

然後安裝微軟提供的Hotfix
VS90SP1-KB958502-x86

安裝完之後
不管在VS 2010還是VS 2008
只需將jquery-1.7.1.js與jquery-1.7.1-vsdoc.js放在相同資料夾內
然後呼叫(直接脫過去)jquery-1.7.1.js
不需要再多做乎要jquery-1.7.1-vsdoc.js的動作

ASPX頁面呼叫
<script src="jquery-1.7.1.js" type="text/javascript"></script>

js檔呼叫
/// <reference path="jquery-1.7.1-vsdoc.js" />


2012/03/12 David Kuo 補充:

請注意,假使許多子頁面在不同位置及目錄,而都要套用同一款主版頁面,那就必須要使用相對位置的連結路徑。
例如:
<script src="<%=ResolveUrl("~/js/jquery-1.7.1-vsdoc.js") %>" 
type="text/javascript"></script>
如此一來,所有子頁面都會對應到相同的 jquery-1.7.1-vsdoc.js 檔案


参考:
jquery vsdoc vs2008使用javascript的提示功能
VsDoc for jQuery
支持-vsdoc.js的jQuery智能提示的VS2008 SP1补丁发布
Rich IntelliSense for jQuery

回aspnet目錄
回JQuery目錄
回首頁

2012年3月7日 星期三

ASP使用AJAX

AJAX在VS2008+有工具可以使用
只要拉好工具
就可以很簡單的做到AJAX效果

簡單的使用ScriptManagerUpdatePanel來達到我們基本AJAX需求

ScriptManager
MSDN說明:針對 Web 和應用程式服務的 ASP.NET AJAX 指令碼程式庫和指令碼檔、部分網頁的呈現作業和用戶端 Proxy 類別的產生作業進行管理。
詳細說明請參閱MSDN
.net 3.5
http://msdn.microsoft.com/zh-tw/library/system.web.ui.scriptmanager(v=vs.90).aspx
.net 4.0
http://msdn.microsoft.com/zh-tw/library/system.web.ui.scriptmanager.aspx


UpdatePanel
MSDN說明:在不使用回傳的情況下,啟用網頁區段的部分呈現。
詳細說明請參閱MSDN
.net 3.5
http://msdn.microsoft.com/zh-tw/library/bb359258(v=vs.90).aspx

.net 4.0
http://msdn.microsoft.com/zh-tw/library/bb359258.aspx

在UpdatePanel前面一定要先拉好ScriptManager
要拉的原件需包覆於<ContentTemplate></ContentTemplate>
<asp:ScriptManager ID="ScriptManager1" runat="server">
  </asp:ScriptManager>

  <asp:UpdatePanel ID="UpdatePanel1" runat="server">
    <ContentTemplate>
      /*放入要達成AJAX的原件*/
    </ContentTemplate>
  </asp:UpdatePanel>

如果要在點選Button後於Label顯示TextBox所輸入的值
點Button後會有頁面刷新的情況
protected void Button1_Click(object sender, EventArgs e)
  {
    Label1.Text = TextBox1.Text;
  }

  <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
  <asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" />
  <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>

加上ScriptManager與UpdatePanel
再來測試看看
是不是不會刷新了
<asp:ScriptManager ID="ScriptManager1" runat="server">
  </asp:ScriptManager>
  <asp:UpdatePanel ID="UpdatePanel1" runat="server">
    <ContentTemplate>
      <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
      <asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" />
      <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
    </ContentTemplate>
  </asp:UpdatePanel>

真是簡單方便的設計
快去試試看吧

PS:
這幾天拿之前做的網站來玩AJAX
發現到
aspx有參考ascx或套用master
瀏覽aspx看起來就只是一個頁面
邏輯上也是通的
但執行結果卻是無法得到我們想要的
除錯到最後
得到的結論是
當我們點選參考或套用頁面上的原件是無法在我們的aspx上做到AJAX
以上個人遇到的問題與想法
如果有錯請不要炮我(小弟閃避率高達100%)
有更好的做法或見解歡迎交流^^

回aspnet目錄
回首頁

2012年3月4日 星期日

ASP.NET Kindeditor 套用

step1
至Kindeditor官網下載相關檔案

stap2
將asp.net資料夾中的demo.aspx檔內程式碼複製到所需放置的網頁位置。
你需要將其中相關的.css檔及.js檔連結至方案中。


網頁內容


網頁.cs檔
step3
你可能會遇到的問題,可參考:
1.檢測到有潜在危险的 Request.Form 值。
2.已設定了validateRequest="false"仍會出現潛在危險Request.QueryString的錯誤訊息。

2012/03/07 David Kuo 補充:

請注意,如果是套用asp.net的主版頁面後,欲在子頁面加入 KindEditor,必須要注意控制項 ID 會隨著 asp.net 套用主版面頁而改變。


回aspnet目錄
回首頁

2012年3月3日 星期六

錯誤碼解法

身為一個程式設計師

在其一生當中或多或少(不可能沒有)在寫程式時遇到錯誤的情況

常常看到"XXXXXX,錯誤碼為:XXXX"之類的情況

很理所當然的就是上網找看看別人遇到一樣的問題怎麼解決

偏偏中文資料少之又少

有中文的偏偏只有講解法卻沒有詳細說明原因

又或者是對你是無解的

像小弟我都是先知道該錯誤碼是什麼問題

再用那個問題去搜索

這樣比較容易找到解法

又或者是將中文註解轉英文去找

找到的資料再轉成中文來看(英文爛也是無解題....)

這邊就來介紹一下幾個方便查詢錯誤碼解法的東西:

錯誤碼查詢工具:Exchange Server Error Code Look-up

下載的是一個自動解壓縮的執行檔
解壓縮後在你指定路徑後有Err.exe
此為指令列執行檔,請由命令提示字元去執行
只要輸入err xxx(xxx為錯誤碼)即可查出此錯誤碼的相關資訊,例如:

如上圖示
編號 1 是 Err.exe 在哪個 Header 檔案中找到錯誤碼的定義
編號 2 是找到的常數定義
編號 3 是對應的註解,而這個註解正是可以幫我們更容易利用 Google 大神找到解答的關鍵!
如果你得到的錯誤碼是 16 進位,也是可以查詢的,例如:err 0xb7
其實有很多查詢格式,提供不同產品或事件檢視器中得到的錯誤碼,如下:
Decorated hex (0x54f)
Implicit hex (54f)
Ambiguous (1359)
Exact string (=ERROR_INTERNAL_ERROR)
Substring (:INTERNAL_ERROR)


VS內建錯誤碼查詢工具:errlook.exe

這是安裝VS就有提供的好用工具
路徑為下:
VS2003
C:\Program Files\Microsoft Visual Studio .NET 2003\Common7\Tools\errlook.exe

VS2005
C:\Program Files\Microsoft Visual Studio 8\Common7\Tools\errlook.exe

VS2008
C:\Program Files\Microsoft Visual Studio 9.0\Common7\Tools\errlook.exe

VS2010
C:\Program Files\Microsoft Visual Studio 10.0\Common7\Tools\errlook.exe

errlook是有圖形介面(GUI)的查詢工具,內建於VS中又很方便查詢,只要有安裝VS就可以不必額外安裝,如下圖:
Error Lookup


上面介紹了2個查詢工具
這邊來做一下優缺點分析
(註:若VS安裝的是中文版,而errlook就會是中文介面)
工具名稱優點缺點
Exchange Server
Error Code
Look-up
1.查詢結果相當詳細
2.註解不用翻譯成微軟原文
1.需下載
2.需使用命令提示字元執行
3.英文描述
errlook1.內建免下載
2.GUI介面方便使用
3.中文描述易懂
1.註解需翻譯成微軟原文較易網路上搜索國外解法
2.查詢結果只有描述,無其他詳細資訊

以上介紹了好用的查詢錯誤碼工具,再來我們就需要將查詢到的資訊轉成微軟原文,這樣上網找英文資料時才可以更為正確與快速,下面為連結網址:

微軟語言入口


這邊可以將我們取得的錯誤碼資訊翻譯成各國語言
註:原文若選擇英文以外的語言,則會強制轉成英文,想再轉其他語言,需用轉出來的英文再去轉一次

範例1:
錯誤碼183取得的訊息為"當檔案已存在時,無法建立該檔案。"
轉換後得到結果為:
英文譯文產品
Cannot create a file when that file already exists.當檔案已存在時,無法建立該檔案。Windows Server 2008
Cannot create a file when that file already exists.當檔案已存在時,無法建立該檔案。Windows Vista SP1
Cannot create a file when that file already exists.當檔案已存在時,無法建立該檔案。Windows Server 2003 SP1
Cannot create a file when that file already exists.當檔案已存在時,無法建立該檔案。Windows Vista
Cannot create a file when that file already exists.\r\n當檔案已存在時,無法建立該檔案。\r\nWindows 7

範例2:
建立具有整合式安全性的連接時 SSPI 交握失敗,其錯誤碼為 0x8009030c; 此連接已經關閉。
這是一個SQL Server 連線問題,0x8009030c很明顯的就是一個變數,所以這邊取中文描述就好去搜索就好。
轉換結果:
英文譯文產品
SSPI handshake failed with error code 0x%1!s! while establishing a connection with integrated security; the connection has been closed.%2!s!建立具有整合式安全性的連接時 SSPI 交握失敗,其錯誤碼為 0x%1!s!; 此連接已經關閉。%2!s!SQL Server 2008
SSPI handshake failed with error code 0x%1!s!, state %2!s! while establishing a connection with integrated security; the connection has been closed. Reason: %3!s! %4!s!. \r\n建立具有整合式安全性的連接時 SSPI 交握失敗,錯誤碼為 0x%1!s!,狀態為 %2!s!; 此連接已經關閉。原因: %3!s! %4!s!。\r\nSQL Server 2008 R2

回首頁