Bonjour,

Dans une table sous SQL server j'ai un champ "numéro" et un champ "IncrementON".
En mode ajout ou modification, le champ numéro s'incrémente automatiquement de la façon suivante :
Si (IncrementON = True et numéro = 0) alors Numero = max(Numero) + 1
Ainsi dans la table il n'y a pas de numéro en doublon, sauf 0.

J'arrive très bien à gérer cela grâce à un trigger :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
SET NOCOUNT ON;
DECLARE @Numero integer;
DECLARE @idTable integer;
DECLARE cursor1 CURSOR FOR 	SELECT IdTable1 FROM inserted WHERE IncrementON = 1 AND Numero = 0
OPEN cursor1;
BEGIN TRANSACTION tr1;
SELECT @Numero = MAX(Numero) FROM Table1
FETCH NEXT FROM cursor1 INTO @idTable;
WHILE @@FETCH_STATUS = 0
BEGIN
SET @Numero = @Numero + 1
UPDATE Table1 SET Numero = @Numero WHERE  IdTable1 = @idTable
FETCH NEXT FROM cursor1 INTO @idTable;
END
COMMIT TRANSACTION tr1;
CLOSE cursor1;
DEALLOCATE cursor1;
Problème dans mon code C#/Windows form/DatagridView/bindingsource/linq :
Lors du context.SubmitChanges(), la colonne "Numero" reste à 0.
Si j'ajoute aContext.Refresh(RefreshMode.OverwriteCurrentValues, context.Table1) la colonne se met à jour, mais il faut attendre 11 à 20 secondes avant de reprendre la main, le chargement initial ne prends qu'une seconde pour une centaine d'enregistrements dans la table actuellement.

Piste :
1/ soit accélérer le refresh : comment ?
2/ soit transformer le trigger en code et le placer dans mon programme : où placer le code et à quoi ressemble-t-il ?
3/ Reloader entièrement les données du context => mais comment ?
Avez-vous une idée?

Merci beaucoup.
Laumon.