2013-10-18 23 views
0

我有DataGridView有幾列,每一行代表與幾個屬性,如姓名,身份證等 變化後,我的目標我Name columnCheckbox我想更新我的對象 怎樣才能讓我的列Checknox狀態? 這是我嘗試:獲取DataGridView的複選框值更改後

private void dataGridView1_CurrentCellDirtyStateChanged(object sender, EventArgs e) 
{ 
    if (dataGridView1.IsCurrentCellDirty) 
    { 
     dataGridView1.CommitEdit(DataGridViewDataErrorContexts.Commit); 
    } 
} 

private void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e) 
{ 
    if (dataGridView1.Columns[e.ColumnIndex].Name == "Name") 
    { 

    } 
} 

回答

2

我認爲NameDataGridViewCheckBoxColumn

private void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e) 
{ 
    if (dataGridView1.Columns[e.ColumnIndex].Name == "Name") 
    { 
     var isChecked = dataGridView1[e.ColumnIndex, e.RowIndex].Value as bool? ?? false; 
     //rest of logic 
    } 
} 

的名字,這是最簡單,最安全的方式。

要通過所有單元格行重複使用此代碼:

DataGridViewRow row = dataGridView1.Rows[e.RowIndex]; 
foreach (DataGridViewCell cell in row.Cells) 
{ 
    object value = cell.Value; 
} 
+0

那工作正常,我怎麼能從行中獲取每列的值? – user2214609

+0

@ user2214609看到我的編輯。 – gzaxx

0

也許你可以使用FindControl()獲得複選框的狀態:

CheckBox cbName = (CheckBox)dataGridView1.Columns[e.ColumnIndex].FindControl("cbName"); 
checkState = cbName.CheckState.toString(); 

isChecked = cbName.Checked;