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