【原創】Winform下拉框自動選擇實現

來源:互聯網
上載者:User

適用環境:Winform開發,VS2008開發工具

問題描述:

  1. 有一系列產品,每個產品都有唯一產品ID,產品名稱。
  2. 需要綁定產品到下拉框(ComboBox)中,由於Winform的下拉框控制項,不像Web開發中的下拉框控制項一樣,能夠直接添加兩個元素到每一項(Value和Text)。但是它允許直接添加object對象項,所以反而更靈活。
  3. 在下拉框中需要顯示產品資訊,並且不只是簡單顯示名稱,需要做一些特別的處理,因此沒法使用。

cboxProduct.DisplayMember = "ProductName";

    cboxProduct.ValueMember = "ProductId";

cboxProduct.DataSource = dataTable;                //Product Data Source

  4.  要能夠根據產品資訊,自動選擇到特定產品。

解決思路:

  1. 首先我們可以定義一個產品資訊類,包含產品的各種資訊。在這裡我們必須要的資訊可以作為建構函式的參數,使得執行個體化產品類必須設定這些資訊。同時對於綁定下拉框資訊話,我們還可以提取一個公有的類,專門用於綁定下拉框時使用,因為大多數情況下,我們一般使用下拉框只需要綁定兩類資訊。但是資訊的資料格式卻是不定的,所以可以考慮泛型。
  2. 採用泛型建立公有下拉框資料類,包含兩個屬性:Value和Text。
  3. 由於Value屬性作為我們下拉框索引值,必須是唯一的,所以在判斷下拉框資料項目是否相同時,可以通過判斷是否Value是否相同來確定(必須說明的是在這裡我們並沒有強制判斷Value值是否唯一,你可以在綁定資料時判斷),判斷兩個對象是否相等的方法,可以想到考慮重寫Equal方法來實現。

下面我們來看一個實際的例子實現吧!

執行個體代碼:

  1. 建立一個產品類型類(ProductType類),由於產品類型可以是一個無限級分類(某一產品類型下的子產品類型層次不定,可能會很多層子類型),在下拉框顯示產品類型時,需要區分父子產品類型。產品類型類具體代碼如下:

class ProductType<T, TK>

    {

        public ProductType(T value, TK text)

        {

            _value = value;

            _text = text;

        }

 

        private T _value;

        /// <summary>

        /// 值

        /// </summary>

        public T Value

        {

            get { return _value; }

            set { _value = value; }

        }

 

        private TK _text;

        /// <summary>

        /// 顯示值

        /// </summary>

        public TK Text

        {

            get { return _text; }

            set { _text = value; }

        }

 

        public override string ToString()

        {

            return _text.ToString();

        }

 

        public override bool Equals(object obj)

        {

            return ((ProductType<T, TK>)obj).Value.Equals(_value);

        }

    }

  1. 建立一個測試表單,並添加一個下拉框控制項(ComboBox),命名為cboxProductType。綁定產品類型資料到下拉框。迴圈綁定產品類型,並遞迴遍曆其子產品類型。實現代碼如下:

private void BindingProductType(int parentProductTypeId, string splitStr)

        {

            var dataSource = bllProductType.GetList(" parentId=" + parentProductTypeId).Tables[0];

            foreach (DataRow dataRow in dataSource.Rows)

            {

                var productTypeId = Convert.ToInt32(dataRow["productTypeId"]);

                cboxProductType.Items.Add(new ProductType()<int, string>(productTypeId,

                                                                   splitStr + dataRow["productTypeName"]));

                BindingProductType(productTypeId, splitStr + @"--|");

            }

        }

  1. 提供了某一個產品類型的ID後,我們使下拉框自動選擇到該ID的產品類型,可以使用cboxProductType.SelectedItem屬性進行設定。具體方法參看代碼:

ProductType<int, string> productType = new ProductType(productTypeId, "");

    cboxProductType.SelectedItem = productType;

由於產品類型ID是唯一值,我們在產品類型類中比較時也只與Value值相關,因此在執行個體化ProductType類時,無須提供Text屬性值,因為Text屬性值對於我們判斷產品類型是否相等無關。(這種情況主要使用在編輯資料時,根據已有資料進行填充和選擇。)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.