2011-09-22 66 views
1

我無法創建表並將從SQL中提取的數據放入其中。我現在的解決方案是在Default.aspx中創建一個表格,然後在C#代碼中創建行和單元格。爲.NET代碼隱藏創建一個動態表C#

我的aspx代碼:

<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent"> 
    <h2> 
     Select a topic to view. 
    </h2> 
    <asp:Table ID="solutions" runat="server" Width="100%"> 
    </asp:Table> 
</asp:Content> 

而且,所有的行動應該,但不會發生: C#

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using HtmlAgilityPack; 
using System.Data.SqlClient; 

namespace WebApplication1 
{ 
    public partial class _Default : System.Web.UI.Page 
    { 
     protected void Page_Load(object sender, EventArgs e) 
     { 
      SqlConnection anca = new System.Data.SqlClient.SqlConnection(); 
      anca.ConnectionString = "Data Source=anca;Initial Catalog=servicedesk; 
      anca.Open(); 

      SqlCommand sub = new SqlCommand("SELECT TITLE FROM dbo.Solution", anca); 
      SqlDataReader sReader = sub.ExecuteReader(); 
      List<String> subject = new List<string>(); 
      int solCount = 0; 
      while (sReader.Read()) 
      { 
       subject.Add(sReader.ToString()); 
       solCount++; 
      } 
      sReader.Close(); 

      TableRow newRow = new TableRow(); 
      TableCell newcell = new TableCell(); 

      int adder = 0; 
      while (adder <= solCount) 
      { 
       solutions.Rows.Add(newRow); 
       for (int i = 0; i <= 6; i++) 
       { 
        newRow.Cells.Add(newcell); 
        newcell.Text = subject[adder].ToString(); 
       } 
      } 
     } 
    } 
} 

顯然我有點綠色的這一切。基本上,它會從數據庫中提取所有的解決方案標題,我希望標題可以放在他們自己的單元格中,我將繼續將它們鏈接到相應的頁面。希望這一切都有道理,如果不是,我很樂意提供更多信息。

回答

3

首先,您要向表中添加空行,然後用內容填充行。您應該在填充單元格內容之後添加行(即在循環之後)。另外,如果我沒有看到它錯誤,你不會增加每個循環的「加法器」,所以它應該陷入無限循環。也似乎你只從DB拉標題...所以我不知道你爲什麼試圖每行添加7列/單元格。順便提一下這個帖子,讓我知道如果我做錯了什麼,我會盡快解決它:)。

while (adder < solCount) 
      { 
       var cell = new TableCell(); 
       var row = new TableRow(); 

       cell.Text = subject[adder].ToString(); 
       row.Cells.Add(newcell); 
       solutions.Rows.Add(newRow); 
       ++adder; 
      } 

我認爲一個更優雅的方式將使用ListView或Repeater控件,而不是像那樣動態生成表。

3

'MSI'部分正確 - (無限循環..)並使用ListView或Repeater或GridView,這些控件將處理您的數據訪問代碼返回的行數。在情況下,如果你想創建你自己不管出於什麼原因,那麼這裏是示例代碼:

for(int rowCount=0; rowCount<solCount; rowCount++) 
{ 
    TableRow row = new TableRow(); 
    solutions.Rows.Add(row); 
    for(int colCount=0; colCount<6; colCount++) 
    { 
     TableCell cell = new TableCell(); 
     row.Cells.Add(cell); 
     cell.Controls.Add(new LiteralControl(subject[rowCount].ToString()); 
    } 

} 

這裏是MSDN一個例子。