为.NET代码隐藏C#创建动态表

时间:2011-09-22 00:39:34

标签: asp.net dynamic

我在创建表并将从SQL中提取的数据放入其中时遇到了问题。我的解决方案是在Default.aspx中创建一个表,然后在C#代码中创建行和单元格。

我的aspx代码:

<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">
    <h2>
        Select a topic to view.
    </h2>
    <asp:Table ID="solutions" runat="server" Width="100%">
    </asp:Table>
</asp:Content>

所有行动应该在哪里,但不会发生: C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using HtmlAgilityPack;
using System.Data.SqlClient;

namespace WebApplication1
{
    public partial class _Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            SqlConnection anca = new System.Data.SqlClient.SqlConnection();
            anca.ConnectionString = "Data Source=anca;Initial Catalog=servicedesk;
            anca.Open();

            SqlCommand sub = new SqlCommand("SELECT TITLE FROM dbo.Solution", anca);
            SqlDataReader sReader = sub.ExecuteReader();
            List<String> subject = new List<string>();
            int solCount = 0;
            while (sReader.Read())
            {
                subject.Add(sReader.ToString());
                solCount++;
            }
            sReader.Close();

            TableRow newRow = new TableRow();
            TableCell newcell = new TableCell();

            int adder = 0;
            while (adder <= solCount)
            {
                solutions.Rows.Add(newRow);
                for (int i = 0; i <= 6; i++)
                {
                    newRow.Cells.Add(newcell);
                    newcell.Text = subject[adder].ToString();
                }
            }
        }
    }
}

显然我对这一切都有点绿。基本上会发生什么,它从数据库中提取所有解决方案标题,我希望每个标题都在他们自己的单元格中,我将继续将它们链接到相应的页面。希望这一切都有意义,如果不是,我很乐意提供更多信息。

2 个答案:

答案 0 :(得分:3)

首先,您要向表中添加空行,然后使用内容填充行。您应该在填充单元格内容之后添加该行(即在循环之后不是之前)。此外,如果我没有看到错误,你不会增加每个循环的“加法器”,所以它应该落入无限循环。也似乎你只是从DB中拉出标题......所以我不知道你为什么要尝试每行添加7列/单元格。顺便说一句,从办公室张贴这个,让我知道如果我做错了什么,我会尽快解决它:)。

while (adder < solCount)
            {
                var cell = new TableCell();
                var row = new TableRow();

                cell.Text = subject[adder].ToString();
                row.Cells.Add(newcell);
                solutions.Rows.Add(newRow);
                ++adder;
            }

我认为更优雅的方式是使用ListView或Repeater控件,而不是像这样动态生成表。

答案 1 :(得分:3)

'MSI'部分正确 - (无限循环..)并使用ListView或Repeater或GridView,这些控件将处理数据访问代码返回的行数。如果你想出于任何原因自己创建,那么这里是示例代码:

for(int rowCount=0; rowCount<solCount; rowCount++)
{
    TableRow row = new TableRow();
    solutions.Rows.Add(row);
    for(int colCount=0; colCount<6; colCount++)
    {
         TableCell cell = new TableCell();
         row.Cells.Add(cell);
         cell.Controls.Add(new LiteralControl(subject[rowCount].ToString());
    }

}

以下是MSDN的示例。