不是这个意思,下面是个举例. HtmlTable ht = new HtmlTable(); string s = KingOper.FileOper.getStringFromTxt(Server.MapPath("")+"\\index.htm"); StringReader sr = new StringReader(s); ht.InnerHtml = s;//但这句报错.
HtmlTable ht = new HtmlTable(); DataSet ds = new DataSet(); string s = KingOper.FileOper.getStringFromTxt(Server.MapPath("")+"\\index.htm"); StringReader sr = new StringReader(s); ds.ReadXml(sr);//ds也试过,不行.html格式太宽松. ht.InnerHtml = s;//不支持InnerHtml方法,既然不支持,不知道要这个属性干吗。汗~~我用的是vs2008
<asp:Literal ID="Literal1" runat="server"></asp:Literal>
后台
StringBuilder sb = new StringBuilder();
sb.Append("<table>");
sb.Append("<tr>");
sb.Append("<td>hello world");
sb.Append("</td>");
sb.Append("</tr>");
sb.Append("</table>");
Literal1.Text = sb.ToString();
我的意思是,将html代码存到了数据库,
在.cs中
HtmlTable ht = new HtmlTable();
问题是:如何才能将数据库中的html字符串赋给ht?
ht貌似有个innerHTML属性,但不支持
ht.innerHTML = s;(s就是从数据库读出来的html字符串)
遍历htmltable中的单元格,将特殊的字符串转换成一个自定义的控件。这个已经实现.
是后面的解决了,前面的没解决。
是一个在线拖动就可以生成网站的项目,以前的做法是做好多好多页面作为模板.但随着模板的不断增加,文件也聚增。所以想做一个通用的页面,从数据库读取html布局格式。然后将格式中特定的字符串转换为自定义控件.现在碰到的一个巨大问题是:
数据库里的HTML源代码如何才能赋给HtmlTable??to ysmz555:
使用模板,把数据库中的数据读入到模板中。谢谢,不过不使用模板,后期还要对布局的html做加工
但是如果表格有嵌套的话,就报错。ds的readxml要求格式很严谨,html的太宽松了,所以不考虑ds
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>无标题页</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<%NewTable();%>
</div>
</form>
</body>
</html>
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
} public void NewTable()
{
Response.Write("<tr><td><input type='text'value='111'/></td><tr>");
}
}
Response.Write("<table><tr><td><input type='text'value='111'/></td></tr></table>");
不是这个意思,下面是个举例.
HtmlTable ht = new HtmlTable();
string s = KingOper.FileOper.getStringFromTxt(Server.MapPath("")+"\\index.htm");
StringReader sr = new StringReader(s);
ht.InnerHtml = s;//但这句报错.
DataSet ds = new DataSet();
string s = KingOper.FileOper.getStringFromTxt(Server.MapPath("")+"\\index.htm");
StringReader sr = new StringReader(s);
ds.ReadXml(sr);//ds也试过,不行.html格式太宽松.
ht.InnerHtml = s;//不支持InnerHtml方法,既然不支持,不知道要这个属性干吗。汗~~我用的是vs2008
只是说明,要从字符串到HTMLTABLE,至于字符串从哪来是没有关系的。
{
protected override void OnLoad(EventArgs e)
{
CreateControl();
} void CreateControl() {
for (int x = 0; x < 10; x++)
{
TableRow row = new TableRow();
TableCell cell = new TableCell(); Button bt = new Button();
bt.Text = x.ToString();
cell.Controls.Add(bt);
row.Cells.Add(cell);
HolderTable.Rows.Add(row);
}
}
人生如梦大哥也回复小菜我的问题,感激万分啊。
不过不是您这样的意思。是现在有一段html代码,如下:
<table border="0" cellpadding="0" style="BORDER-COLLAPSE: collapse" width="100%" height="100%"
id="table562">
<tr>
<td width="389" align="center">
KingSystem</td>
<td width="389" align="center">
KingSystem</td>
</tr>
</table>
这段代码是我要获取的,然后根据这段代码生成一个htmltable这样我就可以遍历htmltable的行和列,并且将其中的 KingSystem 转换,动态生成一个控件。
s 中好像不能有服务器控件!!
{
String testStr =@"<table id=""testTable"" runat=""server"" style=""width: 100%;"">
<tr>
<td>
aaa</td>
<td>
</td>
<td>
</td>
</tr>
<tr>
<td>
Test Inner HTML</td>
<td>
dd</td>
<td>
</td>
</tr>
<tr>
<td>
dd</td>
<td>
</td>
<td>
</td>
</tr>
</table>"; Control t = this.ParseControl(testStr);
HtmlTable dt = (HtmlTable)t.Controls[0]; //这个就是那个HtmlTable控件
Response.Write(dt.Rows[1].Cells[0].InnerText);
Panel1.Controls.Add(dt); }
比如
Regex reg=new Regex("<.+>");
然后去进行匹配,如果匹配出来的是个TABLE,那么就要生成一个TABLE的CONTROL,依此递归只到把整个HTML解析完。同时还要将每个节点上的属性添加进去。建议使用XMLDOCUMENT方式来进行分析。这样会简单很多。
您的方法在测试过程中报错.不支持强类型的转换.分析了下问题,您的测试html代比较归整,可能不会出任何问题.但在我们的html摸班中有表格的嵌套,也有DREAMWEAVER中插入flash的代码.这样的话,this.parsecontrol就获取不到control了。但却不会报错。
我将您的
HtmlTable dt = (HtmlTable)t.Controls[0]; //这条语句是报错的。
改成了
HtmlTable dt = t.Controls[0] as HtmlTable; //不报错,但dt是null不过,还是万分感谢您.
学到了this.ParseControl(testStr);这个方法,以前从没用过.
string s = KingOper.FileOper.getStringFromTxt(Server.MapPath("")+"\\index.htm");
int i = 0;
while (s.IndexOf("KingSystem") != -1)
{
Label l = new Label();
l.Text = s.Substring(0, s.IndexOf("KingSystem")); Telerik.WebControls.RadDockingZone dz = new Telerik.WebControls.RadDockingZone();//这个是第三方控件,没什么区别,生成textbox的都行
dz.ID = "z" + i.ToString();
dz.Width = Unit.Parse("100%");
dz.Height = Unit.Parse("100%");
i++; s = s.Substring(s.IndexOf("KingSystem") + "KingSystem".Length); Panel1.Controls.Add(l);
Panel1.Controls.Add(dz);
}感觉这个问题还是蛮值得讨论的,测试了下,我的这个方法不用去管html的格式是不是正规,只要dw中能设计出来,我的就可以显示出来。呵呵~~
原理很简单,没写注释。请各位大虾指正。