2011-03-11 12 views
0

です。すべての列を取得するためのデータベースを照会します。私はおそらく多くの行を持っています。私は、クエリの結果を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を使用して多くの行と出力を格納できます。これは私がこれまで持っているものでしょうか? IM C#

答えて

0

を使用して列、行を反復処理するためのリーダーの読み取り生成方法フィールドを反復処理するために、読者のFieldCountのプロパティを使用。

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

手動でテーブルを構築するのは面倒です。通常、DataViewやRepeaterのようなGridViewやテンプレートコントロールのようなコントロールを使用して、結果を目的のHTML形式で表示するためのテンプレートを設定する方がはるかに便利です。

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

あなたがリピーターhereとテンプレートの例を見ることができます:あなたは、文字列のすべてのループと建物を一掃し、単になどのDataSourceプロパティを割り当てることのアプローチを使用して

。私は自分たちの構造をより柔軟な/ htmlフレンドリーなアプローチでテンプレート化できるので、RepeaterまたはDataListコントロールを好む。

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

注いくつかのものがここにあることを、私は決してだろう生産現場ではもう何もしません。接続文字列をマークアップでコーディングするのではなく、むしろhan web.config、たとえば、列を自動生成します。そして、私はずっと< aspを使う可能性が高いでしょう:最初はグリッドビューではなくリピータコントロールです。

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; 
ような何かを行うことができます
関連する問題