2012-12-13 58 views
6

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

如何在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> 

回答

11

基本上使用传统的ASP \ PHP \意大利面条代码的方法。

首先,将您的代码放在一个返回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; 
} 

然后你就可以使用<%=getWhileLoopData()%>标签在ASP.NET等于<%Response.Write(getWhileData())%>

它应该是这个样子:

<%@ 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> 

还有一个选项使用中继器控件并将数据从数据库绑定到您喜欢的项目模板。

+0

ü可以请给予完整的解决方案??或者任何的例子吗?或示例链接??我无法得到你。谢谢。但我需要将输出加载到page_loader中 – riad

+0

它在使用html页面中的<%#getWhileLoopData()%>时显示错误。 – riad

+0

只是使用<%Response.Write(getWhileLoopData())%>或<%= getWhileLoopData()%>。 – Mortalus

1

加3个literal控制到你的ASP页面将它们放在tr下面的标题td s,然后:

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> 
+0

你能帮我写html部分吗?因为我无法得到你,如何编写html部分。 – riad

+0

@riad我添加了html代码。 –

+0

对不起,它将所有数据显示为一行。但我需要多行。我的意思是数据库中所有可用的行。 – riad

1

如果你把runat="server"属性上的HTML表格,你其实可以通过编程访问它在你的代码隐藏。这是一个非常强大的功能。

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

+2

你能举个例子吗? – riad

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

感谢

-1

在这个解决方案中,所有的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> 
+0

感谢您使用此代码段,这可能会提供一些即时帮助。通过说明为什么这是一个很好的解决方案的问题,可以大大提高(https://meta.stackexchange.com/q/114762)其教育价值,并且可以使未来的读者更加有用,但不完全相同的问题。请编辑您的答案以添加解释,并指出适用的限制和假设。 – GrumpyCrouton