[習題] FindControl 簡單練習--GridView + CheckBox,點選多列資料(複選刪除)#3 List或陣列

摘要:[習題] FindControl 簡單練習--GridView + CheckBox,點選多列資料(複選刪除)#3 List或陣列

 

 

之前的範例,使用字串、文字來記錄將刪除的文章ID

後續會有很多小缺失,而且要防呆也麻煩 (如下面 YouTube影片)

[習題] FindControl 簡單練習--GridView + CheckBox,點選多列資料(複選刪除)#1 簡單版

[習題] FindControl 簡單練習--GridView + CheckBox,點選多列資料(複選刪除) #2 - 分頁&範例下載

 

原先的範例,在書本上集(ASP.NET專題實務(I) / 松崗出版)第十章就有解說

YouTube影片教學  https://youtu.be/LnYXiyQghKs

 

 

改用傳統陣列寫,也有點礙手礙腳。後來改用 List處理。

 

 

Q:  在 GridView裡面,每一列資料都加上 CheckBox,

     被勾選的那一列,就要刪除之。 

 

 ======================================================================

首先,我們先把 GridView的某一欄位,修改成「樣版」。

就可以在裡面,手動加入一個 CheckBox控制項。  

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {   // 第一次執行。
            List<string> myArray = new List<string>();    // 初始化。建立一個新的 List
            Session["myArray"] = myArray;
        }
    }
 
 
    protected void Button1_Click(object sender, EventArgs e)
    {   //== 重複的、大量的程式,就抽離出去,獨自成為一個函數、副程式。
        Checkbox_Process();
        // 如果您希望按下 "分頁" 就自動記錄勾選的那幾筆,請把這段程式寫在底下的GridView "分頁"事件即可。
    }
 
 
    protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
    {
        //    //GridView1.PageIndex = e.NewPageIndex;
        //    ////== 在此不用作 DataBinding。
        //    ////      因為HTML畫面裡面, GridView已經有設定 DataSourceID。
        //    ////      這個事件不寫也行。因為GridView + SqlDataSource精靈會處理分頁。
    }
 
 
    //**** 請看上集,第十一章 *******************************************
    protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
    {   
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            CheckBox myCheckbox = (CheckBox)e.Row.FindControl("CheckBox1");
            Label myID = (Label)e.Row.FindControl("Label1");
 
            //*** 方法二 ****************************************************************
            //*** 把字串(A1,A2,A3.....)轉成陣列會更好,就可以不用在數字前面加上「A」了!
            //*** http://msdn.microsoft.com/zh-tw/library/b873y76a(v=vs.110).aspx
 
            List<string> myArray = (List<string>)Session["myArray"];
            if (myArray.IndexOf(myID.Text) >= 0)   //-- 已經有資料在內
            {    //-- 檢查一下,如果文章編號已經記錄在裡面了,那麼 CheckBox就要被勾選。
                myCheckbox.Checked = true;
            }
            else    {
                myCheckbox.Checked = false;
            }
        }
    }
 
 
    protected void Checkbox_Process()
    {
        List<string> myArray = (List<string>)Session["myArray"];
        for (int i = 0; i < GridView1.Rows.Count; i++)
        {
            CheckBox myCheckbox = (CheckBox)GridView1.Rows[i].FindControl("CheckBox1");
            Label myID = (Label)GridView1.Rows[i].FindControl("Label1");
 
            if (myCheckbox.Checked == true)
            {   //====================
                //==  被點選的某一筆資料。 ==
                //====================
 
                //註解:VB語法的 Instr(),在C#裡面改為 .IndexOf("字串", 0)
                //    找不到的話, 會傳回「-1」。
                //    找到的話,回傳一個Integer數字(從零算起)。表示在字串裡面第幾個字,符合條件。
                //  請看 http://www.dotblogs.com.tw/mis2000lab/archive/2009/01/14/instr_function_090114.aspx
                
                if (myArray.IndexOf(myID.Text) == -1)
                {   //-- 檢查一下,如果相同的文章編號已經記錄在 List了,就不要重複記憶!
                    myArray.Add(myID.Text);
                }
            }
            else
            {   //== 「沒有」被點選的某一筆資料。 必須從 List裡面刪除 ==
                if (myArray.IndexOf(myID.Text) >= 0)  //--已經有資料在內              
                {
                    myArray.Remove(myID.Text);
                }
            }   // if -- End
        }  // for loop -- End
 
 
        if (myArray.Count == 0)  {   // List沒有 Length,只能用 Count
            Label2.Text = "您尚未點選任何一筆資料(沒有刪除任何一筆)";
        }
        else    {
            // Debug用的,把資料列在畫面上。
            Label2.Text = "";
            foreach (string str in myArray)     {
                Label2.Text += str + ",";
            }
            //== 您可以使用這些文章的ID來進行SQL指令「刪除」的動作 ==
        }
    }

 

您也可以參閱 topcat在藍色小舖的解答,位於 13F

http://www.blueshop.com.tw/board/FUM20041006161839LRJ/BRD201510271612260I7.html

 

 

 

 

 

 

我將思想傳授他人, 他人之所得,亦無損於我之所有;

猶如一人以我的燭火點燭,光亮與他同在,我卻不因此身處黑暗。----Thomas Jefferson

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



ASP.NET遠距教學、線上課程(Web Form + MVC)。 第二門 課程「四折」-- 以MVC課程 作優惠。
第一天課程, "完整" 試聽。  如不滿意  全額退費!
................   facebook社團   https://www.facebook.com/mis2000lab   ......................

................  YouTube (ASP.NET) 線上教學影片  http://goo.gl/rGLocQ

*********************************************************************************************

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

************************************************************(歡迎索取,免費申請)*****

 

Blog文章 "附的範例" 無法下載,請看 這裡 ...... https://dotblogs.com.tw/mis2000lab/2016/03/14/2008_2015_mis2000lab_sample_download

請看我們的「售後服務」範圍(嚴格認定)

......................................................................................................................................................

...................................................................................................................................................... 

[遠距教學、教學影片] ASP.NET (Web Form) 課程 上線了!MIS2000Lab.主講

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

 

    MIS2000 Lab.  線上教學影片(YouTube) **免費觀賞**