我想知道是否可以用一个 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++;
}
我怎么能有一种动态 TableName 所以我不需要五次相同的代码?
答案 0 :(得分: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,因此您也必须更改该功能。
答案 1 :(得分: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++;
}
}