功能实现:左边ListBox的值复选,选中后,右边的ListBox将添加复选值,而左边将删除复选值。于是我遇到一个问题,大家讨论解决方法,还是我思路不对。
我个人遇到困难是不能删除复选值,只要删除了,索引出错。于是我就采用把左边复选值放到一个数组里面,这样在右边添加完复选值后,在删除左边,根据数组里存在的值。ArrayList arr = new ArrayList(); if(lst5.SelectedIndex != -1)
{
foreach(ListItem lst in lst5.Items)
if(lst.Selected)
{
bool val = true;
foreach(ListItem lst2 in lst6.Items)
{
if(lst.Text.ToString() == lst2.Text.ToString())
{
val=false;
break;
}
}
if(val)
{
lst6.Items.Add(lst.Text);
arr.Add(lst.Text.ToString().Trim());
}
}
for(int i=0;i<arr.Count;i++)
lst5.Items.Remove(arr[i].ToString());
lst5.SelectedIndex = -1;
lst6.SelectedIndex = -1;
}

解决方案 »

  1.   

    重新帖一遍代码。
    ArrayList arr = new ArrayList();if(lst5.SelectedIndex != -1)
    {
    foreach(ListItem lst in lst5.Items)
    if(lst.Selected)
    {
    bool val = true;
    foreach(ListItem lst2 in lst6.Items)
    {
    if(lst.Text.ToString() == lst2.Text.ToString())
    {
    val=false;
    break;
    }
    }
    if(val)
    {
    lst6.Items.Add(lst.Text);
    arr.Add(lst.Text.ToString().Trim());
    }
    }
    for(int i=0;i<arr.Count;i++)
    lst5.Items.Remove(arr[i].ToString()); lst5.SelectedIndex = -1;
    lst6.SelectedIndex = -1;
    }
      

  2.   

    问题就出来了,当ListBox里面Items的Text跟Values不同时,Remove方法就不执行了。
    求解决~
      

  3.   

    呵呵。这个本身估计MS设计这个LISTBOX可能还有些待改进,我当时也弄了老半天,后来测试通过,给你代码参考。。
      

  4.   

    Public Class TestInsertInto
        Inherits System.Web.UI.Page#Region " Web 窗体设计器生成的代码 "    '该调用是 Web 窗体设计器所必需的。
        <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()    End Sub
        Protected WithEvents ListBox1 As System.Web.UI.WebControls.ListBox
        Protected WithEvents Button1 As System.Web.UI.WebControls.Button
        Protected WithEvents ListBox2 As System.Web.UI.WebControls.ListBox
        Protected WithEvents Button2 As System.Web.UI.WebControls.Button
        Protected WithEvents LinkButton1 As System.Web.UI.WebControls.LinkButton    '注意: 以下占位符声明是 Web 窗体设计器所必需的。
        '不要删除或移动它。
        Private designerPlaceholderDeclaration As System.Object    Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init
            'CODEGEN: 此方法调用是 Web 窗体设计器所必需的
            '不要使用代码编辑器修改它。
            InitializeComponent()
        End Sub#End Region    Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            '在此处放置初始化页的用户代码
            If Not IsPostBack Then
                bindlb()
            End If
        End Sub    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim arrl As ArrayList = New ArrayList
            For i As Integer = 0 To ListBox1.Items.Count - 1
                If ListBox1.Items(i).Selected = True Then
                    ListBox2.Items.Add(ListBox1.Items(i))
                    ListBox2.SelectedIndex = -1
                    arrl.Add(ListBox1.Items(i))
                End If
            Next
            If arrl.Count >= 1 Then
                For j As Integer = 0 To arrl.Count - 1
                    ListBox1.Items.Remove(arrl.Item(j))
                Next
            End If
        End Sub    Sub bindlb()
            Dim conn As SqlClient.SqlConnection = New SqlClient.SqlConnection(ConfigurationSettings.AppSettings("shujuku"))
            Dim cmd As SqlClient.SqlDataAdapter = New SqlClient.SqlDataAdapter("select id,fenshu from test_fs", conn)
            Dim ds As DataSet = New DataSet
            cmd.Fill(ds, "tab")
            ListBox1.DataSource = ds.Tables("tab")
            ListBox1.DataTextField = "fenshu"
            ListBox1.DataValueField = "id"
            ListBox1.DataBind()
        End SubEnd Class
      

  5.   

    这个关键是,你必须从列表框的后面开始进行循环,而不能从0开始循环.
    如下示例:页面代码
    -----------------------
    <asp:ListBox id="ListBox1" runat="server" Width="192px" Height="182px" SelectionMode="Multiple"></asp:ListBox>
    <asp:Button id="Button1" runat="server" Text="Button"></asp:Button>
    <asp:ListBox id="ListBox2" runat="server" Width="184px" Height="184px" SelectionMode="Multiple"></asp:ListBox></FONT>后台关键代码
    -----------------------
    int mycount = this.ListBox1.Items.Count;
    for(int i=mycount-1;i>=0;i--)
    {
    if(this.ListBox1.Items[i].Selected)
    {
    this.ListBox2.Items.Add(this.ListBox1.Items[i]);
    this.ListBox1.Items.Remove(this.ListBox1.Items[i]);
    }
    }
    并且,两个列表框必须均为多选
      

  6.   

    原来思路是这样~明白了
    一直进入了个误区。还有一问题
    当ListBox里面Items的Text跟Values不同时,Remove方法好像不行
    只能用Removeat方法来移出选项吗?
      

  7.   

    根据 hchxxzx(NET?摸到一点门槛) 思路。
    重新整理。测试成功! if(lst5.SelectedIndex != -1)
    {
    for(int i=lst5.Items.Count-1;i>=0;i--)
    if(lst5.Items[i].Selected)
    {
    bool val = true;
    foreach(ListItem lstitm in lst6.Items)
    {
    if(lst5.Items[i].Text.ToString() == lstitm.Text.ToString())
    {
    val=false;
    break;
    }
    }
    if(val)
    {
    lst6.Items.Add(lst5.Items[i]);
    lst5.Items.Remove(lst5.Items[i]);
    }
    } lst5.SelectedIndex = -1;
    lst6.SelectedIndex = -1;
    }
      

  8.   

    NET粘贴CSDN上成这样,郁闷哦!
      

  9.   

    public void addselfClick(object sender, System.EventArgs e)
    {
    int count=m_list.Items.Count;
    int index=0;
    for(int i=0;i<count;i++)
    {
    ListItem Item=m_list.Items[index];
    if(m_list.Items[index].Selected==true)
    {
    q_list.Items.Add(Item);
    m_list.Items.Remove(Item);
    index--;
    }
    index++;
    }
    }
    这是一个button的check事件,试一试