2009-11-19 2 views
0

Je crée dynamiquement du code HTML dans un contrôle WebBrowser. La plupart des éléments semblent apparaître correctement, à l'exception d'une table.Les tables créées par programme n'apparaissent pas dans le contrôle WebBrowser

Mon code est:

var doc = webBrowser1.Document; 
var body = webBrowser1.Document.Body; 
body.AppendChild(webBrowser1.Document.CreateElement("hr")); 

var div = doc.CreateElement("DIV"); 
var table = doc.CreateElement("TABLE"); 
var row1 = doc.CreateElement("TR"); 

var cell1 = doc.CreateElement("TD"); 
cell1.InnerText = "Cell 1"; 
row1.AppendChild(cell1); 

var cell2 = doc.CreateElement("TD"); 
cell2.InnerText = "Cell 2"; 
row1.AppendChild(cell2); 

table.AppendChild(row1); 
div.AppendChild(table); 
body.AppendChild(div); 

body.AppendChild(webBrowser1.Document.CreateElement("hr")); 

Les balises HTML sont visibles dans la propriété outerHTML du corps, mais tout ce qui apparaît dans le navigateur sont les deux règles horizontales.

Si je remplace

div.AppendChild(table); 

avec

div.InnerHtml = table.OuterHtml 

alors tout apparaît comme prévu.

+0

Avez-vous comparé la source pour voir la différence? – joerage

+0

Merci joerage - Il me manquait à l'intérieur de la table - je n'avais pas réalisé qu'il y avait une différence entre le HTML et le DOM comme ça. –

Répondre

0

Pour connaître le contenu de la table pour être visible ses balises doivent être à l'intérieur d'un < tbody>

var tbody = doc.CreateElement("TBODY"); 

... 

tbody.AppendChild(row1); 
table.AppendChild(tbody); 
div.AppendChild(table); 
0

Utilisez les éléments THEAD, TBODY et TFOOT

Questions connexes