0

sqladapterデータベースの値を から直接変更するためにを使用していdatagridviewます。

この目的のために、以下のコードを使用します。

private void ok_Modify_Click(object sender, EventArgs e) {
    //modify mod = new modify();
    //modify_gv.DataSource = mod.TabletoMod(tickerBox.Text, FundBox.Text);        
    connetionString = Properties.Settings.Default.TraFra;
    connection = new SqlConnection(connetionString);
    Sql = "select * from Approval where Ticker ='" + tickerBox.Text + "'";
    try {
        connection.Open();
        adapter = new SqlDataAdapter(Sql, connection);
        adapter.Fill(ds);
        connection.Close();
        modify_gv.DataSource = ds.Tables[0];
    } catch (Exception ex) {
        MessageBox.Show(ex.ToString());
    }
}

private void modify_gv_CellValueChanged(object sender, DataGridViewCellEventArgs e) {
    try {
        cmdBuilder = new SqlCommandBuilder(adapter);
        changes = ds.GetChanges();
        if(changes != null)
            adapter.Update(changes);
        //   MessageBox.Show("Changes Done");
    } catch (Exception ex) {
        MessageBox.Show(ex.ToString());
    }
}

ただし、で変更を行うたびにdatagridview、変数「変更」は常にnullです。なぜなのかご存知ですか?

4

2 に答える 2

1

「現在の」行から移動するまで、DataGridView コントロールは基になるデータソースに変更を書き込まないことに気付くかもしれません。したがって、CellValueChanged イベントが発生している間は、バインドされた DataRow に変更が書き込まれていません。

たとえば、DataTable オブジェクトの "RowChanged" イベントを処理する場合、GetChanges は変更された行を返します(編集中の行を離れたときにのみイベントが発生することも確認できます)

DataGridView コントロールが基になる DataRow に変更を強制的に書き込む方法があると確信していますが、試していません(BeginEdit/EndEdit ?)

于 2012-08-14T16:24:21.977 に答える
0

ds.AcceptChanges()前に電話するds.GetChanges()

于 2014-07-08T14:30:24.853 に答える