有很多HTML文件,因为管理文件不方便,我将他的字符串存到了数据库。这些文件是要在后台被动态读取的,
现在的问题是,我从数据库读这些HTML字符串后,怎么将其动态生成一个HtmlTable?因为生成HTMLTABLE后还要对其进行加工,请各位大虾指点迷津

解决方案 »

  1.   

    前台
    <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();
      

  2.   

    不好意思,语言表达太差了。
    我的意思是,将html代码存到了数据库,
    在.cs中
    HtmlTable ht = new HtmlTable();
    问题是:如何才能将数据库中的html字符串赋给ht?
    ht貌似有个innerHTML属性,但不支持
    ht.innerHTML = s;(s就是从数据库读出来的html字符串)
      

  3.   

    在加工的意思:
    遍历htmltable中的单元格,将特殊的字符串转换成一个自定义的控件。这个已经实现.
      

  4.   

    to mxc1225:
    是后面的解决了,前面的没解决。
    是一个在线拖动就可以生成网站的项目,以前的做法是做好多好多页面作为模板.但随着模板的不断增加,文件也聚增。所以想做一个通用的页面,从数据库读取html布局格式。然后将格式中特定的字符串转换为自定义控件.现在碰到的一个巨大问题是:
    数据库里的HTML源代码如何才能赋给HtmlTable??to ysmz555:
    使用模板,把数据库中的数据读入到模板中。谢谢,不过不使用模板,后期还要对布局的html做加工
      

  5.   

    其实要是能够读到ds中也可以,这样可以分析ds,动态生成htmltable的行与列
    但是如果表格有嵌套的话,就报错。ds的readxml要求格式很严谨,html的太宽松了,所以不考虑ds
      

  6.   

    这个意思?
    <%@ 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>");
        }
    }
      

  7.   


          Response.Write("<table><tr><td><input type='text'value='111'/></td></tr></table>");
      
      

  8.   


    不是这个意思,下面是个举例.
    HtmlTable ht = new HtmlTable();
                string s = KingOper.FileOper.getStringFromTxt(Server.MapPath("")+"\\index.htm");
                StringReader sr = new StringReader(s);
                ht.InnerHtml = s;//但这句报错.
      

  9.   

    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
      

  10.   

    一样的,代码只是我的一个例子.
    只是说明,要从字符串到HTMLTABLE,至于字符串从哪来是没有关系的。
      

  11.   

    public partial class _Default : System.Web.UI.Page

        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);
            }
        } 
      

  12.   


    人生如梦大哥也回复小菜我的问题,感激万分啊。
    不过不是您这样的意思。是现在有一段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 转换,动态生成一个控件。
      

  13.   

     ht.InnerHtml = s;//但这句报错. 
    s 中好像不能有服务器控件!!
      

  14.   

        protected void Page_Load(object sender, EventArgs e)
        {
            String testStr =@"<table id=""testTable"" runat=""server"" style=""width: 100%;"">
                <tr>
                    <td>
                        &nbsp;
                        aaa</td>
                    <td>
                        &nbsp;
                    </td>
                    <td>
                        &nbsp;
                    </td>
                </tr>
                <tr>
                    <td>
                       Test Inner HTML</td>
                    <td>
                        &nbsp;
                        dd</td>
                    <td>
                        &nbsp;
                    </td>
                </tr>
                <tr>
                    <td>
                        &nbsp;
                        dd</td>
                    <td>
                        &nbsp;
                    </td>
                    <td>
                        &nbsp;
                    </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);    }
      

  15.   

    这个估计麻烦了呐。你相当于要写一套解析HTML的东西出来
    比如
    Regex reg=new Regex("<.+>");
    然后去进行匹配,如果匹配出来的是个TABLE,那么就要生成一个TABLE的CONTROL,依此递归只到把整个HTML解析完。同时还要将每个节点上的属性添加进去。建议使用XMLDOCUMENT方式来进行分析。这样会简单很多。
      

  16.   


    您的方法在测试过程中报错.不支持强类型的转换.分析了下问题,您的测试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);这个方法,以前从没用过.
      

  17.   

    我的解决方法很简单,是这样的。
    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中能设计出来,我的就可以显示出来。呵呵~~
    原理很简单,没写注释。请各位大虾指正。