listbox使用DataSource進行數據綁定和刪除,大家肯定都會,寫這個隨筆只是因為。。。。這是一年半以前剛進公司的我遺留的bug,現在看看當時竟然沒有解決 - -現在寫個測試程式,寫個隨筆記錄一下,當時萌新的我。。。首先聲明瞭一個類,要綁定的類型。 //聲明一個全局集合 public Lis ...
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;
當時的我還真的萌新。。這麼簡單的問題我竟然沒有解決。。。活到老,學到老。