【问题标题】:Show data in ASP.NET html table在 ASP.NET html 表中显示数据
【发布时间】:2012-12-01 09:08:27
【问题描述】:

我正在编写一个 ASP.NET 页面,该页面从数据库中读取数据并需要将其显示在表格中。出于某种原因,我不想使用 gridView。

如何在 HTML 页面的表格中显示数据?

这是我的 C# 代码:

        SqlConnection thisConnection = new SqlConnection(dbConnection);
        SqlCommand thisCommand = thisConnection.CreateCommand();
        thisCommand.CommandText = "SELECT * from Test";
        thisConnection.Open();
        SqlDataReader reader = thisCommand.ExecuteReader();

        while (reader.Read())
        {
            int id = reader.GetInt32(0);
            string Name = reader.GetString(1);
            string Pass = reader.GetString(2);                   
        }

        thisConnection.Close();

这是我的 ASPX 页面:

<%@ Page Language="C#" AutoEventWireup="true" MasterPageFile="~/test.master" CodeFile="test.aspx.cs" Inherits="test" %>

<asp:Content ID="BodyContent" runat="server"  ContentPlaceHolderID="ContentPlaceHolder">
    <table width="100%" align="center" cellpadding="2" cellspacing="2" border="0" bgcolor="#EAEAEA" >
        <tr align="left" style="background-color:#004080;color:White;" >
            <td> ID </td>                        
            <td> Name </td>            
            <td>Pass</td>                        
        </tr>

        **<%--Need the while output into here--%>**

    </table>
</asp:Content>

【问题讨论】:

标签: c# asp.net html


【解决方案1】:

基本使用经典的 ASP\PHP\Spaghetti 代码方式。

首先,将您的代码放在一个返回string 的公共方法中。 方法:

public string getWhileLoopData()
{
        string htmlStr = "";
        SqlConnection thisConnection = new SqlConnection(dbConnection);
        SqlCommand thisCommand = thisConnection.CreateCommand();
        thisCommand.CommandText = "SELECT * from Test";
        thisConnection.Open();
        SqlDataReader reader = thisCommand.ExecuteReader();

        while (reader.Read())
        {
            int id = reader.GetInt32(0);
            string Name = reader.GetString(1);
            string Pass = reader.GetString(2);
            htmlStr +="<tr><td>"+id+"</td><td>"+Name+"</td><td>"+Pass+"</td></tr>"                   
        }

        thisConnection.Close();
        return htmlStr;
}

那么你就可以在ASP.NET中使用&lt;%=getWhileLoopData()%&gt;标签等于&lt;%Response.Write(getWhileData())%&gt;

它应该看起来像这样:

<%@ Page Language="C#" AutoEventWireup="true" MasterPageFile="~/test.master" CodeFile="test.aspx.cs" Inherits="test" %>

<asp:Content ID="BodyContent" runat="server"  ContentPlaceHolderID="ContentPlaceHolder">
    <table width="100%" align="center" cellpadding="2" cellspacing="2" border="0" bgcolor="#EAEAEA" >
        <tr align="left" style="background-color:#004080;color:White;" >
            <td> ID </td>                        
            <td> Name </td>            
            <td>Pass</td>                        
        </tr>

        <%=getWhileLoopData()%>

    </table>
</asp:Content>

还可以选择使用中继器控件并将数据库中的数据绑定到您喜欢的项目模板。

【讨论】:

  • 你能给出完整的解决方案吗?或任何例子?或示例链接??我找不到你。谢谢。但我需要将输出加载到 page_loader
  • 在html页面中使用时显示错误。
  • 只需使用 或 对不起..
  • 抱歉打扰了。两者都显示错误。我正在使用 asp.net 4.0.ViewDataBaseDetail.getWhileLoopData()' 由于其保护级别而无法访问
  • 再次抱歉.. 将访问修饰符从私有更改为公共
【解决方案2】:

我建议你使用转发器控件并在转发器中创建你的 html 表结构。

