我有一个 System.Data.DataSet 和 1 个单表。该表有许多列。
在某个事件处理程序中,我正在为已经存在的数据行中的一个字段设置十进制值(在设置时)。
在极少数情况下,我遇到了ArgumentOutOfRangeException
异常。
消息:System.ArgumentOutOfRangeException:索引超出范围。必须是非负数且小于集合的大小。
调用堆栈:
at System.ThrowHelper.ThrowArgumentOutOfRangeException()
at System.Collections.Generic.List`1.get_Item(Int32 index)
at System.Data.RecordManager.NewRecordBase()
at System.Data.DataTable.NewRecord(Int32 sourceRecord)
at System.Data.DataRow.BeginEditInternal()
at System.Data.DataRow.set_Item(DataColumn column, Object value)
at CPITS.Data.OrdersRow.set_ExecutionPrice(Decimal value)
奇怪的是,这是从框架生成的代码中发生的(当然,我没有为 DataColumn 编写 Setter)。
你能帮我理解和解决这个问题吗?
编辑
下面是我设置值的代码:
void ibclient_OrderStatus(object sender, OrderStatusEventArgs e)
{
Data.OrdersRow drOrders = data.Orders.FindByOrderId(e.OrderId);
if (drOrders != null)
{
drOrders.FilledQuantity = e.Filled;
drOrders.ExecutionPrice = e.AverageFillPrice; //Sporadic Exception when setting a decimal value
}
}