[習題]動態新增 DropDownList或 ListBox底下的新項目(Item)#5 [左右搬移](複選)ListItem的 .Add()與.Remove()方法

摘要:[習題]動態新增 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 49hr)  https://dotblogs.com.tw/mis2000lab/2016/02/01/aspnet_online_learning_distance_education_VS2015

線上課程,遠距教學 (ASP.NET MVC 75hr)  https://dotblogs.com.tw/mis2000lab/2018/08/14/ASPnet_MVC_Online_Learning_MIS2000Lab

ASP.NET MVC線上課程 第一天 免費看 (5.5小時) 

寫信給我,不要私訊 --  mis2000lab (at) yahoo.com.台灣  或  school (at) mis2000lab.net


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 (Web Form) 課程 上線了!MIS2000Lab.主講

事先錄製好的影片,並非上課時側錄!   觀看影片時,有如我「一對一」跟您面對面講課

 

ASP.NET MVC 5 線上教學

累積時數約 75小時...... 第一天(5.5小時)完整內容,"免費"讓您評估