<table cellpadding="0" cellspacing="0" width="100%">
<asp:Repeater ID="rpt" runat="server" >
<HeaderTemplate>
<tr class="Header">
<td>
ID
</td>
<td>
Name
</td>
<td>
Pass
</td>
</tr>
</HeaderTemplate>
<ItemTemplate>
<tr>
<td>
<%# Eval("ID")%>
</td>
<td>
<%# Eval("Name")%>
</td>
<td>
<%# Eval("Pass")%>
</td>
</tr>
</ItemTemplate>
</asp:Repeater>
</table>

像绑定gridview一样绑定repeater

谢谢

【讨论】:

    【解决方案3】:

    如果您将runat="server" 属性放在 HTML 表格中,您实际上可以在代码隐藏中以编程方式访问它。这是一个相当强大的功能。

    这绝对不是最好的解决方案,但它是一个非常酷的功能,没人知道。

    【讨论】:

    • 能举个例子吗?
    【解决方案4】:

    将3个literal控件添加到您的asp页面中,将它们放在标题tds下方的tr中,然后:

    while (reader.Read())
        {
            int id = reader.GetInt32(0);
            string Name = reader.GetString(1);
            string Pass = reader.GetString(2);  
            literalID.text += id.ToString();
            literalName.text += Name.ToString();
            literalPass.text += Pass.ToString();
        }
    

    这是我所知道的最简单的解决方案,但它并不整洁。
    这是html 代码:

    <tr align="left" style="background-color:#004080;color:White;" >
        <td> ID </td>                        
        <td> Name </td>            
        <td>Pass</td>                        
    </tr>
    <tr align="left" style="background-color:#004080;color:White;" >
        <td><asp:Literal ID="literalID" runat="server"></asp:Literal></td>                        
        <td><asp:Literal ID="literalName" runat="server"></asp:Literal></td>            
        <td><asp:Literal ID="literalPass" runat="server"></asp:Literal></td>   
    </tr>
    

    【讨论】:

    • 你能帮我写html部分吗?因为我无法得到你,如何编写html部分。
    • 抱歉,它将所有数据显示在一行中。但我需要多行。我的意思是数据库中所有可用的行。
    • @riad 如果你明白了,你可以动态添加表格行和列,并为每一行分配一个值,如果你仍然有麻烦告诉我添加代码。
    • 投了反对票,因为这不只是将每个数据库行的字符串连接成一个 single 表行吗?!
    【解决方案5】:

    在这个解决方案中,所有在客户端和客户端创建的 HTML 标签都必须渲染这个进程而不是服务器。 这是一个更好的主意,并为您的服务器提供最佳性能 然后使用此代码:

    <asp:Content ID="BodyContent" runat="server" 
     ContentPlaceHolderID="ContentPlaceHolder">
         <table width="100%" align="center" cellpadding="2" cellspacing="2" border="0" bgcolor="#EAEAEA" >
             <tr align="left" style="background-color:#004080;color:White;" >
                 <td> ID </td>                        
                 <td> Name </td>            
                <td>Pass</td>                        
             </tr>
    
           <% if(dt != null && dt.rows.count>0){
                  foreach(var item in dt.rows)
                     {%>
                       <tr>
                          <td><%=item["ID"]%></td>
                          <td><%=item["Name"]%></td>
                          <td><%=item["Pass"]%></td>
                       </tr>
                      <%}
                    }%>
    
         </table> </asp:Content>
    

    【讨论】:

    • 感谢您提供此代码 sn-p,它可能会提供一些即时帮助。正确解释would greatly improve 其教育价值,通过说明为什么这是解决问题的好方法,并使其对未来有类似但不相同问题的读者更有用。请编辑您的答案以添加解释,并说明适用的限制和假设。
    猜你喜欢
    • 2021-12-10
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 2012-08-15
    • 2012-04-10
    • 2020-06-18
    • 1970-01-01
    • 2013-11-22
    相关资源
    最近更新 更多