我正在尝试将DataGridView
链接到数据库中的数据表。我希望DataGridView
自动更新数据表(无需点击“保存”或类似的东西)。在我看来,最好的方法是处理RowValidating
事件。我一直在测试这段代码,这是我的问题:假设我在DataGridView
的最后一个空行中输入第1行(第1行,但不一定是第一行)并输入一些错误数据(不应存在的空值或应存在数字的文本等)。然后我按Enter键,出现一个新的空白行(第2行),没有错误消息。在这个新行中,我输入了一些其他数据,错误与否,然后再按Enter键。现在我收到一条错误消息,第1行出现错误气泡,但焦点在第2行,如果我尝试编辑第1行,我会再次收到错误消息并且焦点停留在第2行。我该怎么处理?
public Form1()
{
InitializeComponent();
sqlCeConnection.Open();
table = new DataTable();
sqlCeDataAdapter = new SqlCeDataAdapter("SELECT * FROM test", sqlCeConnection);
SqlCeCommandBuilder cBuilder = new SqlCeCommandBuilder(sqlCeDataAdapter);
sqlCeDataAdapter.Fill(table);
BindingSource bSource = new BindingSource();
bSource.DataSource = table;
dataGridView1.DataSource = bSource;
}
private void dataGridView1_RowValidating(object sender, DataGridViewCellCancelEventArgs e)
{
try
{
sqlCeDataAdapter.Update(table);
}
catch (Exception ex)
{
e.Cancel = true;
MessageBox.Show(ex.Message);
}
}
答案 0 :(得分:0)
我有同样的问题,我正试图解决。我发现了一些有趣的东西。如果鼠标单击以进行新建单元验证,则行验证。但是,如果您只需按Enter键,则只会进行单元格验证。我试图捕获Enter键以查看是否可以修改此行为,但Enter键不会捕获KeyUp或KeyDown事件上的新行。