有一个TableA如下:
Row 明细行数 单据号
1 20 A01
2 19 A02
3 10 A03
4 5 A04
5 4 A05
6 3 A06
7 2 A07
8 2 A08
9 1 A09
要实现20明细行为一个新表,前提是不能拆单据号.如果凑不到20那也生成生成一个表.
用C#怎么写循环才能实现如下结果?大家看看怎么写最快最简单?
Table1
Row 明细行数 单据号
1 20 A01Table2
Row 明细行数 单据号
1 19 A02
2 1 A09Table3
Row 明细行数 单据号
1 10 A03
2 5 A04
3 4 A05Table4
Row 明细行数 单据号
1 3 A06
2 2 A07
3 2 A08
Row 明细行数 单据号
1 20 A01
2 19 A02
3 10 A03
4 5 A04
5 4 A05
6 3 A06
7 2 A07
8 2 A08
9 1 A09
要实现20明细行为一个新表,前提是不能拆单据号.如果凑不到20那也生成生成一个表.
用C#怎么写循环才能实现如下结果?大家看看怎么写最快最简单?
Table1
Row 明细行数 单据号
1 20 A01Table2
Row 明细行数 单据号
1 19 A02
2 1 A09Table3
Row 明细行数 单据号
1 10 A03
2 5 A04
3 4 A05Table4
Row 明细行数 单据号
1 3 A06
2 2 A07
3 2 A08
解决方案 »
- 十万火急....有图有真相!!【貌似是线程里的窗体的问题!】
- Socket连接的问题
- 新手报到帖,多多关照。 顺便问个技术问题。
- panel怎样覆盖其他控件?
- 大家好,通过vs2008建立的Office 2007插件程序,怎么制作打包程序啊
- 关于C#编写ActiveX问题
- 关于Socket 通讯的咨询问题,求高手指教
- 如果在打包安装程序时设置在安装机器上把程序编程成本地代码
- 请问c#对硬件接口及dll的访问支持可好?
- 请问.net framework RC2和.net framework beta2一样吗? 哪个好用些
- 求教 winform 程序如何连接PDA,进行文件操作?
- C# 连接 到SQL
还是不太明白,
Table2
Row 明细行数 单据号
1 19 A02
2 1 A09
这里不是将单据号拆开了吗
Table1
Row 明细行数 单据号
1 20 A01 明细行为20,所以生成一个新表Table1Table2
Row 明细行数 单据号
1 19 A02
2 1 A09 明细行为 19+1,所以生成一个新表Table2,因为不能拆单号,所以A03中明细行不能拆为1+9,所以只能和单号是A09组合
Table3
Row 明细行数 单据号
1 10 A03
2 5 A04
3 4 A05 明细行为10+5+4,因为没有单据号中明细行为1的单子,所以生成一个新表.规律是明细行从大到小排序.Table4
Row 明细行数 单据号
1 3 A06
2 2 A07
3 2 A08 剩下的生成一个表.
我现在想用 foreach (DataRow dr in Table1.Rows)
{
}但是我不知道怎么把符合的数据行数再输出一个新表.
单号=单据号我的意思很简单,循环表中的row,如果dr["明细行数"]=20,那么输出一个新表.
如果不等20,那么就凑20,规则是不能把一个单号中的明细行数拆开算.循环结束如果凑不到20也生成一个表.
所以我说最后的结果是.
最后一句话,就是.生成新表中,明细行数相加不能大于20.Table1
Row 明细行数 单据号
1 20 A01 明细行为20,所以生成一个新表Table1
Table2
Row 明细行数 单据号
1 19 A02
2 1 A09 明细行为 19+1,所以生成一个新表Table2,因为不能拆单号,所以A03中明细行不能拆为1+9,所以只能和单号是A09组合
Table3
Row 明细行数 单据号
1 10 A03
2 5 A04
3 4 A05 明细行为10+5+4,因为没有单据号中明细行为1的单子,所以生成一个新表.规律是明细行从大到小排序. Table4
Row 明细行数 单据号
1 3 A06
2 2 A07
3 2 A08 剩下的生成一个表.
protected void Page_Load(object sender, EventArgs e)
{
// 每个table的行数上限
const int MaxRows = 20;
// 当前table的行总数,初始化为比 MaxRows,让它在后续判断可以创建第一个table
int sum = MaxRows+1;
// 获取你的数据
DataTable TableA = GetYouData();
// 当前的table
DataTable currentTable = null;
// 存放各个Table的容器
DataSet result = new DataSet();
// 处理每一行数据
for (int i = 0; i < TableA.Rows.Count; i++)
{
// 检查是否超出上限
if ((int)TableA.Rows[i]["明细行数"] + sum > MaxRows)
{
// 放不下了,创建新table
currentTable = CreateNewTable();
// 加入到 DataSet
result.Tables.Add(currentTable);
// 当前行总数清0
sum = 0;
} // 将数据复制到新table
currentTable.Rows.Add(TableA.Rows[i].ItemArray);
// 行总数累加
sum += (int)TableA.Rows[i]["明细行数"];
}
}public DataTable CreateNewTable()
{
DataTable t = new DataTable();
t.Columns.Add("row", typeof(int));
t.Columns.Add("明细行数", typeof(int));
t.Columns.Add("单据号", typeof(string));
return t;
}
{
// 每个table的行数上限
const int MaxRows = 20;
// 当前table的行总数,初始化为比 MaxRows,让它在后续判断可以创建第一个table
int sum = MaxRows+1;
// 获取你的数据
DataTable TableA = GetYouData();
// 当前的table
DataTable currentTable = null;
// 存放各个Table的容器
DataSet result = new DataSet();
// 处理每一行数据
for (int i = 0; i < TableA.Rows.Count; i++)
{
// 检查是否超出上限
if ((int)TableA.Rows[i]["明细行数"] + sum > MaxRows)
{
// 放不下了,创建新table
currentTable = CreateNewTable();
// 加入到 DataSet
result.Tables.Add(currentTable); 当循环第二行的时候会报错:名为“Table”的 DataTable 已属于此 DataSet
// 当前行总数清0
sum = 0;
} // 将数据复制到新table
currentTable.Rows.Add(TableA.Rows[i].ItemArray);
// 行总数累加
sum += (int)TableA.Rows[i]["明细行数"];
}
}public DataTable CreateNewTable()
{
DataTable t = new DataTable();
t.Columns.Add("row", typeof(int));
t.Columns.Add("明细行数", typeof(int));
t.Columns.Add("单据号", typeof(string));
return t;
}