關於.NET中WinForms裡面的ListBox實現資料繫結的解決方法 (轉)

gugu99發表於2007-08-15
關於.NET中WinForms裡面的ListBox實現資料繫結的解決方法 (轉)[@more@]

在中,WINDOW FORMS下面的LIST BOX在開發時,如果採用其本身的資料繫結,繫結完以後就不能更改ListBox的Items了.而實際開發中卻經常會碰到要改變的情況,在這裡我提供了一重方法.採用開發繼承ListBox控制元件的自定義控制元件.然後在裡面提供兩個SortedList類的屬性,一個可以存放ID,一個存放TEXT,這樣就解決了上面說的問題!!

控制元件的程式碼如下:

using System;
using System.Collections;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System..Forms;

namespace FlowManage
{
 ///


 /// SysListBox 的摘要說明。
 ///

 public class SysListBox : System.Windows.Forms.ListBox
 {
 private SortedList _sl=new SortedList();
 ///
 /// 必需的設計器變數。
 ///

 private System.ComponentModel.Container components = null;

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

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

 }

 ///


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

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

 public SortedList DataValues
 {
 get
 {
 return _sl;
 }
 set
 {
 _sl=value;
 }
 }
 public void AddItem( key,object text)
 {
 if(this.DataValues==null)
 {
 this.DataValues=new SortedList(); 
 }
 this.DataValues.Add(key,text);
 }
 public void RemoveItem(int index)
 {
 this.DataValues.RemoveAt(index);
 }
 public void RemoveItem()
 {
 this.DataValues.Clear();
 }
 public  void BoundList()
 {
 this.Items.Clear();
 if(this.DataValues!=null)
 {
 this.BeginUpdate();
 for(int i=0;i {
 this.Items.Add(this.DataValues.GetByIndex(i).ToString());
 }
 this.EndUpdate();
 }
 }
 #region Component Designer generated code
 ///


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

 private void InitializeComponent()
 {
 components = new System.ComponentModel.Container();
 }
 #endregion
 }
}
而在呼叫這個控制元件時的程式碼如下:

string mkey=this.listCanSel.DataValues.GetKey(this.listCanSel.edIndex).ToString();
 string mtext=this.listCanSel.DataValues.GetByIndex(this.listCanSel.SelectedIndex).ToString(); 
  this.listSel.AddItem(mkey,mtext);
 this.listCanSel.RemoveItem(this.listCanSel.SelectedIndex);

 this.listSel.Items.Add(mtext);
 this.listCanSel.Items.RemoveAt(this.listCanSel.SelectedIndex);

以上只是個人使用中的拙見,歡迎大家提出更好的解決辦法!

 


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

相關文章