3

我有点进退两难。我有一个动态数量的项目,我想将其转换为 htmlTable,这将允许我动态确定我希望表具有的列数和行数。

例如,假设我有一个包含 5 个项目的列表。我希望能够将表格动态构建和呈现为 1x1、2x1、2x2 等。

到目前为止,这是我能想到的,但我不断收到超出范围的错误,这告诉我在添加项目列表之前,我还没有创建正确数量的单元格的逻辑。在考虑自定义列、行和动态列表的同时,我试图弄清楚如何构建表格。

HtmlTable myTable = new HtmlTable();
HtmlTableRow row;
HtmlTableCell cell;

int desiredNumberOfColumns = 1; //How many Columns I want
int desiredNumberOfRows = 5; //How many Rows I want

int customColumn = desiredNumberOfColumns / rivers.Count;
int customRow = desiredNumerOfColumns % rivers.Count;

List<string> rivers = new List<string>(new string[]
{
    "nile",
    "amazon",     // River 2
    "yangtze",    // River 3
    "mississippi",
    "yellow"
});


    for(int i=0; i<(desiredNumberOfRows / rivers.Count); i++) //
    {
       row = new HtmlTableRow();
       for(int j=0;j<(customRow / rivers.Count);++j)
       {
          row.Cells.Add(new HtmlTableCell(rivers[i]));
       }
       myTable.Rows.Add(row);
    }

此示例应构建一个包含 5 行和 1 列的表,如下所示:

___________
Row |Column
 0  |nile
 0  |amazon
 0  |yangtze
 0  |mississippi
 0  |yellow
-----------
4

1 回答 1

0

不要使用两个循环,而是使用除法和模型(可以提供有趣的值)尝试使用一个循环。

int totalObjects = rivers.Count;
int totalCells = desiredRows * desiredColumns;
HtmlTableRow newRow = new HtmlTableRow();
for( i = 0; i < totalCells; i++ )
{
    // make a new row when you get the desired number of columns
    // skip the first, empty row
    if( i % desiredColumns == 0 && i != 0 )
    {
        myTable.Rows.Add( newRow );
        newRow = new HtmlTableRow();
    }
    // keep putting in cells
    if( i < totalObjects )
        row.Cells.Add(new HtmlTableCell(rivers[i]));
    // if we have no more objects, put in empty cells to fill out the table
    else
        row.Cells.Add(new HtmlTableCell(""));
}
于 2013-08-28T18:35:43.613 回答