[LINQ] Problème de mise-à-jour

Le
Sébastien Mornas
Bonjour,
J'ai un problème dans mon site ASP.NET 3.5 avec LINQ; j'éspère que vous
pourrez m'apporter des réponses et je vous remerci si vous passez quelques
minutes à lire ce message.

J'ai donc une page ASP.NET contenant un <asp:Button> et un <asp:Table> (je
simplifie le problème). Admettons que le bouton ajoute un enregistrement
dans une table d'une base de donnée SQL Server 2005 à l'aide d'une requète
LINQ. Le tableau est mise à jours par l'évenement Load de la page pour
afficher tous les enregistrements de la table dans la base de données.
Encore une fois j'utilise une requète LINQ pour mettre à jour le tableau.

Le problème: quand j'ajoute un enregistrement la requete s'effectue
correctement, mais quand la page se ré-affiche le tableau n'est pas à jour.
La requète LINQ ne voit tout simplement pas le dernier enregistrement ajouté
à la base. Si je rafraichi la page manuellement par contre l'enregistrement
apparait comme par magie. J'ai essayé de mettre des context.Refresh() un
peu partout, rien n'y fait. Si vous avez une idée, surtout n'hésiter pas !
Merci encore.

Code:
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
using (var c = new TestDataContext())
{
var query = from q in c.GetTable<DataTable1>() select q.Name;
foreach (string s in query)
{
TableRow row = new TableRow();
TableCell cell = new TableCell();
cell.Controls.Add(new Label() { Text = s });
row.Cells.Add(cell);
MyTable.Rows.Add(row);
}
}
}
protected void Button1_Click(object sender, EventArgs e)
{
string[] strings = { "hello", "world", "foo", "bar", "toto" };
Random r = new Random(System.DateTime.Now.Millisecond);
string s = strings[r.Next(5)];
using (var c = new TestDataContext())
{
c.GetTable<DataTable1>().InsertOnSubmit(new DataTable1() { Name
= s });
c.SubmitChanges();
}
}
}

--
Sébastien Mornas
EPITA / 3IE
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Patrice
Le #16409661
Vérifier dans quel ordre sont exécutés les évènements... A priori c'est un
simple problème d'ordonnancement. Je pense que dans le "load" on récupère
les données pour affichage PUIS dans le click on ajoute une donnée
supplémentaire qui n'a donc pas été récupérée au préalable.

Déplacer la récupération des données plus tard (par exemple dans le
prérender ou dans un "DataBind" quitte à l'appliquer explicitement dans le
click du botuon si besoin) devrait résoudre le problème...

--
Patrice


"Sébastien Mornas" discussion :
Bonjour,
J'ai un problème dans mon site ASP.NET 3.5 avec LINQ; j'éspère que vous
pourrez m'apporter des réponses et je vous remerci si vous passez quelques
minutes à lire ce message.

J'ai donc une page ASP.NET contenant un <asp:Button> et un <asp:Table> (je
simplifie le problème). Admettons que le bouton ajoute un enregistrement
dans une table d'une base de donnée SQL Server 2005 à l'aide d'une requète
LINQ. Le tableau est mise à jours par l'évenement Load de la page pour
afficher tous les enregistrements de la table dans la base de données.
Encore une fois j'utilise une requète LINQ pour mettre à jour le tableau.

Le problème: quand j'ajoute un enregistrement la requete s'effectue
correctement, mais quand la page se ré-affiche le tableau n'est pas à
jour. La requète LINQ ne voit tout simplement pas le dernier
enregistrement ajouté à la base. Si je rafraichi la page manuellement par
contre l'enregistrement apparait comme par magie. J'ai essayé de mettre
des context.Refresh(...) un peu partout, rien n'y fait. Si vous avez une
idée, surtout n'hésiter pas ! Merci encore.

