2009-04-07 9 views
0

Je travaille sur une application Web Forms et j'ai besoin de code HTML dans 2-3 autres endroits.
J'ai créé le contrôle .ascx comme si ce qui représente le code répété:PartialView dans les formulaires Web

protected override void Render(HtmlTextWriter writer) 
    { 
     StringBuilder str = new StringBuilder(); 

     while (connRef.Read()) 
     { 
      str.Append(connRef["some_database_field"]); 
     } 

     writer.Write(str.ToString()); 

     base.Render(writer); 
    } 

connRef est une référence à l'objet DataReader que je passe où je besoin de ce morceau de code à rendre.
Dans un autre contrôle, j'utiliser le code suivant:

 MSSqlConn s = new MSSqlConn(); 
     StringBuilder str = new StringBuilder(); 

     s.OpenConn("select * from notes order by note_date desc;"); 

     notes.note c = (notes.note)Page.LoadControl(@"/controls/notes/note.ascx"); 
     c.ID = "note"; 
     c.connRef = s; 

     while (s.Read()) 
     { 
      str.Append(Html.RenderControl(c)); 
     } 
     s.CloseConn(); 

     Response.Write(str.ToString()); 

MSSqlConn est ma classe pour la connexion de base de données. RenderControl rend tout contrôle sous la forme d'une chaîne HTML.

s dans le second extrait de code renvoie un seul enregistrement au lieu de deux. Pour une raison quelconque, s se ferme si je passe la référence à un autre contrôle (c.connRef = s).

Peut-être qu'il me manque quelque chose, je ne sais pas.

Je suis désolé si je ne l'avais pas bien expliqué.

Répondre

2

Votre problème est que vous appelez la méthode Read() deux fois. Voici ce que fait votre code:

 while (s.Read()) 
     { 
      while (connRef.Read()) 
      { 
       str.Append(connRef["some_database_field"]); 
      } 

     } 

Chaque appel à la méthode Read() avance le lecteur de données d'un enregistrement. Vous devez supprimer l'une des boucles while.

Vous devez également noter que si vous passez ce lecteur de données à plusieurs contrôles utilisateur, vous devrez le réinitialiser pour recommencer depuis le début pour chaque nouveau contrôle utilisateur.

+0

Votre droit. Je me suis concentré sur la fonctionnalité que j'ai oublié que j'ai réellement mis Read dans un autre Read. – lopkiju

Questions connexes