2016-04-27 15 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++; 
    } 
} 
相關問題