J'ai cherché un certain temps pour une sorte d'un mécanisme qui permettrait de détecter chaque fois qu'un DataGridViewRow
d'un DataGridView
changé, une fois que DataGridView
ne dispose pas d'un moyen simple de le faire. Et je l'ai fait cette mise en œuvreDataGridView Row mise à jour événement
public partial class MyDatagrid : DataGridView
{
public event EventHandler<RowChangingArgs> RowUpdating;
public MyDatagrid()
{
InitializeComponent();
this.CellBeginEdit += OnCellBeginEdit;
}
private DataGridViewRow oldRow;
private int currentRow;
private void OnCellBeginEdit(object sender, DataGridViewCellCancelEventArgs args)
{
if(oldRow == null || currentRow != args.RowIndex)
{
if(currentRow != args.RowIndex && oldRow != null)
{
var newRow = this.Rows[args.RowIndex];
foreach (var cell in oldRow.Cells)
{
foreach (var cell1 in newRow.Cells.Cast<object>().Where(cell1 => !cell.Equals(cell1)))
{
if(RowUpdating!= null)
RowUpdating.Invoke(this, new RowChangingArgs { OldRow = oldRow, NewRow = newRow});
oldRow.Dispose();
goto called;
}
}
}
called:
oldRow = this.Rows[args.RowIndex].Clone() as DataGridViewRow;
currentRow = args.RowIndex;
}
}
public class RowChangingArgs : EventArgs
{
public DataGridViewRow OldRow { get; set; }
public DataGridViewRow NewRow { get; set; }
}
}
Exemple:
utilisateur modifie la ligne 1 et la colonne 1, conserve en éditant n colonnes de même rang. L'utilisateur commence à modifier une autre ligne. Incendie avec le contenu ancien de la ligne 1 et le nouveau contenu de la ligne 1.
Est-ce une bonne façon de procéder, ou ai-je oublié quelque chose?
Quel est le but de votre 'dataGridView' hérité? – spajce
détecter chaque fois qu'un DataGridViewRow d'un DataGridView a été modifié. Lancez un événement lorsque l'utilisateur a terminé de changer de ligne. Ainsi, pendant que l'utilisateur édite la même ligne, il mémorise les modifications de ligne en cours. –
vous pouvez utiliser la liaison de données et mettre en œuvre beginedit(), endedit(), canceledit() (décrit ici http://www.codeproject.com/Articles/16408/Discard-changes-in-business-objects) pour mémoriser la ligne en cours . –