1

クラスに登録されている学生のリストを表示するWindowsフォームDataGridViewがあります。DataGridViewのコンボボックス列には、生徒を移動できる代替クラスのリストが表示されます。

ユーザーがコンボボックスを使用して別のクラスを選択し、次にDataGridViewで別の行を選択すると、編集されたばかりの行がDataGridViewから削除されます。これは、基準を満たさなくなったためです。

私の問題は、ユーザーが別の行を選択するのを待たずに、ユーザーがコンボボックスから新しい値を選択したときにこれを実行する必要があることです。その理由は、ユーザーが別の行を選択するまで行が削除されない場合、削除された行によって残されたギャップを埋めるために行が上に移動し、現在選択されている行がユーザーが選択した行の下の行になり、混乱する可能性があるためです。ユーザー。

DataGridViewのRefreshメソッドを呼び出そうとしましたが、ユーザーが別の行を選択するまで、編集された行は削除されません。

4

2 に答える 2

0

最終的には次のように回避しました。フィルタリングされたDataViewをDataGridViewのデータソースとして直接使用する代わりに、DataView.ToTable()メソッドを使用して、フィルタリングされたレコードのみを含むDataTableを取得し、それをDataGridViewのデータソースとして使用しました。DataGridViewはフィルタリングされたDataViewにバインドされなくなったため、選択が変更されたときに、変更された行がDataGridViewから削除されなくなりました。ユーザーが[保存]ボタンをクリックすると、DataTableを元のDataSetにマージして変更を保存し、DataView.ToTable()メソッドを再度呼び出し、DataGridViewをDataTableに再バインドして、変更されたレコードを削除します。クレジットは私の同僚のマイケルの提案によるものです、マイケルに感謝します。

于 2012-12-13T15:05:36.463 に答える
0

myGrid.EndEdit();コンボで選択したインデックスが変更された後、変更をグリッドに投稿してみてください。

更新を強制するには、現在のセルを変更する必要がある場合もあります。

DataGridViewCell currentCell = myGrid.CurrentCell;
try {             
    myGrid.EndEdit();
    myGrid.CurrentCell = null;
    myGrid.CurrentCell = currentCell;
}
catch {
    myGrid.CurrentCell = currentCell;
    myGrid.CurrentCell.Selected = true; 
}
于 2012-12-05T14:30:16.843 に答える