System.Data.DataSet とその中に 1 つのテーブルがあります。テーブルには多くの列があります。
特定のイベント ハンドラで、(設定時に) 既に存在するデータ行で、フィールドの 1 つに 10 進数値を設定しています。
非常にまれなケースですが、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 のセッターは作成していません)。
この問題を理解して解決するのを手伝ってくれませんか?
編集
以下は、値を設定しているコードです。
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
}
}