天天看點

ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本)

事實上,主要是如何考慮周遊元素個數變化的動态集合(因為周遊過程要執行删除)

特别是對于 C# ,不能使用 foreach,foreach 是隻讀周遊的。

伺服器端版本

ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本)

  //  方法1,正序周遊

ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本)

     private   void  SwapListBox(ListBox src, ListBox dst)

ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本)
ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本)
ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本)

{

ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本)
ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本)

        for (int i = 0; i < src.Items.Count; ) 

ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本)

{

ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本)

            ListItem item = src.Items[i];

ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本)
ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本)

            if (item.Selected) 

ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本)

{

ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本)

                src.Items.Remove(item);

ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本)

                // 保持選中狀态

ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本)

                item.Selected = ((dst.SelectionMode == ListSelectionMode.Multiple || dst.SelectedIndex < 0) ? item.Selected : false);

ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本)

                dst.Items.Add(item);

ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本)

                continue;

ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本)

            }

ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本)

            i++;

ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本)

        }

ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本)

    }

ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本)
ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本)

     //  方法1,倒序周遊

ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本)

     private   void  SwapListBox2(ListBox src, ListBox dst)

ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本)
ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本)
ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本)

{

ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本)
ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本)

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

ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本)

{

ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本)

            ListItem item = src.Items[i];

ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本)
ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本)

            if (item.Selected) 

ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本)

{

ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本)

                src.Items.Remove(item);

ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本)

                // 保持選中狀态

ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本)

                item.Selected = ((dst.SelectionMode == ListSelectionMode.Multiple || dst.SelectedIndex < 0) ? item.Selected : false);

ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本)

                dst.Items.Add(item);

ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本)

            }

ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本)

        }

ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本)

    }

用戶端版本

ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本)

// 方法1,正序周遊

ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本)

    function SwapListBox(srcId, dstId)

ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本)
ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本)
ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本)

{

ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本)

        //debugger;

ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本)

        var src = document.getElementById(srcId);

ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本)

        var dst = document.getElementById(dstId);

ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本)
ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本)

        for (var i = 0; i < src.options.length; ) 

ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本)

{

ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本)

            var opt = src.options[i];

ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本)
ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本)

            if (opt.selected) 

ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本)

{

ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本)

                src.options[i] = null; // 設定空引用,則直接删除

ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本)

                // 保持選中狀态

ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本)

                opt.selected = ((dst.multiple || dst.selectedIndex < 0) ? opt.selected : false);

ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本)

                dst.options[dst.options.length] = opt; // 追加項,dst.options[dst.options.length],js 數組特有的文法,不需要顯示 add

ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本)

                continue;

ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本)

            }

ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本)

            i++;

ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本)

        }

ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本)

    }

ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本)
ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本)

    // 方法2,反序周遊

ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本)

    function SwapListBox2(srcId, dstId)

ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本)
ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本)
ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本)

{        

ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本)

        var src = document.getElementById(srcId);

ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本)

        var dst = document.getElementById(dstId);

ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本)
ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本)

        for (var i = src.options.length - 1; i >=0; i--) 

ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本)

{

ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本)

            var opt = src.options[i];

ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本)
ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本)

            if (opt.selected) 

ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本)

{

ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本)

                src.options[i] = null; // 設定空引用,則直接删除

ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本)

                // 保持選中狀态

ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本)

                opt.selected = ((dst.multiple || dst.selectedIndex < 0) ? opt.selected : false);

ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本)

                dst.options[dst.options.length] = opt;

ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本)

            }

ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本)

        }

ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本)

    }

頁面效果

ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本)

完整源碼

下載下傳

轉載于:https://www.cnblogs.com/hzuIT/articles/823648.html

c#