C# 仅当按下某个键时提交DataGridView单元格编辑
我有一个附加到XML数据源的DataGridView。每次用户编辑单元格时,程序都会自动更新相对的XML文件。要处理编辑,我将使用以下两种方法:C# 仅当按下某个键时提交DataGridView单元格编辑,c#,.net,winforms,datagridview,C#,.net,Winforms,Datagridview,我有一个附加到XML数据源的DataGridView。每次用户编辑单元格时,程序都会自动更新相对的XML文件。要处理编辑,我将使用以下两种方法: private void dataGridView1_CellBeginEdit(object sender, DataGridViewCellCancelEventArgs e) { //do edit } private void dataGridView1_CellEndEdit(object sender, DataGridVie
private void dataGridView1_CellBeginEdit(object sender, DataGridViewCellCancelEventArgs e)
{
//do edit
}
private void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
//do edit
}
编辑工作就是这样,用户单击单元格并更改值。然后他应该按Enter键使一切正常工作,但例如,如果他在单元格外单击鼠标按钮,或者如果他用左箭头键走出单元格,程序就会出错。它无论如何都能工作,因为我成功地处理了这个异常,但我希望我的程序能更好地处理这种情况。例如,当用户输入一个单元格时,我想拒绝他使用箭头键进入其他单元格。我试图捕获键下事件,但没有成功:
private void dataGridView1_KeyDown(object sender, KeyEventArgs e)
{
if ((e.KeyCode == Keys.Left) || (e.KeyCode == Keys.Right)) //etc...
{
e.Handled = true;
}
}
基本上,当开始编辑时,我只想在用户按Enter键时编辑单元格。有什么想法吗?如果控件(在本例中为单元格)在编辑过程中失去焦点(用户按Esc键,在控件外单击鼠标等…)我需要阻止EndEdit
事件启动。而是使用RowValidating
事件,允许您在数据无效的情况下取消操作。而是使用RowValidating
事件,允许您在数据无效的情况下取消操作。您可以使用RowValidating事件取消操作要按以下方式保存的事件和行验证事件:
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
}
您可以使用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
}
这如何确保仅在按下Enter键时保存编辑?问题并不是关于输入数据的验证。您对ValidateData是什么意思?对我来说,任何值都是好的,我只是想防止用户走出选定的单元格。我该如何处理ValidateData?这如何确保仅在按下Enter键时保存编辑?问题并不是关于输入数据的验证。您对ValidateData是什么意思?对我来说,任何值都是好的,我只是想防止用户走出选定的单元格。我该如何处理ValidateData?精确副本:精确副本: