2013-12-12 65 views
-1

我有兩個列表框命名 ListBox1的和listbox2移動項目,反之亦然

listBox1.DataSource = dt1; 
listBox1.DisplayMember = "EmployeeName"; 
listBox1.ValueMember = "EmployeeId"; 
listBox2.DataSource = dt2; 
listBox2.DisplayMember = "EmployeeName"; 
listBox2.ValueMember = "EmployeeId"; 

現在我想移動從ListBox1中到listbox2項目,反之亦然

我試過,但它顯示數據源分配時異常無法更改值

異常「設置DataSource屬性時無法修改Items集合。」

回答

0

當您設置列表框的數據源時,列表框必須完全依賴於該數據源。你不能直接更改列表框中的項目,因爲如果你這樣做,列表框和它的數據源之間會有差異。您需要在數據源之間而不是在列表框之間傳輸條目。基本上,你需要說:

int index = listBox1.SelectedIndex; //Or wherever else you want to get the index from. 
dt2.Add(dt1[index]); 
dt1.RemoveAt(index); 

listBox1.dataSource = null; 
listBox1.dataSource = dt1; 

listBox2.dataSource = null; 
listBox2.dataSource = dt2; 

它可能不是明智的做法在這種情況下使用的數據源,因爲反正只要你傳遞兩個列表框之間的事情,該數據源將需要重新設置。這可能是明智的使用類似:

foreach(string current in dt1) 
     listbox1.Items.Add(current); 

foreach(string current in dt2) 
     listbox2.Items.Add(current); 

然後當你轉讓的項目,只是去:

listbox2.Items.Add(listbox1.Items[index]); 
listbox1.Items.Remove(index); 
-1

雖然我在這裏模糊猜測,但我想這個問題與您的DataSources有關。如果我理解你的問題,你想在列表框之間而不是在數據源之間移動條目?通過DataSource,您可以鏈接到例如數據庫中的表格。如果您有兩個不同的數據源,則它們可能會鏈接到兩個不同的表。在這些表之間移動對象(通過你的列表框)將是一個壞主意,不是嗎?也許嘗試通過像DataSource.ToList()這樣的東西來填充列表框。因此您可以釋放與表格的連接,並在完成移動項目時將您的列表框的內容寫入相應的數據源。

我希望能有所幫助。