PDA

View Full Version : Hỏi về ListBox ?



iken
22-09-2004, 05:06
Em có 2 cái listbox là lstA và lstB

- cái lstA em add data vào sẳn là

lstA.Items.Add("Field0");
lstA.Items[0].Value = "0";

lstA.Items.Add("Field1");
lstA.Items[1].Value = "1";

lstA.Items.Add("Field2");
lstA.Items[2].Value = "2";

lstA.Items.Add("Field3");
lstA.Items[3].Value = "3";

lstA.Items.Add("Field4");
lstA.Items[4].Value = "4";

Tạo 2 button là cmdAdd và cmdDelete

- Trong hàm cmdAdd :
// add data từ lstB sang lstA and delete data lstB selected

int j=lstA.Items.Count;
for(int i=0; i<lstB.Items.Count;i++)
{
if(lstB.Items[i].Selected == true)
{
lstA.Items.Add(lstB.Items[i].Text);
lstA.Items[j].Value = lstB.Items[i].Value;
j = j++;
}
}

while(lstB.SelectedIndex != -1)
lstB.Items.Remove(lstB.SelectedItem);

Trong hàm cmdDelete
// add data từ lstA sang lstB and delete data lstA selected

int j=lstB.Items.Count;
for(int i=0; i<lstA.Items.Count;i++)
{
if(lstA.Items[i].Selected == true)
{
lstB.Items.Add(lstA.Items[i].Text);
lstB.Items[j].Value = lstA.Items[i].Value;
}
}
while(lstA.SelectedIndex != -1)
lstA.Items.Remove(lstA.SelectedItem);

Chạy ok hết nó bị 1 lỗi là khi add từ lstA sang lstB và ngược lại hay bị sót record. Mấy huynh chỉ giáo giúp

jay
09-10-2004, 17:56
sao bạn ko dùng 1 vòng lặp while là đủ rùi? cần gì cái đống for ở trên


while (lstB.SelectedIndex >= 0)
{
lstA.Items.Add(new ListItem(lstB.SelectedItem.Text, lstB.SelectedItem.Value));
lstB.Items.Remove(lstB.SelectedItem);
}

KEM_WALL
10-10-2004, 08:17
giải thích thêm 1 chút cho iken hiểu là tại sao sót record. vd bạn có 1 list 5 items như sau
0 ab
1 bc (x)
2 cd (x)
3 de
4 ef
bạn select cái số 1 và 2 (có dấu x)
move qua bên listbox2. khi vòng for bạn del item số 1 (ứng với vòng lặp for chạy i = 1), thì list box còn lại như sau
0 ab
1 cd (x)
2 de
3 ef
* chú ý kĩ, item bạn select trước đó là "cd" đã chuyển từ index 2 -> 1, mà vòng lặp for cuả bạn lại chạy tiếp i = 2, do đó sót thằng cd :D

Cận
10-10-2004, 10:54
vì thế bạn nên dùng while thay cho for. :)