4

DataGridViewにバインドされているBindingSourceに新しい行を追加しています

source.AddNew();

この後、BindingSourceを使用して、新しく追加された行を取得し、ソート時にDataGridViewの次の行を返します。

ROW "A"
ROW "B" <- myBindingSource.AddNew();
ROW "C"

myBindingSource.CurrentはROW"C"を提供します。(DataGridViewで選択された行になりました)

新しく追加された行だけを更新したいので、これが必要です

            DataRowView drv = (DataRowView)myBindingSource.Current;
            myTableAdapter.Update(drv.Row);

テーブル全体ではありません。

            myTableAdapter.Update(myDataSet.myTable);

また、挿入後にDataGridViewでこの新しく追加された行を選択してもらいたいと思います。

なんらかの方法で可能ですか?

4

5 に答える 5

8

このタスクでは、次のように DataGridView からのイベントを使用します。

private void RowsAdded(object sender, DataGridViewRowsAddedEventArgs e)
{
    this.Rows[e.RowIndex].Selected = true;
} 

これにより、新しく追加された行が選択済みとしてマークされます。

于 2010-01-22T08:31:45.427 に答える
1

出来ますか?私は言うでしょうyes

これに関連するアリクルは次のとおりです。DataGridView
とBindingSource(Joelのフォーラム)

于 2009-11-03T00:35:48.973 に答える
1

Dont know id its the best solution but for instance looks better than iterate.

        DataRowView drv = (DataRowView)source.AddNew();
        grupoTableAdapter.Update(drv.Row);
        grupoBindingSource.Position = grupoBindingSource.Find("ID", drv.Row.ItemArray[0]);
于 2009-11-03T02:13:18.247 に答える
0

これを達成するための 1 つの方法を既に特定しました。それを達成する別の方法は、UI を完全に無視することです。

foreach (DataRow r in myTable.AsEnumerable().Where(x => x.RowState == DataRowState.Added))
{
    myTableAdapter.Update(r);
}

もちろん、これは追加されたばかりの行ではなく、テーブルに追加さUpdateれたすべての行を呼び出すため、テーブルに新しい行を追加する2つの異なる方法があるというクレイジーなシナリオがある場合は機能しません。

于 2009-11-03T02:41:53.197 に答える