如何在GridView做到指定欄位的CheckBox的「全選/取消全選」的功能,筆者有在網路上搜尋到一篇不錯的文章如下,文章中有詳細介紹如何實作此功能

 

GridView CheckBox Selection With a Twist

http://www.codeproject.com/cs/miscctrl/GridViewCheckBox.asp

 

不過它的範例在GridView具有二個以上的「全選/取消全選」欄位時會發生問題,勾選了其中一個欄位時,會造成GridView中所有的欄位都被勾選,如下圖所示。


 

針對以上的問題,以它的程式碼做部分修正。
首先在頁面上放置一個GridView控制項,要做「全選/取消全選」功能的欄位要以TemplateField來實作。
在TemplateField的HeaderTemplate中加入一個CheckBox做為「全選/取消全選」的操作,CheckBox的onclick執行JavaScript Check()函式。

在ItemTemplate加入CheckBox及Label,其中CheckBox的ID設為chkSelect1,即為HeaderTemplate的Check()函式的第二個引數。

因為要做二個欄位的「全選/取消全選」,故將TemplateField複製一份,並將第二個TemplateField的ItemTemplate中CheckBox的ID設為chkSelect2,其HeaderTemplate的Check()函式第二個引數即為chkSelect2。

GridView完整的aspx程式碼如下

在頁面加入下列的JavaScript程式碼,其中Check()即為GridView表頭CheckBox的呼叫的函式。

其中Check()函式中,主要是去尋找所有Tag為Input的Element,再去過濾它的id名稱。

因為GridView中的子控制項命名有一定的規則,檢視HTML程式碼可以發現GridView同一個欄位CheckBox命名為以GridView的ID開頭,而以CheckBox的ID為結尾;所以IsMatch()函式中,就是利用這個規則去判斷是否為同欄位的CheckBox。

執行的結果如下

ASP.NET 魔法學院


DotBlogs Tags: CheckBoxField GridView

Feedback

  • stanley 2008/5/28 下午 03:43 回覆

    # re: GridView 欄位 CheckBox 全選及取消全選

    那請問如果要將全選的checkbox改為1個全選的button跟1個全取消的button的話要如何修改呢

  • MARK 2008/6/6 下午 04:02 回覆

    # re: GridView 欄位 CheckBox 全選及取消全選

    請問一下,如果勾選2筆checkbox之後要show到dataview裡,要怎麼show,我想用dataset陣列在存到session裡再show到dataview要怎麼做code如下
    public DataSet GetSP1(string ItemID)
    {

    SqlConnection sqlConn = null;
    DataSet ds = new DataSet();
    try
    {

    string connectionString = WebConfigurationManager.ConnectionStrings["GamaMallConnectionString"].ConnectionString;
    sqlConn = new SqlConnection();
    sqlConn.ConnectionString = connectionString;
    sqlConn.Open();
    SqlCommand sqlcmd = new SqlCommand();
    sqlcmd.Connection = sqlConn;
    sqlcmd.CommandType = CommandType.StoredProcedure;
    sqlcmd.CommandText = "Get_GamaMall_2";
    SqlParameter parameter = new SqlParameter();
    sqlcmd.Parameters.Add("@ItemID", SqlDbType.Char, 6).Value = ItemID;
    SqlDataAdapter adapter = new SqlDataAdapter(sqlcmd);
    //DataTable dt=new DataTable();
    adapter.Fill(ds, "GamaMall");
    GridView2.DataSource = ds.Tables["GamaMall"].DefaultView;
    GridView2.DataBind();

    if (sqlConn != null)
    if (sqlConn.State == ConnectionState.Open)
    sqlConn.Close();
    Button1.Visible = true;
    return ds;
    }
    catch (Exception E)
    {
    if (sqlConn != null)
    if (sqlConn.State == ConnectionState.Open)
    sqlConn.Close();
    return ds;
    }
    }
    protected void Checkbox_Command(object sender, EventArgs e)
    {
    for (int i = 0; i < GridView1.Rows.Count; i++)
    {
    GridViewRow row = GridView1.Rows[i];
    bool ischeked = ((CheckBox)row.FindControl("checkbox1")).Checked;
    if (ischeked)
    {
    GetSP1( GridView1.Rows[i].Cells[0].Text);
    }
    }
    }
    謝謝

  • 20050crd 2008/7/4 上午 11:56 回覆

    # re: GridView 欄位 CheckBox 全選及取消全選

    好想問版主一個問題,要是那個GridView中的CheckBox是在自定義控件中的話,而我又在別的頁面引用,那我要如何得到選中的信息呢,這個問題煩了我很久了,希望版主解答

  • jeff377 2008/7/5 下午 06:34 回覆

    # re: GridView 欄位 CheckBox 全選及取消全選

    要讓 CheckBox 繫結到一個欄位才有辨法記錄跨頁勾選的動作。

標題 *
名稱 *
Email (將不會被顯示)
Url
回應
登入後使用進階評論
Please add 7 and 5 and type the answer here: