none
datagridview+checkbox欄位 RRS feed

  • 問題

  • 各位大大你們好
    我想請問一下一個問題
    我在datagridview放入一個checkbox欄位
    當我勾選時
    必須做刪除資料寫入到資料庫裡這樣的動作
    我的寫法是這樣
      Boolean selectCheck;
                    selectCheck = Boolean.Parse(dataGridView1.CurrentRow.Cells[5].Value.ToString());
                    if (selectCheck == true)
                    {
                        dataGridView1.Rows.Remove(dataGridView1.CurrentRow);
                    }
    不過這個寫法是一筆一筆做刪除的動作

    但我要改成checkbox勾選時就要刪除所勾選的資料(一次刪除)
    我改成

      Boolean selectCheck;
                    selectCheck = Boolean.Parse(dataGridView1.CurrentRow.Cells[5].Value.ToString());
                    if (selectCheck == true)
                    {
                        for (int i = 0; i < dataGridView1.Rows.Count; i++)
                        {
                            dataGridView1.Rows.RemoveAt(dataGridView1.Rows[i].Index);
                        }
                    }
    不過產生的功能方是很怪
    麻煩請各位大大不吝教導
    風過留痕
    2010年1月29日 上午 02:24

解答

  • 各位大大你們好
    這是我的修改
      try
                {
                    for (int i = dataGridView1.Rows.Count - 1; i >= 0; i--)
                    {
                        DataGridViewCheckBoxCell chk = (DataGridViewCheckBoxCell)dataGridView1.Rows[i].Cells[5];
                        if (chk.Value != null)
                        {
                            if (chk.Value.ToString() == "True")
                            {
                                this.dCMSDataSet1.MT_PARAM.Rows[i].Delete();
                            }
                        }
                    }
                    mT_PARAMTableAdapter.Update(this.dCMSDataSet1.MT_PARAM);
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
    風過留痕
    • 已標示為解答 天_ 2010年1月30日 上午 08:00
    2010年1月30日 上午 08:00

所有回覆

  • 我猜你是要一次刪除多筆資料?
    在ui 控制上
    你可以將datagridview 的multiselect 屬性設為true而不需要checkbox
    (SelectionMode設為FullRowSelect或RowHeaderSelect)
    然後用一個Button來執行刪除的動作
    DataGridView1.SelectedRows.Remove();

    2010年1月29日 上午 02:57
  • 大大不好意思
    這是個不錯的建議
    我也會當作參考
    不過也希望大大能運用我的問題做解答
    非常謝謝您的教導以及告知
    風過留痕
    2010年1月29日 上午 03:18
  • 當我改成這樣時
    刪除的方是好像是一頁一頁刪除
    不曉得哪裡寫錯了
    請各位大大不吝教導
     Boolean selectCheck;
                    selectCheck = Boolean.Parse(dataGridView1.CurrentRow.Cells[5].Value.ToString());
                    for (int i = 0; i < dataGridView1.Rows.Count; i++)
                    {
                        if (selectCheck == true)
                        {
                            dataGridView1.Rows.Remove(dataGridView1.CurrentRow);
                        }
                    }           
    風過留痕
    2010年1月29日 上午 04:15
  • hi
    嘗試看看
    foreach (DataGridViewRow row in dataGridView1.Rows)
                {
                    if (row.Selected == true)
                    {
                        dataGridView1.Rows.Remove(row);
                    }
                }
    http://www.dotblogs.com.tw/ricochen/Default.aspx
    2010年1月29日 上午 05:39
  • 這樣的寫法
    只有把checkbox打勾的選項做刪除的動作
    去load資料時
    資料都還在並無做刪除的動作產生
    請大大不吝教導
    非常謝謝各位大大
    風過留痕
    2010年1月29日 上午 05:47
  • 建議你直接針對datatable來處理
    dataGridView1只需要處理顯示部分

    http://www.dotblogs.com.tw/ricochen/Default.aspx
    2010年1月29日 上午 05:50
  • 這是我新的寫法
      object obj = dataGridView1.Rows[i].Cells[5].Value;
                        if (obj != null)
                        {
                            //把有勾選的資料刪除
                            Boolean selectCheck = Boolean.Parse(dataGridView1.Rows[i].Cells[5].Value.ToString());
                            if (selectCheck == true)
                            {
                                dataGridView1.Rows.Remove(dataGridView1.Rows[i]);
                            }
                        }
    有個地方很奇怪
    我datagridview的頁面資料去做checkbox打勾時
    我勾三筆資料要做刪除動作
    去load資料時
    並沒有刪除乾淨
    也就是勾三筆資料刪除
    其中一筆保留 另外兩筆刪除
    請各位大大不吝教導
    非常謝謝各位大大
    風過留痕
    2010年1月29日 上午 05:51
  • 目前知道一個線索是
    在這個程式碼中
    object obj = dataGridView1.Rows[i].Cells[5].Value;
                        if (obj != null)
                        {
                            //把有勾選的資料刪除
                            Boolean selectCheck = Boolean.Parse(dataGridView1.Rows[i].Cells[5].Value.ToString());
                            if (selectCheck == true)
                            {
                               dataGridView1.Rows.Remove(dataGridView1.CurrentRow);
                            }
                        }
    不可使用CurrentRow
    也就可以解決這個問題
    (並沒有刪除乾淨
    也就是勾三筆資料刪除
    其中一筆保留 另外兩筆刪除)

    希望各位大大願意給提示這裡該怎麼寫
    而讓我繼續試試看
    風過留痕
    2010年1月29日 上午 07:56
  • 刪除資料時 dataGridView1.Rows 的數量會減少,最好是倒著跑
    for(int i = dataGridView1.Rows.Count-1; i>=0; i--) {
    if(Boolean.Parse(dataGridView1.Rows[i].Cells[5].Value.ToString())) { dataGridView1.Rows.Remove(dataGridView1.Rows[i]); }
    }

    另外,如果資料量少的話,建議你不用處理 DataGridView,刪除資料庫的資料後重新讀取就好了。
    2010年1月29日 下午 04:32
  • hi

    感覺問題不是問得很清楚耶@@...

    我有幾個疑惑點...還請釋疑!

    1. 必須做刪除資料寫入到資料庫裡這樣的動作
        這意思是:
        (1). 要將刪除的資料(看到的)寫入到資料庫中?
        (2). 要將看到的資料刪除,且資料會從資料庫中移除?
    2. 但我要改成checkbox勾選時就要刪除所勾選的資料(一次刪除)
        這意思是:
        (1). 每打一個勾就立即刪除一筆資料?
        (2). 打完所有的勾,然後按下一個按鈕進行刪除?
    3. 不知道你datagridview的來源是什麼?
        如果是XXXDataSource的話,看看是不是沒有設定到Delete這部分屬性的相關資料,導致無法與資料庫做連動。

    不然其實上面有許多的好答案! ^^"

    2010年1月29日 下午 11:16
  • 各位大大你們好
    這是我的修改
      try
                {
                    for (int i = dataGridView1.Rows.Count - 1; i >= 0; i--)
                    {
                        DataGridViewCheckBoxCell chk = (DataGridViewCheckBoxCell)dataGridView1.Rows[i].Cells[5];
                        if (chk.Value != null)
                        {
                            if (chk.Value.ToString() == "True")
                            {
                                this.dCMSDataSet1.MT_PARAM.Rows[i].Delete();
                            }
                        }
                    }
                    mT_PARAMTableAdapter.Update(this.dCMSDataSet1.MT_PARAM);
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
    風過留痕
    • 已標示為解答 天_ 2010年1月30日 上午 08:00
    2010年1月30日 上午 08:00
  • hi:

         請問一下如果是checkbox勾選時,打完所有的勾,然後按一下按鈕進行刪除

         這樣的架構要怎麼寫呢?

         datagridview頁面和資料庫都會重新databind

     

    2011年3月3日 上午 05:17
  • To: wenmelon

    建議你另開一個討論緒, 並將你的問題清楚說明.

    關於發問的要領, 可以參考以下文章, 越清楚的說明的你的問題, 別人才能越快的幫助你.

    張貼文章應注意事項及應提供資訊


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。
    2011年3月6日 上午 02:48
    版主