2012-01-30 68 views
0

我想从数据库中显示数据集。我的目标是使用VS 2005在每行5天的aspx页面上显示一个月的数据。我写了这样的代码,但我与我和j混淆。此代码不显示任何内容在代码隐藏中创建表格并显示文本框

if (ds != null && ds.Tables[0].Rows.Count > 0) 
{ 
    Table table = new Table(); 
    table.ID = "Table1"; 

    TableRow row = new TableRow(); 
    TableCell cell = new TableCell(); 
    TextBox tb1 = new TextBox(); 
    TextBox tb2 = new TextBox(); 

    // I am not sure what i and j should be here to display 5 per each row.. 
    for (int i = 0; i < 5; i++) 
    { 
     if (int j == 0; j < ds.Tables[0].Rows.Count; j ++) 
     { 

      tb1.ID = "txtDateRow" + x + "Col" + j; 
      tb1.Text = ds.Tables[0].Rows[x]["Date"].ToString(); 
      tb2.ID = "txtDetails" + x + "Col" + j; 
      tb2.Text = ds.Tables[0].Rows[x]["AmountSold"].ToString(); 
      cell.Controls.Add(tb1); 
      cell.Controls.Add(tb2); 
      table.Rows.Add(row); 
     } 
    } 
    Panel1.Controls.Add(table); 
} 

如果有人可以帮助我解决这个问题,我真的很感激。非常感谢。

+1

“j”在哪里声明/初始化? – Akhil 2012-01-30 20:16:28

+0

它显示“nothing”还是显示没有行的table元素?这两个是非常不同的结果。 – David 2012-01-30 20:17:37

+0

为什么'table'被添加到'Page.Form.Controls'和'Panel1.Controls'? – David 2012-01-30 20:20:31

回答

0

你有一个循环与一个计数器,即i但你测试j==0什么是j? 是j initalized某处?甚至宣布j?如果没有,你确定你不想测试i == 0

这就是您在for循环中没有得到任何结果的原因。 代码:

tb1.ID = "txtDateRow" + x + "Col" + j; 
      tb1.Text = ds.Tables[0].Rows[x]["Date"].ToString(); 
      tb2.ID = "txtDetails" + x + "Col" + j; 
      tb2.Text = ds.Tables[0].Rows[x]["AmountSold"].ToString(); 
      cell.Controls.Add(tb1); 
      cell.Controls.Add(tb2); 
      table.Rows.Add(row); 

是一个条件内:

if (j == 0)

的问题是没有这个条件不会发生?如果是这样你需要发布更多的代码。 调试您的代码并设置断点并观察它的运行方式。根据您的编辑您发布的评论:

if (int j == 0; j < ds.Tables[0].Rows.Count; j ++)

这甚至不是有效的,我认为你需要你解决这个问题前,拿起了一本书上C#语法。

1

row.Controls.Add(cell)is missing。此文本框控件的Bcoz不会添加到表格中,并且您无法看到任何内容。添加这一行,它会帮助你看到。以后你可以考虑一下我& j。

0

我不确定'x'应该在你的代码中。我认为一般结构应该是这样的,但下面的代码将为每列添加相同的东西:

if (ds != null && ds.Tables[0].Rows.Count > 0) 
{ 
    Table table = new Table(); 
    table.ID = "Table1"; 

    // j is the row index 
    for (int j = 0; j < ds.Tables[0].Rows.Count; j++) 
    { 
     TableRow row = new TableRow(); 

     // i is the column index 
     for (int i = 0; i < 5; i++) 
     { 
      TableCell cell = new TableCell(); 
      TextBox tb1 = new TextBox(); 
      TextBox tb2 = new TextBox(); 

      tb1.ID = "txtDateRow" + j + "Col" + i; 
      tb1.Text = ds.Tables[0].Rows[j]["Date"].ToString(); 
      tb2.ID = "txtDetails" + j + "Col" + i; 
      tb2.Text = ds.Tables[0].Rows[j]["AmountSold"].ToString(); 
      cell.Controls.Add(tb1); 
      cell.Controls.Add(tb2); 

      row.Cells.Add(cell); 
     } 

     table.Rows.Add(row); 
    } 
    Panel1.Controls.Add(table); 
} 
+0

for(int j = = 0; j 2012-01-31 04:35:15

+0

Fixed th e j循环。我从原始代码复制它。 – 2012-01-31 04:57:16

+0

只是nitpicky,大多数人喜欢用我然后j。由于按字母顺序,我确实在j之前。所以我应该在j处理列时处理行。但是,这只是优先。 – JonH 2012-01-31 13:25:47