GridView.DataSourceisnullduringPostBack我想在我的应用程序中实现从每个Gridview打印/下载csv。那些通过数据源或直接获取数据的gvSample.DataSource=Data;gvSample.DataBind();现在我的第一种方法是将下载按钮设置为页脚模板并处理下载和受保护的voiddl_Click(objectsender,ImageClickEventArgse){GridViewgv=(GridView)this.Parent.Parent.Parent.Parent;字符串csv=ToCSV(gv.DataSource);//gv.DataSource为空,DatasourceID为空Response.ContentType="application/csv";回复。AddHeader("content-disposition","attachment;filename=file.csv");响应.Write(csv);响应.End();但我无法访问数据。GridViewDataSource没有以任何持久方式存储在Postback上,因此您必须将其保存在某个地方(Viewstate或Session),或者您必须从数据存储区(Es您的数据库)再次请求它。3种方法的快速解释:VievState:保存在页面的隐藏字段中,因此不推荐用于大型数据集,因为您的页面可能会变成数MB。优点是它保存在页面中,因此不会过期ViewState["Data"]=GetData();gvSample.DataSource=ViewState["数据"];gvSample.DataBind();...protectedvoiddl_Click(objectsender,ImageClickEventArgse){stringcsv=ToCSV(ViewState["Data"]);...}会话:保存在服务器内存中,因此“根本”没有大小问题,但会话不会永远持续(通常为30分钟),如果用户显示页面并在一小时后点击下载session将为空Session["Data"]=GetData();gvSample.DataSource=Session["数据"];gvSample.DataBind();...protectedvoiddl_Click(objectsender,ImageClickEventArgse){stringcsv=ToCSV(Session["Data"]);...}来自数据存储的请求您从数据库请求数据,以便完成另一次往返并且数据可用与用户看到的不同gvSample.DataSource=GetData();gvSample.DataBind();...protectedvoiddl_Click(objectsender,ImageClickEventArgse){stringcsv=ToCSV(GetData());...}只有一个建议:您可以使用gvSample直接访问网格,这更简单,因此您不会破坏您的html...:protectedvoiddl_Click(objectsender,ImageClickEventArgse){//GridViewgv=(GridView)this.Parent.Parent.Parent.Parent;//字符串csv=ToCSV(gv.DataSource);//gv.DataSource为null,DatasourceID以及stringcsv=ToCSV(gvSample.DataSource);...}您可以在ViewState中保存数据(大型数据集不提供!!!)gvSample.DataSource=Data;ViewState["数据"]=数据;gvSample.DataBind();protectedvoiddl_Click(objectsender,ImageClickEventArgse){vards=(ProperDataType)ViewState["Data"];//TODO:检查空字符串csv=ToCSV(ds);//gv.DataSource为空,DatasourceID为空Response.ContentType="application/csv";Response.AddHeader("content-disposition","attachment;filename=file.csv");响应.Write(csv);响应.End();此外,您还可以基于gridview重建数据,例如vards=newProperDataSource();foreach(gvSample.Rows中的GridViewRow行){dRow数据=newdRow();foreach(行中的TableCell单元格。单元格){ds.Add(“column1”,cell.Text);}ds.Add(dRow);}字符串csv=ToCSV(ds);//gv.DataSource为空,DatasourceID为空Response.ContentType="application/csv";Response.AddHeader("content-disposition","attachment;filename=file.csv");响应.Write(cs五);响应.End();当然,您必须将此片段与您的特定数据结构相匹配……但这是一般的想法GridViews不保存它的原始数据源,您必须将其保存在其他地方或按需要重建它您无法访问它gv.DataSource编码时尝试使用Session或ViewStates并保存DataTablegvSample.DataSource=Data;gvSample.DataBind();会话["MyTable"]=数据;将Session转换为DataTable并传递给Method以上就是C#学习教程的全部内容:PostBack时GridView.DataSource为null。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注——protectedvoiddl_Click(objectsender,ImageClickEventArgse){if(Session["MyTable"]==null){stringcsv=ToCSV(数据表(会话["MyTable"]));Response.ContentType="应用程序/csv";Response.AddHeader("content-disposition","attachment;filename=file.csv");响应.Write(csv);响应.End();}}本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
