2016-04-27 17 views
4

我想知道是否有可能用一个foreach填充不同的表格。在代码behinde中动态引用控件(表)

我有5个表tbl0,tbl1,tbl2,tbl3,tbl4,并且此刻我使用每个表下一次以下的代码。

//fill *dtTable* with SQL 

foreach (DataRow dr in dtTable.Rows) 
{   
    TableHeaderRow tHRow = new TableHeaderRow(); 
    TableHeaderCell tHeader = new TableHeaderCell(); 
    tHeader.Text = dr.Field<string>("Loc"); 
    tHRow.Cells.Add(tHeader); 
    tbl0.Rows.Add(tHRow); 

    //fill 'hl' with sql 

    tCell.Controls.Add(hl); 
    tRow.Controls.Add(tCell); 
    tbl0.Rows.Add(tRow); 
} 

我thougt的是这样的:

//fill *dtTable* with SQL  

int i = 0; 
foreach (DataRow dr in dtTable.Rows) 
{   
    string TABLENAME = "tbl"+i; 

    TableHeaderRow tHRow = new TableHeaderRow(); 
    TableHeaderCell tHeader = new TableHeaderCell(); 
    tHeader.Text = dr.Field<string>("Loc"); 
    tHRow.Cells.Add(tHeader); 

    (Table)this.FindControl(TABLENAME).Rows.Add(tHRow); // does not funktion, just an idea 

    //fill 'hl' with sql 

    tCell.Controls.Add(hl); 
    tRow.Controls.Add(tCell); 

    (Table)this.FindControl(TABLENAME).Rows.Add(tRow); // does not funktion, just an idea 
    i++; 
} 

我怎么能有一个排序的动态表名,所以我不会需要相同的代码五倍?

+0

用'foreach'做这件事会有点笨拙。你为什么试图避免“for”循环?我假设每个表具有相同的行数。 – AntiTcb

+0

每个表可以有不同数量的行,每个DataRow创建一个表 – MaxW

回答

3

另一种方法:

int i = 0; 
var tables = new List<Table>(); 
tables.Add(tbl0); 
tables.Add(tbl1); 
tables.Add(tbl2); 
tables.Add(tbl3); 
tables.Add(tbl4); 


foreach (DataRow dr in dtTable.Rows) 
{ 
    // validation 
    if(i>tables.Count) 
    { 
     return; 
    } 

    var tbl in tables[i]; 
    TableHeaderRow tHRow = new TableHeaderRow(); 
    TableHeaderCell tHeader = new TableHeaderCell(); 
    tHeader.Text = dr.Field<string>("Loc"); 
    tHRow.Cells.Add(tHeader); 

    tbl.Rows.Add(tHRow); 

    //fill 'hl' with sql 

    tCell.Controls.Add(hl); 
    tRow.Controls.Add(tCell); 

    tbl.Rows.Add(tRow); 
    i++; 
} 

我不喜欢用(Table)this.FindControl(TABLENAME).Rows.Add(tRow);因为也许将来你会改变表的ID,这样你将不得不改变功能以及。

+0

这是无法工作的,foreach中的每个DataRow都应该“创建”一个表 – MaxW

+0

我从你的代码中假设(“(Table)this.FindControl(TABLENAME ).Rows.Add(tRow)“)表已经创建。 – POIR

+0

我编辑了你的代码,那对我怎么样 – MaxW

2

确保不需要重复相同代码的一种可能方法是遍历所有表。

foreach (var table in new [] {tbl0, tbl1, tbl2, tbl3, tbl4}) { 
    foreach (DataRow dr in table.Rows) {   
     string TABLENAME = "tbl"+i; 

     TableHeaderRow tHRow = new TableHeaderRow(); 
     TableHeaderCell tHeader = new TableHeaderCell(); 
     tHeader.Text = dr.Field<string>("Loc"); 
     tHRow.Cells.Add(tHeader); 

     (Table)this.FindControl(TABLENAME).Rows.Add(tHRow); 

     //fill 'hl' with sql 

     tCell.Controls.Add(hl); 
     tRow.Controls.Add(tCell); 

     (Table)this.FindControl(TABLENAME).Rows.Add(tRow); 
     i++; 
    } 
} 
相关问题