增加了CheckBoxList,CheckBoxList与ListBox之间的数据传递
using System;
using System.Web.UI.WebControls;
namespace PowerSelect


{

/**//// <summary>
/// PowerSelect 的摘要说明:用于两个控件间的数据选择传递;目前只做到ListBox,CheckBoxList;以后根据需要会扩展。
/// </summary>
public class PowerSelect

{
//源控件
object m_sourceObj;
//目标控件
object m_desObj;
//选择模式:1,single-select ; 2, multi-select
int m_selMode;
public PowerSelect(ListBox listBoxSource,ListBox listBoxDes)

{
m_sourceObj = listBoxSource;
m_desObj = listBoxDes;
m_selMode = 1;
}
public PowerSelect(ListBox listBoxSource,ListBox listBoxDes,int selMode)

{
m_sourceObj = listBoxSource;
m_desObj = listBoxDes;
m_selMode = selMode;
}
public PowerSelect(CheckBoxList listBoxSource,CheckBoxList listBoxDes)

{
m_sourceObj = listBoxSource;
m_desObj = listBoxDes;
m_selMode = 1;
}
public PowerSelect(CheckBoxList listBoxSource,CheckBoxList listBoxDes,int selMode)

{
m_sourceObj = listBoxSource;
m_desObj = listBoxDes;
m_selMode = selMode;
}
public PowerSelect(CheckBoxList listBoxSource,ListBox listBoxDes)

{
m_sourceObj = listBoxSource;
m_desObj = listBoxDes;
m_selMode = 1;
}
public PowerSelect(CheckBoxList listBoxSource,ListBox listBoxDes,int selMode)

{
m_sourceObj = listBoxSource;
m_desObj = listBoxDes;
m_selMode = selMode;
}
public PowerSelect(ListBox listBoxSource,CheckBoxList listBoxDes)

{
m_sourceObj = listBoxSource;
m_desObj = listBoxDes;
m_selMode = 1;
}
public PowerSelect(ListBox listBoxSource,CheckBoxList listBoxDes,int selMode)

{
m_sourceObj = listBoxSource;
m_desObj = listBoxDes;
m_selMode = selMode;
}
public PowerSelect(object objSource,object objDes,int selMode)

{
m_sourceObj = objSource;
m_desObj = objSource;
m_selMode = selMode;
}
public void Add()

{
if (this.m_sourceObj is ListBox && this.m_desObj is ListBox)

{
this.AddListItem((ListBox)m_sourceObj,(ListBox)m_desObj);
}
if (this.m_sourceObj is CheckBoxList && this.m_desObj is CheckBoxList)

{
this.AddListItem((CheckBoxList)m_sourceObj,(CheckBoxList)m_desObj);
}
if (this.m_sourceObj is CheckBoxList && this.m_desObj is ListBox)

{
this.AddListItem((CheckBoxList)m_sourceObj,(ListBox)m_desObj);
}
if (this.m_sourceObj is ListBox && this.m_desObj is CheckBoxList)

{
this.AddListItem((ListBox)m_sourceObj,(CheckBoxList)m_desObj);
}
}
public void Remove()

{
if (this.m_desObj is ListBox)

{
this.RemoveListItem((ListBox) m_desObj);
}
else if (this.m_desObj is CheckBoxList)

{
this.RemoveListItem((CheckBoxList) m_desObj);
}
}
private void ClearDes(ListBox objListBox)

{
objListBox.Items.Clear();
}
private void ClearDes(CheckBoxList objListBox)

{
objListBox.Items.Clear();
}
private string[] GetSelectedListBoxItems()

{

string[] strReturn =
{"",""};
ListBox objListBox = (ListBox)this.m_sourceObj;
strReturn[0] = objListBox.SelectedItem.Text;
strReturn[1]= objListBox.SelectedItem.Value;
return strReturn;
}
private string[] GetSelectedCheckListBoxItems()

{

string[] strReturn =
{"",""};
CheckBoxList objListBox = (CheckBoxList)this.m_sourceObj;
strReturn[0] = objListBox.SelectedItem.Text;
strReturn[1]= objListBox.SelectedItem.Value;
return strReturn;
}
private bool IsReduplicatedItem(ListBox objList,string strValue)

{
for (int i=0; i< objList.Items.Count; i++)

{
if (objList.Items[i].Value.ToString() == strValue)
return true;
}
return false;
}
private bool IsReduplicatedItem(CheckBoxList objList,string strValue)

{
for (int i=0; i< objList.Items.Count; i++)

{
if (objList.Items[i].Value.ToString() == strValue)
return true;
}
return false;
}
private bool IsSelected(ListBox objList)

{
if (objList.SelectedIndex<0)
return false;
else
return true;
}
private bool IsSelected(CheckBoxList objCheckList)

{
if (objCheckList.SelectedIndex<0)
return false;
else
return true;
}
private void AddListItem(ListBox objListSource,ListBox objList)

{
if (!IsSelected(objListSource))

{
return;
}
string strName = GetSelectedListBoxItems()[0];
string strValue = GetSelectedListBoxItems()[1];
if (m_selMode == 1)

{
ClearDes(objList);
objList.Items.Add(new ListItem(strName,strValue));
}
else

{
if (objListSource.SelectionMode == ListSelectionMode.Multiple)

{
for (int i = 0; i < objListSource.Items.Count; i++)

{
if(objListSource.Items[i].Selected && (!IsReduplicatedItem(objList,objListSource.Items[i].Value.ToString())))

{
objList.Items.Add(new ListItem(objListSource.Items[i].Text,objListSource.Items[i].Value.ToString()));
}
}
}
else

{
if (!IsReduplicatedItem(objList,strValue))

{
objList.Items.Add(new ListItem(strName,strValue));
}
}
}
}
private void AddListItem(CheckBoxList objCheckedListSource,CheckBoxList objCheckedList)

{
if (!IsSelected(objCheckedListSource))

{
return;
}
string strName = GetSelectedCheckListBoxItems()[0];
string strValue = GetSelectedCheckListBoxItems()[1];
if (m_selMode == 1)

{
ClearDes(objCheckedList);
objCheckedList.Items.Add(new ListItem(strName,strValue));
}
else

{
for (int i = 0; i < objCheckedListSource.Items.Count; i++)

{
if(objCheckedListSource.Items[i].Selected && (!IsReduplicatedItem(objCheckedList,objCheckedListSource.Items[i].Value.ToString())))

{
objCheckedList.Items.Add(new ListItem(objCheckedListSource.Items[i].Text,objCheckedListSource.Items[i].Value.ToString()));
}
}
}
}
private void AddListItem(CheckBoxList objCheckedListSource,ListBox objList)

{
if (!IsSelected(objCheckedListSource))

{
return;
}
string strName = GetSelectedCheckListBoxItems()[0];
string strValue = GetSelectedCheckListBoxItems()[1];
if (m_selMode == 1)

{
ClearDes(objList);
objList.Items.Add(new ListItem(strName,strValue));
}
else

{
for (int i = 0; i < objCheckedListSource.Items.Count; i++)

{
if(objCheckedListSource.Items[i].Selected && (!IsReduplicatedItem(objList,objCheckedListSource.Items[i].Value.ToString())))

{
objList.Items.Add(new ListItem(objCheckedListSource.Items[i].Text,objCheckedListSource.Items[i].Value.ToString()));
}
}
}
}
private void AddListItem(ListBox objListSource,CheckBoxList objCheckedList)

{
if (!IsSelected(objListSource))

{
return;
}
string strName = GetSelectedListBoxItems()[0];
string strValue = GetSelectedListBoxItems()[1];
if (m_selMode == 1)

{
ClearDes(objCheckedList);
objCheckedList.Items.Add(new ListItem(strName,strValue));
}
else

{
for (int i = 0; i < objListSource.Items.Count; i++)

{
if(objListSource.Items[i].Selected && (!IsReduplicatedItem(objCheckedList,objListSource.Items[i].Value.ToString())))

{
objCheckedList.Items.Add(new ListItem(objListSource.Items[i].Text,objListSource.Items[i].Value.ToString()));
}
}
}
}
private void RemoveListItem(ListBox objList)

{
if (!IsSelected(objList))

{
return;
}
if (objList.Items.Count > 0)

{
if (objList.SelectionMode == ListSelectionMode.Multiple)

{
for (int i=objList.Items.Count-1;i>=0;i--)

{
if(objList.Items[i].Selected)

{
objList.Items.RemoveAt(objList.SelectedIndex);
}
}
}
else

{
objList.Items.RemoveAt(objList.SelectedIndex);
}
}
}
private void RemoveListItem(CheckBoxList objList)

{
if (!IsSelected(objList))

{
return;
}
if (objList.Items.Count > 0)

{
for (int i=objList.Items.Count-1;i>=0;i--)

{
if(objList.Items[i].Selected)

{
objList.Items.RemoveAt(objList.SelectedIndex);
}
}
}
}
}
}