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;
}

サーバー側のコードを使用せずに、選択した2つ以上のアイテムを1つずつからに追加する方法を教えてください(以下を参照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

リストボックスから選択したアイテムを取得する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

これで問題は解決しますが、ここでの問題は..アイテムを転送して保存ボタンをクリックすると、保存コードがすべてのアイテムを読み取る前に最初に送信され、右ボックスから左ボックスに移動すると右ボックスに戻ります。

<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 に答える