上一次写原创都已经3个月前,由于最近换了新的环境;认识了新的人、新的朋友。也学到了一些新的技能如安卓控制开发,Iot物联网的流程控制MQTT传输等。。好吧,不费话直接奔主题。。
最近在维护一个.net MVC的旧项目,因为要加入一个导出Excel功能,之前已经有导出Excel功能,但不是太强大,只是用NPOI凑合使用。这次改用之前推荐的EPPlus。因为需求要可视即可导出功能,即用户见到的列表都要能导出,由于列表是用jqgrid 导出,而jqgrid 的title又是手动写入,所以处理比较麻烦,于是看到jqgrid有一个colModel导出功能 【$("#gridList").jqGrid('getGridParam', 'colModel');】。简单说就是能直接将jqgrid 的colModel的Array直接拿出来,这样导出时就不用2次处理title.
通过 JSON.stringify 将colModel的Array传入MVC的控制器中,然后通过JArray jo = (JArray)JsonConvert.DeserializeObject(postdata);对传入的数据进行处理。好了,麻烦就开始了,就是因为传入的有字段名,而字段名是通过字符串显示,因此没法直接提起字符串中的字段名。这样就到了我们今天的主题,反射。。反射是.NET的一个重要功能,,反射其实原理很简单就是通过一个点获得一个面,通过一个成员获得一个组织的资料。
代码就一个句:item_a.GetType().GetProperty(jo[i]["name"].ToString()).GetValue(item_a, null).ToString()
通过GetProperty拿jo[i]["name"].ToString()的字段,然后获得它在item_a的值,当然也可以获得其他的资料,例如它的类型,它对应的关系等。
好了,就这样几个核心就构造出我们jqgrid 的通用导出功能。
using (var fs = new FileStream(destDir+ fileName, FileMode.Create, FileAccess.Write))
{
excel.SaveAs(fs);
}
最后,说明一下这个是我的原创,请勿转载~如真转载,请留个出处吧~