2017-03-17 84 views
1

我有这样的HTML表:C#做HTML表格重复行

<table ID="tbl_ClientSearch" style="width: 83%;" runat="server"> 
    <thead> 
     <tr> 
     <td>Client Account Number</td> 
     <td>Client Name</td> 
     </tr> 
    </thead> 
    <tbody> 
     <tr>     
     <td><asp:Literal ID="CliNox" runat="server"></asp:Literal></td>  
     <td><asp:Literal ID="CliNamex" runat="server"></asp:Literal></td>    
     </tr> 
    </tbody> 
</table> 

然后,我有这个疑问:

SqlCommand command = new SqlCommand(@"EXEC [dbo].[CTLC_SearchClient] '" + SearchVal + "';"); 
SqlConnection conn = new SqlConnection(connString); 
conn.Open(); 
command.Connection = conn; 
SqlDataReader readers = command.ExecuteReader(); 
if (readers.HasRows) 
{ 
    while (readers.Read()) 
    { 
     string CliNo = readers.GetString(0); 
     string CliName = readers.GetString(1); 
     CliNox.Text = string.Format("<a href='ClientInfo.aspx?ClientNumber={0}'>{0}</a>", CliNo.ToString()); 
     CliNamex.Text = CliName.ToString(); 
    } 
    conn.Close(); 
} 

这个工作,但是当我需要返回多行,这只能返回1因为我只对表格声明了1。我该如何解决这个问题?先谢谢你。

+0

你检查你的SP是否返回多行不? –

+0

@MAdeelKhalid andeel Khalid是的。它工作正常。但我的程序只显示最后一行,因为我认为它覆盖了html表格行的值。 – theo

+1

即写你的程序应该只显示最后一行,你已经编码的方式,即你只有一个,你覆盖该行单元格,因为你的需要,你需要动态地创建表结构或只是使用GridView或中继器控制。 –

回答

1

在Aspx页面添加占位符,除了像下面的表格。

<asp:PlaceHolder ID = "tableClientSearch" runat="server"/> 

在Aspx.cs文件中。

StringBuilder html = new StringBuilder(); 
       html.Append("<table border = '1'><thead><tr><td>Client Account 

Number</td><td>Client Name</td></tr></thead>"); 

     SqlCommand command = new SqlCommand(@"EXEC [dbo].[CTLC_SearchClient] '" + SearchVal + "';"); 
     SqlConnection conn = new SqlConnection(connString); 
     conn.Open(); 
     command.Connection = conn; 
     SqlDataReader readers = command.ExecuteReader(); 

     if (readers.HasRows) 
     { 
      while (readers.Read()) 
      { 
       html.Append("<tr>"); 
       html.Append("<td>"); 
       html.AppendFormat("<a href='ClientInfo.aspx?ClientNumber={0}'>{0}</a>", readers.GetString(0)); 
       html.Append("</td>"); 
       html.Append("<td>"); 
       html.Append(readers.GetString(1)); 
       html.Append("</td>"); 
       html.Append("</tr>"); 
      } 
      conn.Close(); 
     } 

     html.Append("</table>"); 
     tableClientSearch.Controls.Add(new Literal { Text = html.ToString() }); 
+0

这将工作。但是,这不是一个特别好的方法。使用数据绑定控件将是更好的选择。 –

+0

我同意,也就是说,这不是最好的方式,但是当需求只是渲染表而没有任何其他功能提供的数据绑定控件时,我更喜欢简单的html控件,它肯定会获得一些少量的性能。 –

+0

只是一个更多的青睐。我怎么能在这里做桌子的分页? :)让我们说每页10条记录 – theo

0

我不熟悉asp.net,但是这种情况看起来类似于在php中可能发生的一些情况,在这种情况下,我会尝试在asp中生成整个表。沿线的东西,

for row in tables 
    append to html <tr><td>data</td><td>moredata</td></tr> 

insert html into <table></table> 
1

在一流水平

protected DataTable dt = new DataTable() 

Delcare在aspx.cs文件保护表填写从SQL查询这个数据表(通过DataAdapter的),我想你知道该怎么做,或者只是去谷歌上查询。

在ASPX,更换

<tr>     
    <td><asp:Literal ID="CliNox" runat="server"></asp:Literal></td>  
    <td><asp:Literal ID="CliNamex" runat="server"></asp:Literal></td>    
</tr> 

通过

foreach (DataRow dr in dt) 
{ 
    <tr>     
     <td><%= dr["columnName1"] %></td>  
     <td><%= dr["columnName2"] %></td>    
    </tr> 
}