2011-03-11 82 views
0

我查詢數據庫以檢索所有列。我可能會有很多行。我試圖輸出查詢結果到一個HTML表格。這是我到目前爲止:在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

使用讀取器的段計數屬性可通過字段生成列迭代,閱讀器的閱讀方法通過行迭代。

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控制設置的內容。一個巧妙的方法是使用一個正常的div標籤中具有runat =「server」屬性和ID - 那麼你可以分配輕鬆使用InnerHtml屬性類似內容:

股利:

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

代碼後面:

dataDiv.InnerHtml = tableOutput.ToString(); 

手動建立表是有點麻煩。通常使用像GridView這樣的控件或者像DataList或Repeater這樣的模板控件來設置一個模板來以你想要的html格式顯示你的結果會更加方便。

使用這種方法你消滅字符串的所有循環和建築,只是分配一個DataSource屬性,如:

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

你可以看到直放站here模板的一個例子。我自己更喜歡Repeaters或DataList控件,因爲它們允許您以更靈活/ HTML友好的方式爲您的結構模板化。

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

注意的是,這裏有一些事情我永遠不會在生產站點中再做:在標記中編碼連接字符串而不是t例如,web.config,自動生成列。而且我更有可能首先使用一個< asp:Repeater控件而不是GridView。

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;