2016-05-23 10 views
1

でHTML表内のDataTable私はコードを書くことを試みるためにこのウェブサイトを参照してください - ASP.Net C#のWebフォームでHTML表で表示したDataTable:http://www.aspsnippets.com/Articles/Display-DataTable-in-HTML-Table-in-ASPNet-using-C-and-VBNet.aspx表示ASP.Net C#のWebフォーム

しかし、テーブルの情報を表示することはできません、ショー空のページ。 このコードを修正するにはどうすればよいですか?ありがとうございます。私はポイントを持っていた場合

1.CS.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="CS.aspx.cs" Inherits="CS" %> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title></title> 
    <style type="text/css"> 
`body { font-family: Arial;font-size: 10pt; }` 

     table { 
      border: 1px solid #ccc; 
      border-collapse: collapse; 
     } 

      table th { 
       background-color: #F7F7F7; 
       color: #333; 
       font-weight: bold; 
      } 

      table th, table td { 
       padding: 5px; 
       border-color: #ccc; 
      } 
    </style> 
</head> 
<body> 
    <form id="form1" runat="server"> 
     <div style="margin-left: auto; margin-right: auto; text-align: center;"> 

      <asp:PlaceHolder ID="placeholder" runat="server" /> 

     </div> 
    </form> 
</body> 
</html> 

2.CS.aspx.cs

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.Data.SqlClient; 
using System.Data; 
using System.Text; 
using System.Configuration; 




public partial class CS : System.Web.UI.Page 
{ 

    protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!this.IsPostBack) 
     { 
      PlaceHolder placeholder = new PlaceHolder(); 

      //Populating a DataTable from database. 
      DataTable dt = this.GetData(); 

      //Building an HTML string. 
      StringBuilder html = new StringBuilder(); 

      //Table start. 
      html.Append("<table border = '1'>"); 

      //Building the Header row. 
      html.Append("<tr>"); 
      foreach (DataColumn column in dt.Columns) 
      { 
       html.Append("<th>"); 
       html.Append(column.ColumnName); 
       html.Append("</th>"); 
      } 
      html.Append("</tr>"); 

      //Building the Data rows. 
      foreach (DataRow row in dt.Rows) 
      { 
       html.Append("<tr>"); 
       foreach (DataColumn column in dt.Columns) 
       { 
        html.Append("<td>"); 
        html.Append(row[column.ColumnName]); 
        html.Append("</td>"); 
       } 
       html.Append("</tr>"); 
      } 

      //Table end. 
      html.Append("</table>"); 
      string strText = html.ToString(); 

      ////Append the HTML string to Placeholder. 
      placeholder.Controls.Add(new Literal { Text = html.ToString() }); 

     } 
    } 

    private DataTable GetData() 
    { 
     string constr = ConfigurationManager.ConnectionStrings["constr"].ConnectionString; 
     using (SqlConnection con = new SqlConnection(constr)) 
     { 
      using (SqlCommand cmd = new SqlCommand("SELECT TOP 10 [a01],[a02],[a03] FROM [aaa].[dbo].[bbb]")) 
      { 
       using (SqlDataAdapter sda = new SqlDataAdapter()) 
       { 
        cmd.Connection = con; 
        sda.SelectCommand = cmd; 
        using (DataTable dt = new DataTable()) 
        { 
         sda.Fill(dt); 
         return dt; 
        } 
       } 
      } 
     } 
    } 
} 
+0

あなたはASPXページに二つの異なるプレースホルダを作成しても、分離コードでされています。 'placeholder.Controls.Add(....)'で作成されたプレースホルダにコントロールを追加します。** placeholder **はaspxページで作成されたPlaceHolderのIDです。 –

答えて

2

は、私はすべて、単にコメントをしただろうが、あなたの問題を解決するために

PlaceHolder placeholder = new PlaceHolder(); 

ビーイングは、あなたがという名前PlaceHolderを持っている、ということである理由:あなたがする必要があることは、以下の行をコメントアウトしていますをマークアップし、完全に新しいplaceholder変数をタイプPlaceHolderにロードコードで作成します。同じ名前が付けられていますが、コードは2つの全く異なるオブジェクトとみなします。以下のコードを参照してくださいdatatableを作成するために他の人のコードを借りました。私はあなたのデータベースにアクセスできません。

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!IsPostBack) 
    { 
     /* 
     Commented out because doing it this way creates 
     2 PlaceHolder variables named placeholder, everything else is as needed 
     */ 
     //PlaceHolder placeholder = new PlaceHolder(); 

     //Populating a DataTable from database. 
     DataTable dt = this.GetData(); 
     //Building an HTML string. 
     StringBuilder html = new StringBuilder(); 
     //Table start. 
     html.Append("<table border = '1'>"); 
     //Building the Header row. 
     html.Append("<tr>"); 
     foreach (DataColumn column in dt.Columns) 
     { 
      html.Append("<th>"); 
      html.Append(column.ColumnName); 
      html.Append("</th>"); 
     } 
     html.Append("</tr>"); 
     //Building the Data rows. 
     foreach (DataRow row in dt.Rows) 
     { 
      html.Append("<tr>"); 
      foreach (DataColumn column in dt.Columns) 
      { 
       html.Append("<td>"); 
       html.Append(row[column.ColumnName]); 
       html.Append("</td>"); 
      } 
      html.Append("</tr>"); 
     } 
     //Table end. 
     html.Append("</table>"); 
     string strText = html.ToString(); 
     ////Append the HTML string to Placeholder. 
     placeholder.Controls.Add(new Literal { Text = html.ToString() }); 
    } 
} 
private DataTable GetData() 
{ 
    // Modified your method, since I don't have access to your db, so I created one manually 
    // Here we create a DataTable with four columns. 
    DataTable table = new DataTable(); 
    table.Columns.Add("Dosage", typeof(int)); 
    table.Columns.Add("Drug", typeof(string)); 
    table.Columns.Add("Patient", typeof(string)); 
    table.Columns.Add("Date", typeof(DateTime)); 

    // Here we add five DataRows. 
    table.Rows.Add(25, "Indocin", "David", DateTime.Now); 
    table.Rows.Add(50, "Enebrel", "Sam", DateTime.Now); 
    table.Rows.Add(10, "Hydralazine", "Christoff", DateTime.Now); 
    table.Rows.Add(21, "Combivent", "Janet", DateTime.Now); 
    table.Rows.Add(100, "Dilantin", "Melanie", DateTime.Now); 
    return table; 
} 
3

コメントアウトこの行をし、それが動作します:

PlaceHolder placeholder = new PlaceHolder(); 

手動GridViewコントロールを使用しない理由DataTableをループよりもジャストthought.Rather?背後

コード:

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!this.IsPostBack) 
    { 
     DataTable dt = this.GetData(); 
     gridView.DataSource = dt; 
     gridView.DataBind(); 
    } 
} 

ASPXページ:

<asp:GridView ID="gridView" runat="server"></asp:GridView> 
+0

これはとてもエレガントです! – Pete

関連する問題