2

这是我们的代码:

  <div>
 <table style="width: 349px">
    <tr>
    <td class="style1">
        <asp:ListBox ID="leftbox" runat="server" Height="114px" Width="212px" 
            SelectionMode="Multiple" AutoPostBack="True">
        </asp:ListBox>
    </td>
    <td>
        <asp:Button ID="Button1" runat="server" Text=">>" onclick="Button1_Click" /><br />
        <asp:Button ID="Button2" runat="server" Text="<<" onclick="Button2_Click" />
    </td>
    <td>
        <asp:ListBox ID="rightbox" runat="server" Height="117px" Width="231px" 
            SelectionMode="Multiple" AutoPostBack="True"></asp:ListBox>
    </td>

    </tr>
</table>
</div>    

后面的代码是:

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        List<string> list= GetNameList();
        leftbox.DataSource = list;
        leftbox.DataBind();             
    }
}

private static List<string> GetNameList()
{
    List<string> list = new List<string>();
    list.Add("keerthana");
    list.Add("sirisha");
    list.Add("anusha");
    list.Add("Anuradha");
    list.Add("Bhavani");
    list.Add("divya");
    list.Sort();
    return list;
}

请告诉我如何在不使用服务器端代码的情况下从leftbox到一个一个地添加两个或多个选定项(如下所示):rightbox

protected void Button1_Click(object sender, EventArgs e)
{
    if (leftbox.SelectedIndex != -1)
    {
        rightbox.Items.Add(leftbox.SelectedItem.Text);
        leftbox.Items.Remove(leftbox.SelectedItem.Text);
    }
}

提前致谢...

4

3 回答 3

2

使用客户端 javascript 来执行此操作,因此您不会在每次有人移动某物时回发,如果您有 jquery,它可以很简单:

$("#Button1").button().click(function() {
  $("#leftbox option:selected").each(function() {
      $("#rightbox").append(this);
  });
});
于 2012-06-20T13:35:49.407 回答
1

这是从 ListBox 中获取所选项目的 Linq 方式

var selectedItems =  leftbox.Items.OfType<ListItem>().Where(item => item.Selected).ToList();

然后您可以将所有选定的值添加到rightbox并最终从中删除leftbox

编辑

protected void Button1_Click(object sender, EventArgs e)
{
    List<ListItem> selectedItems = new List<ListItem>();
    if (leftbox.SelectedIndex >= 0)
    {
        for (int i = 0; i < leftbox.Items.Count; i++)
        {
            if (leftbox.Items[i].Selected)
            {
                    selectedItems.Add(leftbox.Items[i]);
            }
        }

    }

    for (int i = 0; i < selectedItems.Count; i++)
    {
        if (!rightbox.Items.Contains(selectedItems[i]))
            rightbox.Items.Add(selectedItems[i]);
        leftbox.Items.Remove(selectedItems[i]);
    }

}
于 2012-06-21T04:11:32.317 回答
0

这将完成工作,但这里的问题是.. 在您传输项目并单击保存按钮后,它将首先提交,然后您的保存代码将读取您从 Rightbox 移动到 Leftbox 的所有项目将返回到 Rightbox viseversa

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
        <script type="text/javascript">
            $(function () {
                $("#left").bind("click", function () {
                    var options = $("[id*=RIghtBox] option:selected");
                    for (var i = 0; i < options.length; i++) {
                        var opt = $(options[i]).clone();
                        $(options[i]).remove();
                        $("[id*=LeftBox]").append(opt);
                    } 
                });

                $("#right").bind("click", function () {
                    var options = $("[id*=LeftBox] option:selected");
                    for (var i = 0; i < options.length; i++) {
                        var opt = $(options[i]).clone();
                        $(options[i]).remove();
                        $("[id*=RIghtBox]").append(opt);

                    }
                });
            });


        </script>
于 2015-03-27T03:30:27.693 回答