在Windows Form 中可以繫結非bool型別資料的CheckBox控制元件 (轉)

amyz發表於2007-08-16
在Windows Form 中可以繫結非bool型別資料的CheckBox控制元件 (轉)[@more@]


CheckBox的checked屬性不能直接繫結非bool型的資料,因此作了下面這個擴充套件。

使用的時候,需要先設定兩個屬性
 CheckedValue ----選中時代表的值
 UnCheckedValue ----未選中時代表的值

例如
 CheckedValue = “男”
 UnCheckedValue = “女”
 
然後繫結資料到bindText屬性

例如:
enjoyCheckBox1.DataBindings.Add("BindText",ds,"cname");


原始碼:
using System;
using System.Collections;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System..Forms;

namespace Enjoy.Interface.Control
{
 ///


 /// EnjoyCheckBox 的摘要說明。
 ///

 public class EnjoyCheckBox : System.Windows.Forms.CheckBox
 {
 ///
 /// 必需的設計器變數。
 ///

 private System.ComponentModel.Container components = null;

 public EnjoyCheckBox()
 {
 // 該是 Windows.Forms 窗體設計器所必需的。
 InitializeComponent();

 // TODO: 在 InitializeComponent 呼叫後新增任何初始化

 }

 ///


 /// 清理所有正在使用的資源。
 ///

 protected overr void Dispose( bool disposing )
 {
 if( disposing )
 {
 if(components != null)
 {
 components.Dispose();
 }
 }
 base.Dispose( disposing );
 }

 #region 設計器生成的程式碼
 ///


 /// 設計器支援所需的方法 - 不要使用程式碼編輯器
 /// 修改此方法的內容。
 ///

 private void InitializeComponent()
 {
 components = new System.ComponentModel.Container();
 }
 #endregion

 private m_BindText;
 private object m_CheckedValue;
 private object m_UnCheckedValue;
 ///


 /// 繫結的屬性
 ///

 public object BindText
 {
 get
 {
 return m_BindText;
 }
 set
 {
 m_BindText = value;
 if ((m_BindText!=null)&&(CheckedValue!=null)&&(UnCheckedValue!=null))
 {
 if (m_BindText.Equals(CheckedValue))
 {
 if (!this.Checked)
 {
 this.Checked = true;
 }
 }
 if (m_BindText.Equals(UnCheckedValue))
 {
 if (this.Checked)
 {
 this.Checked = false;
 }
 }
 }
 }
 }

 ///


 /// 選中時代表的(資料庫中的)值
 ///

 public object CheckedValue
 {
 get
 {
 return m_CheckedValue;
 }
 set
 {
 m_CheckedValue = value;
 }
 }

 ///


 /// 未選中時代表的(資料庫中的)值
 ///

 public object UnCheckedValue
 {
 get
 {
 return m_UnCheckedValue;
 }
 set
 {
 m_UnCheckedValue = value;
 }
 }
 protected override void OnCheckedChanged(EventArgs e)
 {
 base.OnCheckedChanged(e);
 if (this.Checked)
 {
 BindText = CheckedValue;
 }
 if (!this.Checked)
 {
 BindText = UnCheckedValue;
 }
 }


 }
}

初次發表,有什麼問題或者建議請回復。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752019/viewspace-962644/,如需轉載,請註明出處,否則將追究法律責任。

相關文章