如何将存储泛型值的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
相关产品推荐
相关产品推荐

