方法一:
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來獲取屬性值
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com