2013-04-08 1 views
-4

Может кто-нибудь объяснить, почему я получил System.ArgumentException? код: C# dataRow access throw a System.ArgumentException

var dsResult = new SecurityYieldsData();//DataSet 
var syData = (SecurityYieldsData)base.PrepareCAData(ctx, swiftMessage, caData); 
SecurityYieldOptionsData optionsData = GetCaOption(ctx, syData.SecurityYields[0], message.Body); 
syData.Merge(optionsData); 
dsResult.Merge(syData); 
var temp1 = (SecurityYieldOptionsData.SecurityYieldOptionsDataTable)manager.SecurityYieldOptions().GetTable(dsResult); 
var temp2 = (SecurityYieldOptionsData.SecurityYieldOptionsDataTable)manager.SecurityYieldOptions().GetTable(dsResult).Copy(); 
int t1 = temp1[0].OptionNumber;//'temp1[0].OptionNumber' threw an exception of type 'System.ArgumentException' 
int t1_1 = Convert.ToInt32(temp1[0]["OptionNumber"]);// Ok 
int t2 = temp2[0].OptionNumber;// Ok 
int t3 = optionsData.SecurityYieldOptions[0].OptionNumber;// Ok 

В DataSet Visualizer из temp1 и Temp2 я могу видеть, что данные существуют, но в случае, если t1 я Exeption, если создать копию temp1 Он отлично работает (см temp2).

+0

вы обязательно используйте 'var' много. Это плохая практика. Какой тип данных 't1'? – tnw

+0

Вы получаете сообщение об исключении? –

+0

tnm: в моем случае OptionNumber is int – driver

ответ

1

Я нашел ответ на свой вопрос. Это происходит, когда вы объединяете типизированный набор данных в другой набор данных, а целевой набор данных не набирает таблицу. , например:

var sourceDataSet = new SomeTypedDataset(); 
var strongTypedTable = new SomeTypedDataTable() 
sourceDataSet.Tables.Add(strongTypedTable); 
var targetDataSet = new SomeTypedDataset(); 
targetDataSet.Merge(sourceDataSet);// at that step targetDataSet will contains strongTypedTable byt this DataTable is not strong-typed 

, если вам нужно сохранить способность работать с сильными типизированными DataTable в targetDataSet вам нужно добавить к targetDataSet пустым напечатал DataTable и после этого вызова слияние

var targetDataSet = new SomeTypedDataset(); 
targetDataSet.Tables.Add(new SomeTypedDataTable()); 
targetDataSet.Merge(sourceDataSet);