2012-12-13 68 views
6

Tôi đang viết một trang ASP.NET đọc dữ liệu từ cơ sở dữ liệu và cần hiển thị nó trong một bảng. Vì một lý do nào đó, tôi không muốn sử dụng GridView.Hiển thị dữ liệu trong bảng html ASP.NET

Làm cách nào để hiển thị dữ liệu trong bảng trên trang HTML?

Đây là mã # C của tôi:

 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(); 

Đây là trang ASPX của tôi:

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

Trả lời

11

Về cơ bản sử dụng các phương pháp cổ điển mã ASP \ PHP \ Spaghetti.

Trước hết, hãy đặt mã của bạn bằng một phương thức công khai trả lại string. Phương pháp:

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

Sau đó, bạn có thể sử dụng thẻ <%=getWhileLoopData()%> trong ASP.NET đó là bằng <%Response.Write(getWhileData())%>

Nó sẽ giống như thế này:

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

Ngoài ra còn có tùy chọn để sử dụng điều khiển lặp lại và liên kết dữ liệu từ DB của bạn với một Item Item theo ý thích của bạn.

+0

u có thể pls cung cấp cho các giải pháp đầy đủ ?? hoặc bất kỳ ví dụ? hoặc liên kết ví dụ ?? tôi không thể giúp bạn. Cảm ơn. Nhưng tôi cần tải đầu ra vào page_loader – riad

+0

nó hiển thị lỗi khi sử dụng <% # getWhileLoopData()%> trong trang html. – riad

+0

chỉ cần sử dụng <% Response.Write (getWhileLoopData())%> hoặc <% = getWhileLoopData()%> xin lỗi về điều đó .. – Mortalus

1

thêm 3 literal điều khiển để trang asp của bạn đặt chúng trong tr phía dưới tiêu đề td s, và sau đó:

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

đây là giải pháp đơn giản nhất tôi biết, nhưng nó không phải gọn gàng.
đây là các mã 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

bạn có thể vui lòng giúp tôi viết phần html không ?? bởi vì tôi không thể giúp bạn, làm thế nào để viết phần html. – riad

+0

@riad Tôi đã thêm mã html. –

+0

Xin lỗi, nó hiển thị tất cả dữ liệu vào một hàng duy nhất.Nhưng tôi cần hàng đa. Tôi có nghĩa là tất cả các hàng có sẵn trong cơ sở dữ liệu. – riad

1

Nếu bạn đặt các thuộc tính runat="server" trên bảng HTML của bạn, bạn có thể thực sự lập trình truy cập nó trong bạn code-behind. Đó là một tính năng khá mạnh mẽ.

Đó chắc chắn không phải là giải pháp tốt nhất, nhưng đó là một tính năng rất tuyệt vời mà không ai biết.

+2

bạn có thể vui lòng đưa ra một ví dụ không ?? – riad

2

Tôi đề nghị bạn sử dụng điều khiển lặp lại và tạo cấu trúc bảng html của bạn trong bộ lặp.

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

ràng buộc lặp lại như giống như bạn gắn GridView

nhờ

-1

Trong giải pháp này, tất cả các thẻ HTML tạo trong Side khách hàng và khách hàng phải làm cho quá trình này thay vì máy chủ. này là một ý tưởng tốt hơn và cho hiệu suất tốt nhất cho máy chủ của bạn sau đó sử dụng mã này:

<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

Cảm ơn bạn đã trích đoạn mã này, đoạn mã này có thể cung cấp một số trợ giúp ngay lập tức. Một lời giải thích thích hợp [sẽ cải thiện rất nhiều] (https://meta.stackexchange.com/q/114762) giá trị giáo dục của nó bằng cách hiển thị lý do tại sao đây là một giải pháp tốt cho vấn đề, và sẽ làm cho nó hữu ích hơn cho các độc giả tương lai tương tự, nhưng không giống nhau, câu hỏi. Vui lòng chỉnh sửa câu trả lời của bạn để thêm giải thích và đưa ra chỉ báo về những giới hạn và giả định được áp dụng. – GrumpyCrouton

Các vấn đề liên quan