我有ContextMenuStrip来显示2个菜单项,我在DataGridViewRow上使用它。 我有一个checkBoxColumn只选择1行来获取Id并在另一个函数中使用。 所以这是我的代码来选择行。
//get the selected item
List<DataGridViewRow> selectedRows = (from row in Detail_shanuDGV.Rows.Cast<DataGridViewRow>()
where Convert.ToBoolean(row.Cells["checkBoxColumn1"].Value) == true
select row).ToList();
if ((selectedRows.Count > 1) || (selectedRows.Count == 0))
MessageBox.Show("Plz select au moin un ligne...");
else
{
foreach (DataGridViewRow row in selectedRows)
{
//to do functions
}
}
如果我尝试使用此代码,它总是会给我MessageBox.Show("Plz select au moin un ligne...");
,但如果我选择另一行,则会显示最后一行。
我的问题是这个代码不能与ContextMenuStrip或MenuStrip一起使用, 它只适用于按钮。
答案 0 :(得分:1)
感谢Reza Aghaei和他的帖子here 我有我的问题,因为编辑的单元格值在被验证之前没有提交给DataSource,这在单元格失去焦点时发生。如果要立即提交修改,可以处理 CurrentCellDirtyStateChanged 事件,并在处理程序中调用CommitEdit方法: 因此,如果您想以更快的速度推送更改,可以致电:
dataGridView1.CommitEdit(DataGridViewDataErrorContexts.Commit);
此方法在更改后立即提交每个更改。
因此,对于我的代码,我在所选项目之前添加代码并且它有效,并且提交的位置非常重要,并且首选将其放入CellContentClick
//get the selected item
Detail_shanuDGV.CommitEdit(DataGridViewDataErrorContexts.Commit);
List<DataGridViewRow> selectedRows = (from row in Detail_shanuDGV.Rows.Cast<DataGridViewRow>()
where Convert.ToBoolean(row.Cells["checkBoxColumn1"].Value) == true
select row).ToList();
if ((selectedRows.Count > 1) || (selectedRows.Count == 0))
MessageBox.Show("Plz select au moin un ligne...");
else
{
foreach (DataGridViewRow row in selectedRows)
{
//to do functions
}
}