摘要:[習題]動態新增 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.主講 事先錄好的影片,並非上課側錄! 觀看時,有如「一對一」面對面講課。