none
請問Listbox 與 二維陣列 RRS feed

  • 問題

  • 請教先進們:

    有一個二維陣列, 第一維想當成 ListBox 的 DisplayMember, 第二維想當成 ListBox 的 ValueMember.

    還有可能隨時由 User 按 Form 上的 Button 加入一組資料(是不是也要先加入原陣列呢)

    在 ListBox 點選(單選)之後再由 Form 上的 Button 刪除該項目, 是不是也要連陣列也要刪除呢?

    不知該如何做?

    以上問題好比 Outlook Express 新增信件時要挑選收件人一樣

     

    用 Array 是恰當的做法嗎?

    因為, 要顯示在 ListBox 內的資料是由 Web Service 傳過來的 DataSet

    只是想將 DataSet 先轉換成陣列再丟給 ListBox

     

    Web Service 是自己做的, 有想過用 DataReader 傳到前端, 但是

    Web Service 不是何時才可以 Close DataReader, 所以才傳 DataSet

    是不是要等到 ListBox 把 DataReader 加完之後再回傳給 Web Service 說:DataReader 不用了, 你可以關了.  這時 Web Service 上的 DataReader 還存在嗎, 可以關嗎?

    2006年10月9日 上午 07:38

解答

  • Dear 沒人性:

    我會採用Object的方式來解決這個問題!
    下列是我寫的一段Sample Code,你參考一下,若有問題,大家再來討論

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;

    using System.Data;
    using System.Data.OleDb;
    using System.Data.SqlClient;
    using System.Collections;

    namespace ClickOnceSample
    {
        public partial class Form1 : Form
        {

            protected ArrayList ListObjects = new ArrayList();

            public Form1()
            {
                InitializeComponent();
            }

            private void Form1_Load(object sender, EventArgs e)
            {
                for (int i = 0; i <= 10; i++)
                {
                    ListObject item = new ListObject();
                    item.ItemDisplay = "選項" + i.ToString();
                    item.ItemValue = i.ToString();

                    ListObjects.Add(item);
                }

                this.listBox1.DataSource = ListObjects;
                this.listBox1.DisplayMember = "ItemDisplay";
                this.listBox1.ValueMember = "ItemValue";
                this.listBox1.Refresh();
            }

            private void button1_Click(object sender, EventArgs e)
            {
                ListObject item = new ListObject();
                item.ItemDisplay = "額外選項 101";
                item.ItemValue = "101";
               
                ListObjects.Add(item);

                this.listBox1.DataSource = null;

                this.listBox1.DataSource = ListObjects;
                this.listBox1.DisplayMember = "ItemDisplay";
                this.listBox1.ValueMember = "ItemValue";
                this.listBox1.Refresh();
            }

            protected class ListObject : ICollection
            {
                private string m_Display = string.Empty;
                private string m_Value = string.Empty;

                public string ItemDisplay
                {
                    get { return m_Display; }
                    set { m_Display = value; }
                }

                public string ItemValue
                {
                    get { return m_Value; }
                    set { m_Value = value; }
                }

                #region ICollection Members

                public void CopyTo(Array array, int index)
                {
                    throw new Exception("The method or operation is not implemented.");
                }

                public int Count
                {
                    get { throw new Exception("The method or operation is not implemented."); }
                }

                public bool IsSynchronized
                {
                    get { throw new Exception("The method or operation is not implemented."); }
                }

                public object SyncRoot
                {
                    get { throw new Exception("The method or operation is not implemented."); }
                }

                #endregion

                #region IEnumerable Members

                public IEnumerator GetEnumerator()
                {
                    throw new Exception("The method or operation is not implemented.");
                }

                #endregion
            }

            private void button2_Click(object sender, EventArgs e)
            {
                ListObjects.RemoveAt(ListObjects.Count-1);

                this.listBox1.DataSource = null;

                this.listBox1.DataSource = ListObjects;
                this.listBox1.DisplayMember = "ItemDisplay";
                this.listBox1.ValueMember = "ItemValue";
                this.listBox1.Refresh();

            }

        }
    }

    2006年10月12日 下午 06:50