Skip to main content
 首页 » 编程设计

c#之在 ASP.Net C# Webform 的 HTML 表格中显示 DataTable

2024年01月31日26开发

我引用这个网站尝试写代码-Display DataTable in HTML Table in ASP.Net C# Webform: http://www.aspsnippets.com/Articles/Display-DataTable-in-HTML-Table-in-ASPNet-using-C-and-VBNet.aspx

但是不能显示表格信息,显示空白页。 我该如何修复此代码?谢谢。

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

请您参考如下方法:

如果我有要点,我会发表评论,但要解决您的问题,您需要做的就是注释掉以下行:

PlaceHolder placeholder = new PlaceHolder(); 

原因是,你有一个 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; 
}