2012年3月9日 星期五
CSS3 圓角 Textbox Template
<style>
#MainContent_TextBox1, #MainContent_TextBox1:focus
{
position:absolute;
left:0px;
top:0px;
width:100px;
height:17px;
border: 1px solid #007777;
border-radius: 6px;
-moz-border-radius: 6px;
-webkit-border-radius: 6px;
padding-top: 3px;
padding-left: 5px;
padding-bottom: 3px;
outline: none;
}
#btn
{
position:absolute;
left:90px;
top:0px;
background-color:#007777;
width:48px;
height:25px;
}
</style>
#MainContent_TextBox1, #MainContent_TextBox1:focus
{
position:absolute;
left:0px;
top:0px;
width:100px;
height:17px;
border: 1px solid #007777;
border-radius: 6px;
-moz-border-radius: 6px;
-webkit-border-radius: 6px;
padding-top: 3px;
padding-left: 5px;
padding-bottom: 3px;
outline: none;
}
#btn
{
position:absolute;
left:90px;
top:0px;
background-color:#007777;
width:48px;
height:25px;
}
</style>
[Crazy CSS] Box/Text Shadow Magic
如果要說CSS3最偉大的地方,除了transition & animation就是陰影: box-shadow & text-shadow
CSS3 Box shadow和text-shadow優在可以一個element下N個shadow (次序/z-index同multiple background),而且會一定程度上反映element變形過的效果*,加上有方向性(outset/inset)、xy offset及可變大及設定羽化範圍幾乎是有無限可能-修邊柔化的好工具。缺點是會拖慢rendering及有時會很buggy^...不過有了這兩個傢伙本來瘋狂的CSS又再更瘋狂了...
CSS3 Box shadow和text-shadow優在可以一個element下N個shadow (次序/z-index同multiple background),而且會一定程度上反映element變形過的效果*,加上有方向性(outset/inset)、xy offset及可變大及設定羽化範圍幾乎是有無限可能-修邊柔化的好工具。缺點是會拖慢rendering及有時會很buggy^...不過有了這兩個傢伙本來瘋狂的CSS又再更瘋狂了...
[GridView][DropDownList][ASP.NET] DropDownList in GridView
許多時候我們會在 GridView 搭配 DropDownList 來顯示資料,或是做 CRUD 的操作,
感念自己曾經也菜過XD(雖然現在菜味還是很重),寫個簡單的範例,提供給網友推敲的空間。
同樣搭配 北風資料庫
版面配置:
aspx
感念自己曾經也菜過XD(雖然現在菜味還是很重),寫個簡單的範例,提供給網友推敲的空間。
同樣搭配 北風資料庫
版面配置:
aspx
DropDownList 在作 DataBind 的時候發生 Exception
我們在開發 ASP.NET 時,因為大部分資料都是從資料庫中讀取出來的,所以很常見的情況是在用 DropDownList 時,其選項(ListIem)是透過資料庫 DataBinding 過來的,而在建置管理介面的「編輯」頁面時,DropDownList 都要預設選中資料庫中的那個項目!
不過很不幸的,接到手的資料庫不見得是當初我們規劃的,常會接到那中資料庫表格間完全沒有設定關連的設計,導致資料庫中的內容發生「不一致」的情況。
舉個例子來說好了,假設有個「會員資料」表格中有個欄位是「會員等級」,而「會員等級」是定義在另一個表格,這兩個表格就要設定關連,但是「前人」卻沒有設定 Foreign Key,導致「某人」可能手動更新了「會員等級」資料表中的主鍵內容,造成在「會員表格」中關連不到「會員等級」的情況!
像是這樣的情況,使用 DropDownList 做 DataBinding 的時候就會發生 Exception,而且還沒辦法在 Code Behind 的地方做 try/catch 的動作!想必造成不少人困擾!!
而我們的解決方法是自己寫一個 WebControl 類別,且直接繼承 System.Web.UI.WebControls.DropDownList 類別,並覆寫(overwrite) PerformDataBinding 方法!
public class DropDownList2 : DropDownList
{
protected override void PerformDataBinding(System.Collections.IEnumerable dataSource)
{
// 過濾掉 DropDownList 在 DataBinding 時可能會發生的 Exception 問題! // 如果 Exception 發生,預設會選取第一個下拉選項! try
{
base.PerformDataBinding(dataSource);
}
catch (ArgumentOutOfRangeException ex)
{
ArgumentOutOfRangeException o = ex;
}
}
}
以上這段程式碼就會讓 DropDownList 在做 DataBinding 時不會發生 Exception 了,如果發生 base.PerformDataBinding() 執行失敗的時候,預設是會選中下拉選單中的「第一個選項」。
最後,要在 web.config 中註冊這個 WebControl 讓頁面可以使用,這邊就有兩種用法了:
1. 將元件註冊到 web.config 並自訂 tagPrefix
如果你是將這個 WebControl 放在 App_Code 目錄下的話,要用以下的方式宣告:
<configuration>
<system.web>
<pages>
<controls>
<add tagPrefix="Doggy" namespace="Doggy.UI.WebControls"assembly="App_Code, Doggy.UI.WebControls.DropDownList2"/>
</controls>
</pages>
</system.web>
</configuration>
至於使用方法會像如下範例:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>DropDownList2 測試案例</title>
</head>
<body>
<form id="form1" runat="server">
<h1>測試案例 1 : DropDownList2</h1>
<Doggy:DropDownList2 runat="server" ID="DropDownList1">
<asp:ListItem Text="List 1" Value="1"></asp:ListItem>
<asp:ListItem Text="List 2" Value="2"></asp:ListItem>
<asp:ListItem Text="List 3" Value="3"></asp:ListItem>
<asp:ListItem Text="List 4" Value="4"></asp:ListItem>
<asp:ListItem Text="List 5" Value="5"></asp:ListItem>
</Doggy:DropDownList2>
</form>
</body>
</html>
2. 第二種比較狠一點,直接將內建的 DropDownList 都換成我們的 DropDownList2
透過 tagMapping 的方式,可以將整個網站內用到 <asp:DropDownList> 的 WebControl 都改用我們自訂的 DropDownList2 類別!
<configuration>
<system.web>
<pages>
<tagMapping>
<add tagType="System.Web.UI.WebControls.DropDownList"
mappedTagType="Doggy.UI.WebControls.DropDownList2" />
</tagMapping>
</pages>
</system.web>
</configuration>
至於使用的方法,就跟用 <asp:DropDownList> 完全一模一樣啦!
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>DropDownList2 測試案例</title>
</head>
<body>
<form id="form1" runat="server">
<h1>測試案例 1 : DropDownList2</h1>
<asp:DropDownList runat="server" ID="DropDownList1">
<asp:ListItem Text="List 1" Value="1"></asp:ListItem>
<asp:ListItem Text="List 2" Value="2"></asp:ListItem>
<asp:ListItem Text="List 3" Value="3"></asp:ListItem>
<asp:ListItem Text="List 4" Value="4"></asp:ListItem>
<asp:ListItem Text="List 5" Value="5"></asp:ListItem>
</asp:DropDownList>
</form>
</body>
</html>
避免 DropDownList 指定無效的 SelectedValue
去年有寫過一篇 DropDownList 在作 DataBind 的時候發生 Exception,是還蠻實用的,不過原則上來說程式盡量不要讓他發生 Exception 比較好,因為丟出例外事件是十分消耗系統資源的,今天另外分享另一個小技巧。
如果原本指定給 SelectedValue 的程式長這樣:
DropDownList1.SelectedValue = Request.QueryString["ID"];
建議可以改成這樣:
string id = Request.QueryString["ID"]; ListItem item = DropDownList1.Items.FindByValue(id); if (item != null) { DropDownList1.SelectedValue = id; }
你也可以將這段程式包成一個 Helper 靜態方法,方便在專案中使用
訂閱:
文章 (Atom)