You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

移除DataSet中的DataTable引发Invalid Cast Exception异常

解决强类型DataSet替换排序表时的InvalidCastException问题

问题原因

强类型DataSet(如ResultsDs)中的表是继承自DataTable的自定义子类(例如OBSSettlementPriceDataTable、BrokerSettlementPriceDataTable),而DefaultView.ToTable()生成的是普通DataTable实例。直接移除原强类型表并添加普通DataTable,会导致后续代码(如DataGridView绑定逻辑)尝试将表转换为对应强类型时触发类型转换异常。

方案一:复用原强类型表(推荐)

无需移除/添加表,直接清空原表数据,将排序后的数据导入原强类型表实例,保留类型一致性:

// 处理OBSSettlementPrice表
var obsSortedView = resultsDs.OBSSettlementPrice.DefaultView;
obsSortedView.Sort = "排序字段1 ASC"; // 替换为你的排序规则

resultsDs.OBSSettlementPrice.Clear();
foreach (DataRowView rowView in obsSortedView)
{
    resultsDs.OBSSettlementPrice.ImportRow(rowView.Row);
}

// 处理BrokerSettlementPrice表
var brokerSortedView = resultsDs.BrokerSettlementPrice.DefaultView;
brokerSortedView.Sort = "排序字段2 DESC"; // 替换为你的排序规则

resultsDs.BrokerSettlementPrice.Clear();
foreach (DataRowView rowView in brokerSortedView)
{
    resultsDs.BrokerSettlementPrice.ImportRow(rowView.Row);
}

方案二:创建强类型表实例替换原表

若必须替换表,需创建对应强类型的表实例,而非普通DataTable:

// 处理BrokerSettlementPrice表
var brokerView = resultsDs.BrokerSettlementPrice.DefaultView;
brokerView.Sort = "你的排序规则";

// 创建强类型表实例
var sortedBrokerTable = new ResultsDs.BrokerSettlementPriceDataTable();
// 导入排序后的行数据
foreach (DataRowView rowView in brokerView)
{
    sortedBrokerTable.ImportRow(rowView.Row);
}

// 移除原强类型表(直接用实例避免类型混淆)
resultsDs.Tables.Remove(resultsDs.BrokerSettlementPrice);
// 添加新的强类型表
resultsDs.Tables.Add(sortedBrokerTable);

注意:移除表时直接使用强类型表实例(如resultsDs.BrokerSettlementPrice),而非通过表名称从Tables集合中获取,避免类型匹配错误。

内容的提问来源于stack exchange,提问作者Mark Roworth

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 23:31:10