Code:
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
using (var c = new TestDataContext())
{
var query = from q in c.GetTable<DataTable1>() select q.Name;
foreach (string s in query)
{
TableRow row = new TableRow();
TableCell cell = new TableCell();
cell.Controls.Add(new Label() { Text = s });
row.Cells.Add(cell);
MyTable.Rows.Add(row);
}
}
}
protected void Button1_Click(object sender, EventArgs e)
{
string[] strings = { "hello", "world", "foo", "bar", "toto" };
Random r = new Random(System.DateTime.Now.Millisecond);
string s = strings[r.Next(5)];
using (var c = new TestDataContext())
{
c.GetTable<DataTable1>().InsertOnSubmit(new DataTable1() { Name
= s });
c.SubmitChanges();
}
}
}

--
Sébastien Mornas
EPITA / 3IE



Sébastien Mornas
Le #16409931
Merci Patrice de votre réponse, je vais essayer de changer les évenements
qui mettent à jour le tableau.

"Patrice"
Vérifier dans quel ordre sont exécutés les évènements... A priori c'est un
simple problème d'ordonnancement. Je pense que dans le "load" on récupère
les données pour affichage PUIS dans le click on ajoute une donnée
supplémentaire qui n'a donc pas été récupérée au préalable.

Déplacer la récupération des données plus tard (par exemple dans le
prérender ou dans un "DataBind" quitte à l'appliquer explicitement dans le
click du botuon si besoin) devrait résoudre le problème...

--
Patrice


"Sébastien Mornas" discussion :
Bonjour,
J'ai un problème dans mon site ASP.NET 3.5 avec LINQ; j'éspère que vous
pourrez m'apporter des réponses et je vous remerci si vous passez
quelques minutes à lire ce message.

J'ai donc une page ASP.NET contenant un <asp:Button> et un <asp:Table>
(je simplifie le problème). Admettons que le bouton ajoute un
enregistrement dans une table d'une base de donnée SQL Server 2005 à
l'aide d'une requète LINQ. Le tableau est mise à jours par l'évenement
Load de la page pour afficher tous les enregistrements de la table dans
la base de données. Encore une fois j'utilise une requète LINQ pour
mettre à jour le tableau.

Le problème: quand j'ajoute un enregistrement la requete s'effectue
correctement, mais quand la page se ré-affiche le tableau n'est pas à
jour. La requète LINQ ne voit tout simplement pas le dernier
enregistrement ajouté à la base. Si je rafraichi la page manuellement par
contre l'enregistrement apparait comme par magie. J'ai essayé de mettre
des context.Refresh(...) un peu partout, rien n'y fait. Si vous avez une
idée, surtout n'hésiter pas ! Merci encore.

Code:
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
using (var c = new TestDataContext())
{
var query = from q in c.GetTable<DataTable1>() select q.Name;
foreach (string s in query)
{
TableRow row = new TableRow();
TableCell cell = new TableCell();
cell.Controls.Add(new Label() { Text = s });
row.Cells.Add(cell);
MyTable.Rows.Add(row);
}
}
}
protected void Button1_Click(object sender, EventArgs e)
{
string[] strings = { "hello", "world", "foo", "bar", "toto" };
Random r = new Random(System.DateTime.Now.Millisecond);
string s = strings[r.Next(5)];
using (var c = new TestDataContext())
{
c.GetTable<DataTable1>().InsertOnSubmit(new DataTable1() {
Name = s });
c.SubmitChanges();
}
}
}

--
Sébastien Mornas
EPITA / 3IE






Sébastien Mornas
Le #16409921
En effet l'évenement PreRender permet de résoudre mon problème. Merci
infiniment!

Sébastien

"Sébastien Mornas"
Merci Patrice de votre réponse, je vais essayer de changer les évenements
qui mettent à jour le tableau.

"Patrice"
Vérifier dans quel ordre sont exécutés les évènements... A priori c'est
un simple problème d'ordonnancement. Je pense que dans le "load" on
récupère les données pour affichage PUIS dans le click on ajoute une
donnée supplémentaire qui n'a donc pas été récupérée au préalable.

Déplacer la récupération des données plus tard (par exemple dans le
prérender ou dans un "DataBind" quitte à l'appliquer explicitement dans
le click du botuon si besoin) devrait résoudre le problème...

--
Patrice


"Sébastien Mornas" discussion :
Bonjour,
J'ai un problème dans mon site ASP.NET 3.5 avec LINQ; j'éspère que vous
pourrez m'apporter des réponses et je vous remerci si vous passez
quelques minutes à lire ce message.

