Comment récupérer l'id après insertion faite par un FormView qui utilise un ObjectDataSource plugué sur un DataSet typé ?

Le problème de la méthode générée par le designer, est qu'elle utilise un ExecuteNonQuery. Elle renvoie donc le nombre de ligne insérée.

Donc comment faire sans tout refaire ?

  1. Recréez une méthode Insert à l'aide du designer.
  2. Finissez la requête par SELECT SCOPE_IDENTITY(), Ex : "INSERT INTO ... ; SELECT SCOPE_IDENTITY()" et enregistrer pour sortir de l'assistant
  3. Changer la propriété ExecuteMode de la requête (F4) en Scalar
  4. Changer la méthode Insert de votre ObjectDataSource
  5. Utiliser la méthode Inserted de votre ObjectDataSource
protected void OdsFv_Inserted(object sender, ObjectDataSourceStatusEventArgs e)
{
     IdInserted = (int)e.ReturnValue; 
}

Et voilà.