我在创建表并将从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();
}
}
}
}
}
显然我对这一切都有点绿。基本上会发生什么,它从数据库中提取所有解决方案标题,我希望每个标题都在他们自己的单元格中,我将继续将它们链接到相应的页面。希望这一切都有意义,如果不是,我很乐意提供更多信息。
答案 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的示例。