J'ai donc une page ASP.NET contenant un <asp:Button> et un <asp:Table>
(je simplifie le problème). Admettons que le bouton ajoute un
enregistrement dans une table d'une base de donnée SQL Server 2005 à
l'aide d'une requète LINQ. Le tableau est mise à jours par l'évenement
Load de la page pour afficher tous les enregistrements de la table dans
la base de données. Encore une fois j'utilise une requète LINQ pour
mettre à jour le tableau.

Le problème: quand j'ajoute un enregistrement la requete s'effectue
correctement, mais quand la page se ré-affiche le tableau n'est pas à
jour. La requète LINQ ne voit tout simplement pas le dernier
enregistrement ajouté à la base. Si je rafraichi la page manuellement
par contre l'enregistrement apparait comme par magie. J'ai essayé de
mettre des context.Refresh(...) un peu partout, rien n'y fait. Si vous
avez une idée, surtout n'hésiter pas ! Merci encore.

Code:
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
using (var c = new TestDataContext())
{
var query = from q in c.GetTable<DataTable1>() select q.Name;
foreach (string s in query)
{
TableRow row = new TableRow();
TableCell cell = new TableCell();
cell.Controls.Add(new Label() { Text = s });
row.Cells.Add(cell);
MyTable.Rows.Add(row);
}
}
}
protected void Button1_Click(object sender, EventArgs e)
{
string[] strings = { "hello", "world", "foo", "bar", "toto" };
Random r = new Random(System.DateTime.Now.Millisecond);
string s = strings[r.Next(5)];
using (var c = new TestDataContext())
{
c.GetTable<DataTable1>().InsertOnSubmit(new DataTable1() {
Name = s });
c.SubmitChanges();
}
}
}

--
Sébastien Mornas
EPITA / 3IE










Jérôme PINNEAU
Le #16490681
quand je regarde des lignes de codes qui utilise LINQ, je trouve que le code
n'est vraiment pas lisible.
Mélanger ainsi du semblant de SQL avec du code C# !!
Quelqu'un a un avis la dessus ?

Vladam

"Sébastien Mornas" news:
Bonjour,
J'ai un problème dans mon site ASP.NET 3.5 avec LINQ; j'éspère que vous
pourrez m'apporter des réponses et je vous remerci si vous passez quelques
minutes à lire ce message.

J'ai donc une page ASP.NET contenant un <asp:Button> et un <asp:Table> (je
simplifie le problème). Admettons que le bouton ajoute un enregistrement
dans une table d'une base de donnée SQL Server 2005 à l'aide d'une requète
LINQ. Le tableau est mise à jours par l'évenement Load de la page pour
afficher tous les enregistrements de la table dans la base de données.
Encore une fois j'utilise une requète LINQ pour mettre à jour le tableau.

Le problème: quand j'ajoute un enregistrement la requete s'effectue
correctement, mais quand la page se ré-affiche le tableau n'est pas à
jour. La requète LINQ ne voit tout simplement pas le dernier
enregistrement ajouté à la base. Si je rafraichi la page manuellement par
contre l'enregistrement apparait comme par magie. J'ai essayé de mettre
des context.Refresh(...) un peu partout, rien n'y fait. Si vous avez une
idée, surtout n'hésiter pas ! Merci encore.

Code:
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
using (var c = new TestDataContext())
{
var query = from q in c.GetTable<DataTable1>() select q.Name;
foreach (string s in query)
{
TableRow row = new TableRow();
TableCell cell = new TableCell();
cell.Controls.Add(new Label() { Text = s });
row.Cells.Add(cell);
MyTable.Rows.Add(row);
}
}
}
protected void Button1_Click(object sender, EventArgs e)
{
string[] strings = { "hello", "world", "foo", "bar", "toto" };
Random r = new Random(System.DateTime.Now.Millisecond);
string s = strings[r.Next(5)];
using (var c = new TestDataContext())
{
c.GetTable<DataTable1>().InsertOnSubmit(new DataTable1() { Name
= s });
c.SubmitChanges();
}
}
}

--
Sébastien Mornas
EPITA / 3IE



Publicité
Poster une réponse
Anonyme