开发者

output query results in html

i query a database for retreiving all th开发者_如何学Ce columns. I will probably have many rows. Im trying to output the query results into an html table. This is what i have so far:

    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();
        } 
}

How could i store the many rows and output them using html as soon as i open a page? Im using C#


I recommend starting out like this:

ASPX markup

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 Code-behind

protected void Page_Load(Object sender, EventArgs e)
{
    lblUserName.Text = CUser.LoginID;
}

Note that there are some things here I would never do anymore in a production site: coding the connection string in the mark-up rather than web.config, auto-generate columns, for example. And I'd be much more likely to use an <asp:Repeater control rather than a gridview in the first place.


you could have a Literal control in the page and do something like

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;


Use the FieldCount property of the reader to iterate through the fields generating columns, the Read method of the reader to iterate through the rows.

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>");

You can then either write them out with the response stream or use an HtmlGeneric control to set the contents. One neat trick is to use a normal div with a runat="server" attribute and an id - then you can assign the content easily using the InnerHtml property like:

The div:

<div id="dataDiv" runat="server" />

The code behind:

dataDiv.InnerHtml = tableOutput.ToString();

Manually building the table is a bit cumbersome. It is usually much more expedient to use a control like a GridView or a template control like a DataList or Repeater to set up a template to display your results in your desired html format.

Using that approach you wipe out all the looping and building of strings and simply assign a DataSource property like:

MyGridView.DataSource = reader;
MyGridView.DataBind();

You can see an example of templating with the Repeater here. I myself prefer either Repeaters or DataList controls because they allow you to template your structure out in a much more flexible/html friendly approach.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