2nd Jan, 2008

CheckBox 2 way binding

係 ASP.NET 度要 bind CheckBox control 入面既 Checked property, MySQL 同 Oracle 都唔可能直接咁 bind, 要做到既話可以參考:

http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=102526

如果 Eval 都還可, 用個更簡單既方法黎 set Checked property:

Checked=’<%# Convert.ToBoolean((DataBinder.Eval(Container.DataItem, "banned"))) %>’

之但係 Bind 就真係麻煩了, 你要好似上面條 link 咁攪一大餐, 冇法, Microsoft 實在太霸了, 佢地設計 Control 時唔會考慮用落去其他 database 度, 而 C# 入面 property 係冇得 override (C++ 同 java 都冇, 所以冇法)。

不過總有其他辦法既, 其中一個就係承繼 CheckBox control, 令到 Checked 受其他 database 既 Integer value:

MySQLCheckBox.ascx:
[geshi lang=ASP]
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="MySQLCheckBox.ascx.cs" Inherits="MySQLCheckBox" %>

[/geshi]

MySQLCheckBox.ascx.cs:
[geshi lang=C]
using System;
using System.ComponentModel;

public partial class MySQLCheckBox : System.Web.UI.UserControl
{
[Bindable(true)]
public Int32 Checked
{
get
{
return (CheckBox1.Checked) ? 1 : 0;
}
set
{
CheckBox1.Checked = (value == 1);
}
}
}
[/geshi]

然後將個 user control 應用去落去你個 page 度, 最簡單就係由 Tools 度拉落去你個 page 既 design view 度, 然後 set data binding, 又或者:

[geshi lang=ASP]
<%@ Register TagName="MySQLCheckBox " Src="~/MySQLCheckBox.ascx"
TagPrefix="neo" %>

/>
[/geshi]

MySQL database 想bind Checked property 就只需要用 Integer data type 就可以了, 至於用其他 data type 亦係差多。

好處就係你段 code 點 reuse 都得, 同埋清楚好多。不過因為 Microsoft 既問題而咁樣做 user control, 真係十隻手指都數唔晒, 唉!

相關文章

你的回應






Your response: