1、問題描述,先選中第一行,再取消選擇,然后點擊部門全選,第一行沒有打鈎,狀態是不選中的狀態。
2、分析代碼
先選中第一行,單元格的單擊事件中 改變選中狀態為1,第一行取消選擇,單元格的單擊事件中 改變選中狀態為0
private void dgvDept_CellContentClick(object sender, DataGridViewCellEventArgs e) { if (e.RowIndex >= 0 && e.ColumnIndex == 1) { if (this.dgvDept.Rows[e.RowIndex].Cells["colSelect"].Value.ToString() == "1") { this.dgvDept.Rows[e.RowIndex].Cells["colSelect"].Value = 0; } else { this.dgvDept.Rows[e.RowIndex].Cells["colSelect"].Value = 1; } } }
2、點擊全選按鈕,此時第一個單元格沒有結束它的編輯狀態,此時執行全選,單元格1的狀態先變為1,然后才會結束他的編輯狀態,再次狀態改變事件把值賦為0,
private void btnDeptSelectAll_Click(object sender, EventArgs e) { dgvDept.EndEdit(); //此處必須加上結束編輯狀態代碼,切記 if (btnDeptSelectAll.Text == "部門全選") { btnDeptSelectAll.Text = "部門全不選"; btnDeptSelectAll.Image = global::KJMonitorSystem.Properties.Resources.SelectNull; for (int i = 0; i < dgvDept.Rows.Count; i++) { this.dgvDept.Rows[i].Cells["colSelect"].Value = 1; } } else { btnDeptSelectAll.Text = "部門全選"; btnDeptSelectAll.Image = global::KJMonitorSystem.Properties.Resources.SelectAll; for (int i = 0; i < dgvDept.Rows.Count; i++) { this.dgvDept.Rows[i].Cells["colSelect"].Value = 0; } } //dgvDept.ClearSelection(); //dgvDept.Refresh(); }
當你需要保存修改過后的內容,必須將光標指向另外一行, DataGridView才會將編輯過后的數據提交到數據緩存區,當你操作完DataGridview的時候,又沒有移動另一行,你在上面的修改有可能還沒有提交到數據緩存區,你在執行代碼獲取DataGridView上面修改的行數據時不一定能獲取到修改后的內容,所以,想重新讀取到修改后的內容,為了安全起見,手動執行一下DataGridView.EndEdit(),讓修改后的內容提交到緩存區,這樣就可以讀取到DataGridView修改后的內容了。