C# 嵌套循环计数器
我正在尝试创建一个嵌套循环,它接受给定数量的“每张图纸的视图”,根据这个数量,让我们从(1)开始计算00,01,02,03,04,05,06。。。 现在,如果数字为(2),则将计数为00,00,01,01,02,02 数字现在是(3)将计数00,00,00,01,01,01 我已经尝试了下面代码的许多变体,我粘贴的内容并不是最接近我所期望的结果,但是我脑子里乱七八糟的,似乎不知道什么是简单的操作。我无法很好地在谷歌搜索中找到比较 请看附件中的图片,看看我想做什么 编辑。。。 表格是Telerik的radGridViewC# 嵌套循环计数器,c#,winforms,radgridview,C#,Winforms,Radgridview,我正在尝试创建一个嵌套循环,它接受给定数量的“每张图纸的视图”,根据这个数量,让我们从(1)开始计算00,01,02,03,04,05,06。。。 现在,如果数字为(2),则将计数为00,00,01,01,02,02 数字现在是(3)将计数00,00,00,01,01,01 我已经尝试了下面代码的许多变体,我粘贴的内容并不是最接近我所期望的结果,但是我脑子里乱七八糟的,似乎不知道什么是简单的操作。我无法很好地在谷歌搜索中找到比较 请看附件中的图片,看看我想做什么 编辑。。。 表格是Telerik
public void ViewsPerSheetChange(对象发送方,事件参数e)
{
int numViewsPerSheet=(int)thisForm.numViewsPerSheet.Value;
对于(int i=0;i
你几乎拥有了它。这里不需要嵌套循环。对图纸编号使用整数除法。我重复相同的次数
x
其中x
是每张图纸的视图数
尝试:
public void ViewsPerSheetChange(对象发送方,事件参数e)
{
int numViewsPerSheet=(int)thisForm.numViewsPerSheet.Value;
对于(int j=0;j
使用模运算符的示例:
using System;
public class Program
{
public static void Main()
{
int numViewsPerSheet = 2;
int sheetIndex = 0;
for ( int i = 0 ; i < 7; i++ )
{
Console.WriteLine("Sheet: {0:00}", sheetIndex);
if( (i+1)%numViewsPerSheet==0)sheetIndex++;
}
}
}
使用系统;
公共课程
{
公共静态void Main()
{
int numViewsPerSheet=2;
指数=0;
对于(int i=0;i<7;i++)
{
WriteLine(“Sheet:{0:00}”,sheetIndex);
如果((i+1)%numViewsPerSheet==0)sheetIndex++;
}
}
}
看
结果:
Sheet: 00
Sheet: 00
Sheet: 01
Sheet: 01
Sheet: 02
Sheet: 02
Sheet: 03
活页:00
活页:00
活页:01
活页:01
活页:02
活页:02
活页:03
适应您的代码:
public void ViewsPerSheetChange(object sender, EventArgs e)
{
int viewIndex = 0;
int numViewsPerSheet = Math.Max((int)thisForm.numViewsPerSheet.Value, 1); // never trust user input!
for (int i = 0; i < Models.Count; i++) {
Models[i].SheetObjModel.SheetNumber = viewIndex.ToString("00");
if ( (i+1)%numViewsPerSheet==0) viewIndex++;
}
thisForm.RefreshDataGrid();
}
public void ViewsPerSheetChange(对象发送方,事件参数e)
{
int viewIndex=0;
int numViewsPerSheet=Math.Max((int)thisForm.numViewsPerSheet.Value,1);//永远不要相信用户输入!
对于(int i=0;i
感谢您的回复,您的示例非常有用,我成功地通过while循环使其工作
public void ViewsPerSheetChange(object sender, EventArgs e)
{
int numViewsPerSheet = (int)thisForm.numViewsPerSheet.Value;
int cnt = 0;
int num = 0;
if (numViewsPerSheet < 1)
{
return;
}
while (cnt < Models.Count)
{
for (int i = 0; i < numViewsPerSheet; i++)
{
Models[cnt].SheetObjModel.SheetNumber = num.ToString().PadLeft(2, '0');
cnt++;
if (cnt == Models.Count) break;
}
num++;
}
thisForm.RefreshDataGrid();
}
public void ViewsPerSheetChange(对象发送方,事件参数e)
{
int numViewsPerSheet=(int)thisForm.numViewsPerSheet.Value;
int-cnt=0;
int num=0;
如果(numViewsPerSheet<1)
{
返回;
}
而(cnt
您只需要一个循环和一个索引。仅当i%NumViewsPerSheet==0时才增加sheetIndex。如果项目数不能除以工作表数怎么办?@Fildor所说的会起作用-只需使用模运算符..Olivier,我的问题怎么不清楚,或者错过了目标或困难?到目前为止我做了什么?向下箭头表示“没有显示足够的研究”,如何衡量研究?这看起来像是锅炉板的反应。我的问题得到了两位理解我所问问题的人的两个非常好的回答。所以我对你的评论感到很困惑。我会留意你对我在这个网站上的下一个问题的评论。Thanks@Olivier,我已按要求编辑并向telerik radgridview添加了一个标记。通用抄送。。。我就知道…:-)
public void ViewsPerSheetChange(object sender, EventArgs e)
{
int numViewsPerSheet = (int)thisForm.numViewsPerSheet.Value;
int cnt = 0;
int num = 0;
if (numViewsPerSheet < 1)
{
return;
}
while (cnt < Models.Count)
{
for (int i = 0; i < numViewsPerSheet; i++)
{
Models[cnt].SheetObjModel.SheetNumber = num.ToString().PadLeft(2, '0');
cnt++;
if (cnt == Models.Count) break;
}
num++;
}
thisForm.RefreshDataGrid();
}