C# listbox DataSource數據綁定--一年半以前的bug


listbox使用DataSource進行數據綁定和刪除,大家肯定都會,

寫這個隨筆只是因為。。。。這是一年半以前剛進公司的我遺留的bug,現在看看當時竟然沒有解決 - -

現在寫個測試程序,寫個隨筆記錄一下,當時萌新的我。。。

首先聲明了一個類,要綁定的類型。

//聲明一個全局集合
public List<BindingType> bi;
//聲明一個綁定類型的類
public class BindingType
{
    public string Name { get; set; }//名稱
    public DateTime Time { get; set; }//時間
}

然后兩個方法,一個添加,一個刪除。問題就出現在刪除當中。

 private void button1_Click(object sender, EventArgs e)
        {
            //初始化添加數據
            bi = new List<BindingType>()
            {
                new BindingType { Name=Guid.NewGuid().ToString("N"),Time=DateTime.Now},
                new BindingType { Name=Guid.NewGuid().ToString("N"),Time=DateTime.Now},
                new BindingType { Name=Guid.NewGuid().ToString("N"),Time=DateTime.Now},
                new BindingType { Name=Guid.NewGuid().ToString("N"),Time=DateTime.Now},
            };

            //綁定到listbox
            HashSet<BindingType> hs = new HashSet<BindingType>(bi);
            BindingSource bs = new BindingSource();
            bs.DataSource = hs;
            listBox1.DataSource = bs;
            listBox1.DisplayMember = "Name";
        }

        private void button2_Click(object sender, EventArgs e)
        {
            //刪除集合選中數據
            foreach (BindingType item in listBox1.SelectedItems)
            {
                bi.Remove(item);
            }

            //重新綁定新的集合  如果此處bi這個集合數據為空就會出現顯示錯誤
            HashSet<BindingType> hs = new HashSet<BindingType>(bi);
            BindingSource bs = new BindingSource();
            bs.DataSource = hs;
            listBox1.DataSource = bs;
            listBox1.DisplayMember = "Name";
        }

 

左邊是添加效果圖,右邊是全部刪除之后會提示綁定的錯誤。

      

 

沒有使用 Items 進行數據綁定是因為需要取綁定中的數據。

當時記得弄了大半天都沒有解決,最近剛好有個新的接口接入需要類似的功能,導致這個問題再次出現。。。

 想了一下使用 Remove,Clear是沒辦法刪除的因為屬於綁定數據,然后試試給他賦值一個新的 BindingSource。

            //刪除集合選中數據
            foreach (BindingType item in listBox1.SelectedItems)
            {
                bi.Remove(item);
            }

            if (bi.Count < 1)//結合沒有數據
            {
                //重新new
                BindingSource bs = new BindingSource();
                listBox1.DataSource = bs;
            }
            else
            {
                //重新綁定新的集合  如果此處bi這個集合數據為空就會出現顯示錯誤
                HashSet<BindingType> hs = new HashSet<BindingType>(bi);
                BindingSource bs = new BindingSource();
                bs.DataSource = hs;
                listBox1.DataSource = bs;
                listBox1.DisplayMember = "Name";
            }

 

到此。。。算是解決了不會顯示錯誤,然后說看看這個DataSource是個什么東西,結果發現 “默認為null” 這幾個字。。。。瞬間自己都笑了,

直接 listBox1.DataSource = null; 

當時的我還真的萌新。。這么簡單的問題我竟然沒有解決。。。活到老,學到老。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM