摘要:[習題]動態新增 DropDownList或 ListBox底下的新項目(Item)#5 [左右搬移](複選)
原本的範例(如下),只能做「單選」一個子選項(ListItem)左右搬移
[習題]動態新增 DropDownList或 ListBox底下的新項目(Item)#2 [左右搬移](單選)
例外狀況,如果你不點選任何一個子選項,就按下按鈕。
那麼會出現警告訊息!(如下圖)
執行成功的畫面如下:
上面這個範例已經收錄在 ASP.NET 4.0 / 4.5 專題實務(上集 第三章,松崗出版)
================================================================
以下是「複選」多個子選項,進行左右搬移。
這個範例可以沿用在 CheckBoxList等清單控制項裡面,程式碼幾乎沒變化,可以直接套用。
2012/10/8補充:有更簡單的解法,程式更少、流程更簡潔
	請看:[習題]動態新增 DropDownList或 ListBox底下的新項目(Item)#2 [左右搬移](單選 / 複選)簡單版
	http://www.dotblogs.com.tw/mis2000lab/archive/2012/10/08/listbox_multiitem_add_remove_moreeasy.aspx
其實不難,您只需具備一些簡單的觀念:
第一,您可以判別「使用者 "複選"了哪幾個子選項?」
這是一段固定的程式碼,很常用、很好用!!
請參閱這篇文章:[習題]CheckBoxList 與 「小」線上測驗系統(線上考試系統、答對得分)
http://www.dotblogs.com.tw/mis2000lab/archive/2008/12/archive/2008/12/01/checkboxlist_survey.aspx
第二,瞭解清單控制項(List Control)的 .Add()方法 與 .Remove()方法
請參閱這篇文章:[習題]動態新增 DropDownList或 ListBox底下的新項目(Item)#2 [左右搬移](單選)
檔名 ListBox_Add.aspx 是以前的範例,只能 "單選"。
現在的範例,可以做「複選」的左右搬移。
我提供一系列的範例(共有四支網頁程式)
檔案下載 -- ListBox複選_左右搬移.rar (VB、C#都有)
2012/12/16 補充:
(1). 上面的範例,使用的 .Add()與 .Remove()方法,都是以「字串」的方法去做
http://msdn.microsoft.com/zh-tw/library/system.web.ui.webcontrols.listitemcollection.aspx
如果,每個子選項(ListItem)的 Text與 Vlaue不同,那就慘了!
所以,最後一個範例,改用「子選項(ListItem)」來操作.Add()與 .Remove()方法
(2). 另外,最後一個範例的 Array,改用 List(Of T) / List<T>來代替,更簡單!
VB語法如下:
    '========================================
    '== 這兩個事件的程式,非常雷同。您可以彙整起來,
    '== 改寫成一個 Sub副程式或是 Function,讓大家重複呼叫「這些類似的程式碼」。
    '========================================
    Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
        '== 右移 ==
        MoveItem(ListBox1, ListBox2)
    End Sub
    Protected Sub Button2_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button2.Click
        '== 左移 ==
        MoveItem(ListBox2, ListBox1)
    End Sub
    '*****************************************************************
    '*** 從哪個 ListBox(LB_A)移動到另外一個 ListBox(LB_B)
    Sub MoveItem(LB_A As ListBox, LB_B As ListBox)
        Dim a As Integer = 0
        '-------------------------------------------------------
        Dim myList As List(Of ListItem) = New List(Of ListItem)  '-- 改用 List(Of T)取代原本的陣列
        '-------------------------------------------------------
        If LB_A.Items.Count = 0 Then
            Response.Write("警告!" & LB_A.ID & "已經沒有子選項")
        End If
        For i As Integer = 0 To (LB_A.Items.Count - 1)
            If LB_A.Items(i).Selected Then  '==判定哪一個子選項被點選了。
                LB_B.Items.Add(LB_A.Items(i))
                '-- .Add()方法,在此是加入一個「子選項(ListItem)」,而非上一個範例的「字串」。
                '-- 參考資料:http://msdn.microsoft.com/zh-tw/library/e7s6873c.aspx
                '-------------------------------------------------------
                myList.Add(LB_A.Items(i))  '==把要移除的子項目,先暫存在 List(Of T)裡面。
                '-------------------------------------------------------
                a = a + 1
            End If
        Next
        '== 批次刪除 子項目 =======================
        For K As Integer = 0 To (myList.Count - 1)
            LB_A.Items.Remove(myList(K))
            '==被搬移走了,這個子選項就該移除!
        Next
        '====================================
        If a = 0 Then
            Response.Write("警告!您未點選" & LB_A.ID & "任何一個子選項")
        Else
            Response.Write("移動成功")
        End If
    End Sub
C#語法如下:
    //========================================
    //== 這兩個事件的程式,非常雷同。您可以彙整起來,
    //== 改寫成一個 Sub副程式或是 Function,讓大家重複呼叫「這些類似的程式碼」。
    //========================================
    protected void Page_Load(object sender, EventArgs e)
    {
    }
    protected void Button1_Click(object sender, EventArgs e)
    {   //== 右移 ==
        MoveItem(ListBox1, ListBox2);
    }
    protected void Button2_Click(object sender, EventArgs e)
    {   //== 左移 ==
        MoveItem(ListBox2, ListBox1);
    }
    //***********************************************************
    //*** 從哪個 ListBox(LB_A)移動到另外一個 ListBox(LB_B)
    protected void MoveItem(ListBox LB_A, ListBox LB_B)
    {
        int a = 0;
        //-------------------------------------------------------
        List myList = new List();  //-- 改用 List取代原本的陣列
        //-------------------------------------------------------
        if (LB_A.Items.Count == 0)
            Response.Write("警告!" + LB_A.ID + "已經沒有子選項");
        for (int i = 0; i < LB_A.Items.Count; i++)
        {
            if (LB_A.Items[i].Selected)
            {
                   LB_B.Items.Add(LB_A.Items[i]);
                   //-- .Add()方法,在此是加入一個「子選項(ListItem)」,而非上一個範例的「字串」。
                        
                   //-------------------------------------------------------
                   myList.Add(LB_A.Items[i]);  //==把要移除的子項目,先暫存在 List裡面。
                   //-------------------------------------------------------
                    a = a + 1;
            }
        }
        //== 批次刪除 子項目 =======================(start)
        for (int K = 0; K < myList.Count; K++)
        {
            LB_A.Items.Remove(myList[K]);
            //==被搬移走了,這個子選項就該移除!
        }   //==================================(end)
        if (a == 0)
        {
            Response.Write("警告!您未點選" + LB_A.ID + "任何一個子選項");
        }
        else
        {
            Response.Write("移動成功");
        }
    }
    
	2012/2/17 補充:
	.Add()方法裡面可以搭配 ListItem一起作,發揮更大的功效。
	
	‘-- VB語法:
	DropDownList1.Items.Add(New ListItem(“Text屬性”, “Value屬性”))
	
	
	// C#語法:
	DropDownList1.Items.Add(new ListItem(“Text屬性”, “Value屬性”));
==== 廣告時間 ============================================================
為什麼大部分的初學者(剛入門的人),每天忙忙碌碌上網四處找範例、找Code 來抄?(但還是找不到?解不了?)
But........有些人卻拿手邊的一些 Sample,隨手組合起來就能做出變化、解決問題?
很簡單,
您手邊的(您買的書本提供的)範例碼,好用嗎?
為什麼上面這些基礎,您沒學到?....漏學了?(老師沒教?還是書本沒寫給你??)
想想看:與其零散地找範例、四處組合一些片段的程式....不如一次學通 ASP.NET的心法!
現在您有更好的機會,以更便宜的價格,上更好的 ASP.NET課程!買更實用的書(提供更實用的範例)
我將思想傳授他人, 他人之所得,亦無損於我之所有;
猶如一人以我的燭火點燭,光亮與他同在,我卻不因此身處黑暗。----Thomas Jefferson
線上課程教學,遠距教學 (Web Form 約 51hr) https://dotblogs.com.tw/mis2000lab/2016/02/01/aspnet_online_learning_distance_education_VS2015
線上課程教學,遠距教學 (ASP.NET MVC 約 140hr) https://dotblogs.com.tw/mis2000lab/2018/08/14/ASPnet_MVC_Online_Learning_MIS2000Lab
寫信給我,不要私訊 -- mis2000lab (at) yahoo.com.tw 或 school (at) mis2000lab.net
(1) 第一天 ASP.NET MVC5 完整影片(5.5小時 / .NET 4.x版)免費試聽。影片 https://youtu.be/9spaHik87-A
(2) 第一天 ASP.NET Core MVC 完整影片(3小時 / .NET Core 6.0~8.0)免費試聽。影片 https://youtu.be/TSmwpT-Bx4I
[學員感言] mis2000lab課程評價 - ASP.NET MVC , WebForm 。 https://mis2000lab.medium.com/%E5%AD%B8%E5%93%A1%E6%84%9F%E8%A8%80-mis2000lab%E8%AA%B2%E7%A8%8B%E8%A9%95%E5%83%B9-asp-net-mvc-webform-77903ce9680b
ASP.NET遠距教學、線上課程(Web Form + MVC)。 第一天課程, "完整" 試聽。 
......... facebook社團 https://www.facebook.com/mis2000lab ......................
......... YouTube (ASP.NET) 線上教學影片 https://www.youtube.com/channel/UC6IPPf6tvsNG8zX3u1LddvA/
Blog文章 "附的範例" 無法下載,請看 https://dotblogs.com.tw/mis2000lab/2016/03/14/2008_2015_mis2000lab_sample_download
請看我們的「售後服務」範圍(嚴格認定)。
......................................................................................................................................................
ASP.NET MVC => .NET Core MVC 線上教學 ...... 第一天課程 完整內容 "免費"讓您評估 / 試聽

[遠距教學、教學影片] ASP.NET (Web Form) 課程 上線了!MIS2000Lab.主講 事先錄好的影片,並非上課側錄! 觀看時,有如「一對一」面對面講課。



