【发布时间】:2012-01-17 16:42:41
【问题描述】:
(强制性初学者提醒!我不能保证我会理解你告诉我的一切。)
我有一个程序使用自定义类CheckOrderLine 的List<T> 通过BindingSource 填充DataGridView。在dataGrid 控件中,我提供了将记录“拆分”为多行以进行拼版的功能。我无法解决这个过程的逆向。
我需要能够在dataGrid 中进行选择,从第一个选择的行开始,然后遍历选择中的每个CheckOrderLine 并将它们与第一行进行比较。
如果它们都匹配,我需要将第一条记录中的数量更改为所有选定行的总和,然后删除多余的行。
这是迄今为止我自己解决的问题:
int index = 1;
while (index < rowToJoin)
{
_bs.RaiseListChangedEvents = false;
int first = _bs.Position;
int second = first++;
CheckOrderLine current = (CheckOrderLine)_bs[first];
CheckOrderLine next = (CheckOrderLine)_bs[second];
if (current.OrderNumber == next.OrderNumber)
{
_bs.RemoveAt(second);
}
else
{
MessageBox.Show("You must select at least two matching rows to join.");
return;
}
_bs.RaiseListChangedEvents = true;
_bs.ResetBindings(false);
index++;
}
这仅在我从下往上选择时才有效,并且仅基于 OrderNumber。为了防止意外,我真的需要检查两行之间的所有字段。在这一点上,能够选择任何方向将是一个奖励。
编辑:我认为我最初还不够清楚。
- 我有一种方法可以将一行拆分为 2-5 个新行。
- 我的原始代码可以加入任意数量的行,但前提是从下到上选择,并且基于
OrderNumber。 - 除了
current.OrderNumber == next.OrderNumber之外,还有更有效的方法来比较两行吗?我知道我可以将我的所有字段添加到if语句中,但我希望它更可重用。 - 在任何方向上进行选择都远远落后于在所有字段之间进行比较。
【问题讨论】:
标签: .net visual-studio-2010 c#-4.0