方法一:
private void dgv_zy_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
int count = Convert.ToInt16(dgv_zy.Rows.Count.ToString());
for (int i = 0; i < count; i++)
{
DataGridViewCheckBoxCell checkCell = (DataGridViewCheckBoxCell)dgv_zy.Rows[i].Cells["cb_check"];
Boolean flag = Convert.ToBoolean(checkCell.Value);
if (flag == true) //查詢被選擇的資料行
{
checkCell.Value = false;
}
else
continue;
}
}
}
獲取選擇的資料
int count = Convert.ToInt32(dgv_zy.Rows.Count.ToString());
for (int i = 0; i < count; i++)
{
//如果DataGridView是可編輯的,將資料提交,否則處於編輯狀態的行無法取到
dgv_zy.EndEdit();
DataGridViewCheckBoxCell checkCell = (DataGridViewCheckBoxCell)dgv_zy.Rows[i].Cells["cb_check"];
Boolean flag = Convert.ToBoolean(checkCell.Value);
if (flag == true) //查詢被選擇的資料行
{
//從 DATAGRIDVIEW 中獲取資料項
string z_zcode = dgv_zy.Rows[i].Cells[0].Value.ToString().Trim();
}
}
方法二:
如果需要在winform 的資料控制元件datagridview 中嵌入checkbox列 ( DataGridViewCheckBoxCell ),
在程式的執行中有可能需要像純粹的checkbox控制元件的selectedindexchanged事件一樣的事件來捕捉其狀態的改變
我覺得比較好的方式是用datagridview 控制元件的cellcontentclick事件 例如:
如果嵌入的 DataGridViewCheckBoxCell 列在第一列,判斷狀態並新增處理事件可以為:
private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
if (e.ColumnIndex == 0 && e .RowIndex != -1)
{
//獲取控制元件的值
MessageBox.Show(this.dataGridView1.Rows[e.RowIndex].Cells[0].EditedFormattedValue.ToString());
//或者可以做其他事件處理程式
}
}
需要注意的是執行此事件是需要遮蔽其他datagridview單元格的cellcontentclick事件 ,即讓除了 DataGridViewCheckBoxCell 列
之外的所有列的ReadOnly=True;
在獲取datagridview中checkbox列的值得時候 一定要用 EditedFormattedValue屬性,此屬性獲取的是編輯以後數值 而value 和
FormattedValue返回的往往是編輯以前的數值,而其重複單擊的時候往往會出現錯誤(無法確定是編輯前還是編輯後的數值: 主要
原因是焦點問題,需要先移動焦點使datagridview獲取更改後的資料在區獲取他 就沒有問題了,所以以後用去獲取資料前先要移出
datagridview中的焦點!!!),所以一定要用EditedFormattedValue來獲取屬性值
http://www.cnblogs.com/yang5830963/archive/2009/06/11/1501175.html