0


0

DataGridView.RowValidatingの問題を修正する方法

DataGridView`をデータベースのデータテーブルにリンクしようとしています。 `DataGridView`がデータテーブルを自動的に更新するようにします([保存]またはそのようなものをクリックする必要はありません)。 これを行う最良の方法は、http://msdn.microsoft.com/query/dev10.query?appId = Dev10IDEF1&l = EN-US&k = k%28SYSTEM.WINDOWS.FORMS.DATAGRIDVIEW.ROWVALIDATING% 29; k%28TargetFrameworkMoniker-%22.NETFRAMEWORK、VERSION%3dV4.0%22%29; k%28DevLang-CSHARP%29&rd = true [`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);
        }
    }

1 Answer


0


私が解決しようとしているのと同じ問題を抱えています。 私は何か面白いものを見つけました。 マウスをクリックしてnewrowをクリックすると、セル検証が行われ、次に行検証が行われます。 ただし、単にEnterキーを押すと、セルの検証のみが行われます。 この動作を変更できるかどうかを確認するためにEnterキーをトラップしようとしましたが、EnterキーはKeyUpイベントまたはKeyDownイベントの新しい行でトラップしません。