我查询数据库以检索所有列。我可能会有很多行。我试图将查询结果输出到html表中。这就是我到目前为止所做的:
protected void Page_Load(Object sender, EventArgs E)
{
message.Text = "Welcome to your profile: " + CUser.LoginID;
System.Data.SqlClient.SqlConnection con;
con = new System.Data.SqlClient.SqlConnection();
con.ConnectionString = "Data Source=.\\SQLEXPRESS; AttachDbFilename=C:\\Users\\jjj\\Documents\\Visual Studio 2010\\Projects\\App_Data\\data.mdf; Integrated Security = true; Connect Timeout = 30; User Instance = True";
string id = CUser.LoginID;
try
{
con.Open();
SqlCommand cmd = new SqlCommand("SELECT * FROM tbl WHERE loginID = 'hussein' ", con);
SqlDataReader reader =cmd.ExecuteReader();
if (reader.HasRows) {
//reader.Read();
while (reader.Read())
{
}
}
}
catch { }
finally
{
con.Close();
}
}
我怎样才能存储多行并在打开页面后立即使用html输出?我正在使用C#
答案 0 :(得分:0)
使用阅读器的 FieldCount 属性迭代生成列的字段,阅读器的 Read 方法迭代遍历行。
StringBuilder tableOutput = new StringBuilder();
tableOutput.Append("<table>");
while (reader.Read()){
tableOutput.Append("<tr>");
for(int i=0;i<reader.FieldCount;i++){
tableOutput.AppendFormat("<td>{0}</td>", reader[i].ToString());
}
tableOutput.Append("</tr>");
}
tableOutput.Append("</table>");
然后,您可以使用响应流将其写出或使用HtmlGeneric控件来设置内容。一个巧妙的技巧是使用带有runat =“server”属性和id的普通div - 然后您可以使用InnerHtml属性轻松分配内容,如:
div:
<div id="dataDiv" runat="server" />
背后的代码:
dataDiv.InnerHtml = tableOutput.ToString();
手动构建表格有点麻烦。使用像GridView这样的控件或像DataList或Repeater这样的模板控件来设置模板以便以您想要的html格式显示结果通常更为便利。
使用这种方法可以消除所有字符串的循环和构建,并简单地分配一个DataSource属性,如:
MyGridView.DataSource = reader;
MyGridView.DataBind();
您可以使用Repeater here查看模板示例。我自己更喜欢使用Repeater或DataList控件,因为它们允许您以更加灵活/ html友好的方式模拟您的结构。
答案 1 :(得分:0)
我建议这样开始:
ASPX标记
Welcome to your profile: <asp:Label runat="server" ID="lblUserName" />
<asp:SqlDataSource runat="server" ID="VehicleSaleSource"
ConnectionString="Data Source=.\\SQLEXPRESS; AttachDbFilename=C:\\Users\\jjj\\Documents\\Visual Studio 2010\\Projects\\App_Data\\data.mdf; Integrated Security = true; Connect Timeout = 30; User Instance = True"
SelectCommand="SELECT * FROM VehicleForSale WHERE loginID = 'hussein'"
/>
<asp:GridView runat="server" ID="VehicleSaleGrid" DataSourceId="VehicleSaleSource" AutoGenerateColumns="True" />
.cs代码隐藏
protected void Page_Load(Object sender, EventArgs e)
{
lblUserName.Text = CUser.LoginID;
}
请注意,这里有一些我永远不会在生产站点中执行的操作:例如,在标记中编码连接字符串而不是web.config,自动生成列。而且我更有可能首先使用&lt; asp:Repeater控件而不是gridview。
答案 2 :(得分:0)
您可以在页面中拥有Literal
控件并执行类似
StringBuilder tableBuilder = new StringBuilder();
if (reader.HasRows)
{
//reader.Read();
while (reader.Read())
{
String col1 = reader["Column1"].ToString();
string col2 = reader["Column2"].ToString();
string col3 = reader["Column3"].ToString();
tableBuilder.AppendFormat("<tr><td>{0}</td><td>{1}</td><td>{2}</td></tr>", col1, col2, col3);
}
}
string header = "<table><tr><th> COLUMN1 </th><th> COLUMN2 </th> </tr>";
string footer = "</table>";
string tableHtml = header + tableBuilder.ToString() + footer;
Literal1.Text = tableHtml;