Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

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

4 réponses
Avatar
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

4 réponses

Avatar
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" a écrit dans le message de groupe de
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



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

"Patrice" <http://www.chez.com/scribe/> a écrit dans le message de news:

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" a écrit dans le message de groupe de
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






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

Sébastien

"Sébastien Mornas" a écrit dans le message de news:

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

"Patrice" <http://www.chez.com/scribe/> a écrit dans le message de news:

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" a écrit dans le message de groupe de
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










Avatar
Jérôme PINNEAU
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" a écrit dans le message de
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