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;

}