2013-07-17 67 views
1

我有下面这段代码,当复选框列中的复选框被选中时,应该显示messageBox。对我来说,我知道该行真的被选中。DataGridViewCheckBoxColumn - 如果复选框检查问题

如果这会工作,我会将SelectedRows保存到数据库中。所以也许它有助于知道何时构建这些代码。因为我是begginer,所以我想问你们为什么MessageBox不会在我检查CheckBox时显示? 非常感谢。

DataGridViewCheckBoxColumn chk = new DataGridViewCheckBoxColumn(); 
    dtg_ksluzby.Columns.Add(chk); 
    dtg_ksluzby.Columns[3].Width = 20; 

    foreach (DataGridViewRow row in dtg_ksluzby.Rows) 
    { 
     // number 3 represents the 4th column of dgv 
     DataGridViewCheckBoxCell chk1 = row.Cells[3] as DataGridViewCheckBoxCell; 
     if (Convert.ToBoolean(chk1.Value) == true) 
     { 
     MessageBox.Show("this cell checked"); 
     } 
     else 
     { 
     } 
    } 
+0

这是该复选框选中事件中? – iamCR

+1

在显示的代码中,您只添加了该列,并且它将处于未检查状态,因此循环它将不会找到任何检查状态为true的记录,您必须在特定事件中检查此类记录,例如(希望winform)像'CellValueChanged'或'CellValidating' – V4Vendetta

+0

那么,没有。我不知道到底该把它放在哪里,所以我在创建该专栏之后表明了自己的观点。我应该在哪里找到checkbox check event? – Marek

回答

1

此代码永远不会撞到消息框代码 - 你所创建的控制,将其添加到表,然后立即检查他们的价值,这将不设置。

你需要有一个事件处理程序,捕捉变化值在DataGridView:

private void dtg_ksluzby_CellValueChanged(object sender, 
              DataGridViewCellEventArgs e) 
{ 
    // Check through the cells here (or use event args to get data) 
} 
+1

您也很可能需要将此处理程序分配给DataGridView - 您可以通过设计视图中的属性来简化此操作。只需将'CellValueChanged'(在Events中)设置为处理程序的名称(dtg_ksluzby_CellValueChanged) –

+0

我这样做了。请你解决,如果我检查两个或多个列该复选框不会出现三次? – Marek

+0

我不知道你的意思 –