DavidJGu's Blog

       尼采说,宁可追求虚无也不能无所追求!  Keeping is harder than winning
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

ListBox间数据传递

Posted on 2004-08-23 20:48  Let's DotNet  阅读(889)  评论(1编辑  收藏  举报

using System;
using System.Web.UI.WebControls;

namespace PowerSelect
{
 /// <summary>
 /// PowerSelect 的摘要说明:用于两个控件间的数据选择传递;目前只做到ListBox;以后根据需要会扩展。2004.8.23
 /// </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(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);
   }
   
  }

  public void Remove()
  {
   if (this.m_desObj is ListBox)
   {
    this.RemoveListItem((ListBox) m_desObj);
   }
  }
  
  private void ClearDes(ListBox 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 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 IsSelected(ListBox objList)
  {
   if (objList.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 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);
    }
   }
   
  }
 }
}