bool IPostBackDataHandler.LoadPostData(
string postDataKey, NameValueCollection postCollection)

{
// 處理被選中的value
string[] postedItems = postCollection.GetValues(postDataKey);
bool returnValue =
false;
// 若是沒有被選中的項
if (postedItems ==
null)

{
if (
this.SelectedIndex != -1)

{

returnValue =
true;

}
// 處理客戶端的變化去
goto HandleClientChanges;

}
// 若是SelectionMode是Single模式
if (
this.SelectionMode == ListSelectionMode.Single)

{
if (postedItems !=
null)

{
// 處理postedItems的第一項,其是被選中的
int index =
this.FindByValueInternal(postedItems[0]);
if (
this.SelectedIndex != index)

{
// 發生變化了
this.SelectedIndex = index;

returnValue =
true;

}

}

}
// 不然SelectionMode是Multiple模式
// 新的被選中的Length
int numberOfItemsSelected = postedItems.Length;
// 原來的被選中的索引集合

ArrayList oldSelectedItems =
this.SelectedIndicesInternal;
// 新集合,Length爲新的被選中的Length

ArrayList currentlySelectedItems =
new ArrayList(numberOfItemsSelected);
// 把全部新的被選中的value塞進來
for (
int i = 0; i < numberOfItemsSelected; i++)

{

currentlySelectedItems.Add(
this.FindByValueInternal(postedItems[i]));

}
// 原來被選中的Length
int numberOfSelectedItems = 0;
if (oldSelectedItems !=
null)

{

numberOfSelectedItems = oldSelectedItems.Count;

}
// 原來的和新的被選中的是否相同
if (numberOfItemsSelected == numberOfSelectedItems)

{
for (
int j = 0; j < numberOfItemsSelected; j++)

{
int oldSelect = Convert.ToInt32(currentlySelectedItems[j]);
int currentSelect = Convert.ToInt32(oldSelectedItems[j]);
if (oldSelect != currentSelect)

{
// 標記該項被選中
this.Items[j].Selected =
true;

returnValue =
true;

}

}

}
else

{
// 原來的和新的被選中的發生了變化(原來的和新的被選中的Length不一樣就確定是發生變化了)

returnValue =
true;

}
// 有變化,從新設置Selected(設爲新的)
if (returnValue)

{
this.SelectInternal(currentlySelectedItems);

}
// 這部分處理客戶端的變化(項的增減)

HandleClientChanges:
// 從項集合中刪除項
// 處理客戶端刪除項操做
string itemsRemoved = postCollection[
this.HFItemsRemoved];
string[] itemsRemovedCol = itemsRemoved.Split(',');
if (itemsRemovedCol !=
null)

{
if ((itemsRemovedCol.Length > 0) && (itemsRemovedCol[0] != ""))

{
for (
int i = 0; i < itemsRemovedCol.Length; i++)

{

ListItem itemToRemove =
this.Items.FindByValue(itemsRemovedCol[i]);
// 從集合中刪除該項

Items.Remove(itemToRemove);

}

returnValue =
true;

}

}
// 處理客戶端增長項操做
string itemsAdded = postCollection[
this.HFItemsAdded];
string[] itemsCol = itemsAdded.Split(',');
if (itemsCol !=
null)

{
if ((itemsCol.Length > 0) && (itemsCol[0] != ""))

{
// counter 用於肯定返回值是什麼
int counter = -1;
for (
int i = 0; i < itemsCol.Length; i++)

{
string buf = itemsCol[i];
string[] itemsTokens = buf.Split('|');
// 經過value檢查是否已集合中已有該value

ListItem it =
this.Items.FindByValue(itemsTokens[1]);
if (it ==
null)

{
string text = itemsTokens[0];
string id = itemsTokens[1];

ListItem item =
new ListItem(text, id);

Items.Add(item);
// 更新 counter

counter++;

}

}

returnValue = counter > -1 ?
true :
false;

}

}
return returnValue;

}