将asp:Table Rows添加到asp:在后台加载后的表

时间:2013-03-28 16:30:34

标签: c# asp.net

我正在尝试在单独的线程中向ASP表控件添加行。基本上这就是我到目前为止所做的:

代码隐藏:

    protected void onLoad(object sender, EventArgs e)
    {
        Thread obj = new Thread(new ThreadStart(testX));
        obj.IsBackground = true;
        obj.Start();
    }

    void testX()
    {
        System.Threading.Thread.Sleep(5000);
        Table tblOnline = (Table)FindControl("test");
        TableRow r = new TableRow();
        TableCell c1 = new TableCell();
        Label test = new Label();
        test.ForeColor = System.Drawing.Color.Black;
        test.Font.Bold = true;
        test.Text = "Rank";
        c1.Controls.Add(test);
        r.Cells.Add(c1);
        tblOnline.Rows.Add(r);
    }

我的ASPX:

<body>
<asp:Table runat="server" id="test"></asp:Table>
</body>

当我编译网站时,5秒后我看不到任何行添加到表中。这是不可能的还是我错过了什么?

2 个答案:

答案 0 :(得分:0)

如果您希望在渲染后五秒钟看到新行出现在客户端,则此代码不会发生这种情况。服务器上的后台线程 不会导致客户端更改其外观。

如果您希望这样做,您需要使用Javascript(如果您不需要任何服务器数据)或Ajax调用(如果您这样做)从客户端启动事件。这本身就是在后台进行的,因此您无需在服务器上运行单独的线程。

答案 1 :(得分:0)

在ASP.NET中使用线程不会像您尝试的那样工作。

如果您想要的是每5秒向表中添加一行,我建议您使用Timer控件:

<asp:Table runat="server" ID="tableTest">
</asp:Table>
<asp:Timer ID="timerAddRow" runat="server" OnTick="timerAddRow_Tick" Interval="5000">
</asp:Timer>

代码隐藏:

protected void timerAddRow_Tick(object sender, EventArgs e)
{            
    TableRow r = new TableRow();
    TableCell c1 = new TableCell();
    Label test = new Label();
    test.ForeColor = System.Drawing.Color.Black;
    test.Font.Bold = true;
    test.Text = "Rank";
    c1.Controls.Add(test);
    r.Cells.Add(c1);
    tableTest.Rows.Add(r);
}