2012-12-13 61 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