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

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

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

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


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

YouTube影片教學  


改用傳統陣列寫,也有點礙手礙腳。後來改用 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」了!
 
            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...
                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/FUM20041006161839...


 
 

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

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

......... 寫信給我,mis2000lab (at) yahoo.com.台灣 .....................................................................................

................   facebook社團   https://www.facebook.com/mis2000lab   ............................

................   Google+   https://plus.google.com/100202398389206570368/posts ..............

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



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

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


MIS2000 Lab.  線上教學影片(YouTube)
https://www.youtube.com/channel/UC6IPPf6tvsNG8zX3u...

arrow
arrow
    全站熱搜

    MIS2000 Lab 發表在 痞客邦 留言(0) 人氣()