输出查询结果为html

时间:2011-03-11 02:40:14

标签: asp.net

我查询数据库以检索所有列。我可能会有很多行。我试图将查询结果输出到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#

3 个答案:

答案 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;