C# 列表对象两列逻辑

C# 列表对象两列逻辑,c#,list,datatable,dataset,C#,List,Datatable,Dataset,我循环一个datatable,它有118行数据,将它们分成两列。我希望列表[0]中的数据是第1行和第41行。直到第81行,它停止使用ColumnTwo,因为dataTable.Rows.Count是118,i+Rows\u PER\u PAGE是120,所以它不会构建ColumnTwo 我的逻辑中有没有遗漏什么?那么它将填充第二栏 您希望将前40行放入第一列。但是在您的循环中,您首先让它们全部进入第一列,然后检查是否(i+ROWS\u PER\u PAGE

我循环一个datatable,它有118行数据,将它们分成两列。我希望列表[0]中的数据是第1行和第41行。直到第81行,它停止使用ColumnTwo,因为dataTable.Rows.Count是118,i+Rows\u PER\u PAGE是120,所以它不会构建ColumnTwo

我的逻辑中有没有遗漏什么?那么它将填充第二栏


您希望将前40行放入第一列。但是在您的循环中,您首先让它们全部进入第一列,然后检查是否(i+ROWS\u PER\u PAGE 如果您想让前40个转到第1列,然后让其余的转到第2列,那么您应该检查一下

if (i <= ROWS_PER_PAGE)
   SetItemData(dr, item, true);
else
   SetItemData(dr, item, false);

如果(i您希望将前40行放入第一列。但是在循环中,您让所有行首先进入第一列,那么您正在检查(i+rows\u PER\u PAGE
如果您想让前40个转到第1列,然后让其余的转到第2列,那么您应该检查一下

if (i <= ROWS_PER_PAGE)
   SetItemData(dr, item, true);
else
   SetItemData(dr, item, false);

if(i我期望以下输出:

- page 1 
_________
  1 | 41
... |...
 38 | 78
 39 | 79
 40 | 80
_________

- page 2
_________
 81 |
 82 |
... |
117 |
118 |
... |
_________
该方法工作正常:第2页并没有数据填充第二列,列表中总共有78项


好的,我知道了。最后一页的两列中应该有相同数量的记录,即使这意味着第一列并没有填满页面的底部

因此,从每页的行中删除
const
,并将其更新到最后一页:

for (int i = 0; i < dt.Rows.Count; i++)
{
    DataRow dr = dt.Rows[i];
    var item = new DataForExcelExport();

    SetItemData(dr, item, true);
    if (i + ROWS_PER_PAGE < dt.Rows.Count)
    {
        SetItemData(dt.Rows[i + ROWS_PER_PAGE], item, false);
    }
    list.Add(item);
    if ((i + 1) % ROWS_PER_PAGE == 0)
    {
        i += ROWS_PER_PAGE;

        int remaining = dt.Rows.Count - (i + 1);
        if (remaining < 2 * ROWS_PER_PAGE)
        {
            ROWS_PER_PAGE = remaining / 2 + remaining % 2;
        }
    }
}
for(int i=0;i
我希望得到以下输出:

- page 1 
_________
  1 | 41
... |...
 38 | 78
 39 | 79
 40 | 80
_________

- page 2
_________
 81 |
 82 |
... |
117 |
118 |
... |
_________
该方法工作正常:第2页并没有数据填充第二列,列表中总共有78项


好的,我知道了。最后一页的两列中应该有相同数量的记录,即使这意味着第一列并没有填满页面的底部

因此,从每页的行中删除
const
,并将其更新到最后一页:

for (int i = 0; i < dt.Rows.Count; i++)
{
    DataRow dr = dt.Rows[i];
    var item = new DataForExcelExport();

    SetItemData(dr, item, true);
    if (i + ROWS_PER_PAGE < dt.Rows.Count)
    {
        SetItemData(dt.Rows[i + ROWS_PER_PAGE], item, false);
    }
    list.Add(item);
    if ((i + 1) % ROWS_PER_PAGE == 0)
    {
        i += ROWS_PER_PAGE;

        int remaining = dt.Rows.Count - (i + 1);
        if (remaining < 2 * ROWS_PER_PAGE)
        {
            ROWS_PER_PAGE = remaining / 2 + remaining % 2;
        }
    }
}
for(int i=0;i
Sorry@tomg我希望第一列中的1-40比第二列中的41到80要多,然后我需要为第二页重置它,并且在第一列中有一半,在第二列中有另一半,我现在明白了。那么你要查找的是如果dataTable.Rows.Count-I每页行数=20
。然后我们得到3页[1-20,20-40],[41-60,61-80],[81-100,101-118]@Jefferson,您希望实现哪种布局?很抱歉,当i和ROWS_PER_页面大于dataTable时。ROWS.Count?我在第2页上看到一个问题,它看起来像是在第1列上转到第15行,然后在第2列上转到第16到30行。在第1列和第2列上又添加了两行。这是正确的,但是否有办法将其更改为填充第2页第二列。我可以更新每页的行数吗?行数每页=(dataTable.ROWS.Count-I)/2;@Jefferson,如果你更改每页的行数,你会得到不同的布局。比如,
行数每页=20
。然后我们得到3页[1-20,20-40],[41-60,61-80],[81-100,101-118]@Jefferson,您希望实现哪种布局?很抱歉,当i和ROWS_PER_页面大于dataTable.ROWS.Count时?我在第2页上看到一个问题,看起来它在第1列转到第15行,然后在第2列转到第16到30行。在第1列和第2列中又添加了两行