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

如何将存储泛型值的ViewState内容转换为DataTable

问题根因

你存入ViewState["Test"]的对象本身是List<ABC>类型,和DataTable没有任何继承或隐式/显式转换关联,直接强制类型转换必然失败,不存在能直接把泛型集合强转成DataTable的语法。

解决方案
  • 步骤1:先从ViewState中把值正确转回List<ABC>类型
  • 步骤2:手动写转换逻辑把List<ABC>转为DataTable

正确示例代码

// 1. 先把ViewState里的值转回原始的List类型
List<ABC> lstABC = ViewState["Test"] as List<ABC>;
DataTable dt = new DataTable();
if(lstABC != null && lstABC.Any())
{
    // 2. 给DataTable创建列,列名对应ABC类的属性名,类型对应属性的实际类型
    // 示例:如果ABC类有Id、Name两个属性,就按下面写法替换
    dt.Columns.Add("Id", typeof(int));
    dt.Columns.Add("Name", typeof(string));
    
    // 3. 遍历List填充DataTable
    foreach(var item in lstABC)
    {
        DataRow dr = dt.NewRow();
        dr["Id"] = item.Id;
        dr["Name"] = item.Name;
        dt.Rows.Add(dr);
    }
}
额外注意点
  • C#是大小写敏感的,你原代码里变量名大小写不一致:定义的是lstABC,存入ViewState时用了lstAbc,实际编码时要保证变量名统一
  • 注意DataTable的拼写规范,首字母和中间的T都需要大写,你原代码的Datatable拼写错误会导致编译报错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 15:45:03