c#dataRow访问抛出一个System.ArgumentException

时间:2013-04-08 15:24:00

标签: c# datatable

有人可以解释我为什么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

在temp1和temp2的DataSet Visualizer中我可以看到数据存在,但是如果t1我得到了exeption,如果创建了temp1的副本它工作正常(参见temp2)。

1 个答案:

答案 0 :(得分: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

如果你需要保存能力来使用targetDataSet中的强类型数据表,你需要添加到targetDataSet空类型dataTable并在那之后调用merge

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