我有一个附加到XML DataSource的DataGridView。每次用户编辑单元格时,程序都会自动更新相关的XML文件。为了处理编辑我正在使用两者:
private void dataGridView1_CellBeginEdit(object sender, DataGridViewCellCancelEventArgs e)
{
//do edit
}
private void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
//do edit
}
编辑就是这样,用户点击单元格并更改值。然后他应该按 Enter 键使一切正常,但是例如,如果他在外面单击鼠标按钮,或者如果他用左箭头键移出单元格,则程序会混乱。无论如何它仍然有效,因为我设法处理这个异常,但我希望我的程序更好地处理这种情况。例如,当用户进入一个单元格时,我想拒绝他使用箭头键进入其他单元格。我试图抓住KeyDown
事件,但它不起作用:
private void dataGridView1_KeyDown(object sender, KeyEventArgs e)
{
if ((e.KeyCode == Keys.Left) || (e.KeyCode == Keys.Right)) //etc...
{
e.Handled = true;
}
}
基本上,当开始编辑开始时,我想仅在用户按 Enter 时编辑单元格。有任何想法吗?如果控件(在这种情况下是单元格)在编辑期间失去焦点(用户按下 Esc ,在控件外单击鼠标等...)我需要阻止EndEdit
从开始的事件。
答案 0 :(得分:2)
您可以使用RowValidating事件取消事件,并使用RowValidated事件进行保存,如下所示:
private void dataGridView1_RowValidating(object sender, DataGridViewCellCancelEventArgs e)
{
string data = dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString();
if(!ValidateData(data))
e.Cancel = true;
}
private bool ValidateData(string data)
{
// do validation which u want to do.
}
private void dataGridView1_RowValidated(object sender, DataGridViewCellEventArgs e)
{
string data = dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString();
SaveData(data);
}
private void SaveData(string data)
{
// save data
}
答案 1 :(得分:1)
而是使用允许您在无效数据的情况下取消操作的RowValidating
事件。