在代码隐藏中动态引用控件(表)



我想知道是否可以用一个foreach填充不同的表格。

有 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);
}

我的想法是这样的:

 //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++;
}

怎样才能拥有一种动态的表名,这样我就不需要五次相同的代码了?

另一种方法:

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,因此您也必须更改函数。

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

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++;
    }
}

最新更新