DataSource
in GridView
不以任何持久方式存储Postback
所以你必须将其保存在某处(视图状态 or Session)或者您必须从您的数据存储(Es您的数据库)再次请求它。
对这 3 种方法的快速解释:
维耶夫州立大学: 保存在页面的隐藏字段中,因此不建议用于大型数据集,因为您的页面可能会变得很多 MB。它的优点是它保存在页面中,因此不会过期
ViewState["Data"] = GetData();
gvSample.DataSource = ViewState["Data"];
gvSample.DataBind();
...
protected void dl_Click(object sender, ImageClickEventArgs e)
{
string csv = ToCSV(ViewState["Data"]);
...
}
Session: 保存在服务器内存中,因此您“完全”不会遇到大小问题,但会话不会永远持续(通常为 30 分钟),如果用户显示该页面并在一小时后单击下载,则会话将为空
Session["Data"] = GetData();
gvSample.DataSource = Session["Data"];
gvSample.DataBind();
...
protected void dl_Click(object sender, ImageClickEventArgs e)
{
string csv = ToCSV(Session["Data"]);
...
}
来自数据存储的请求您从数据库请求数据,以便完成另一次往返,并且数据可能与用户所看到的不同
gvSample.DataSource = GetData();
gvSample.DataBind();
...
protected void dl_Click(object sender, ImageClickEventArgs e)
{
string csv = ToCSV(GetData());
...
}
只是一个建议:
您可以直接使用访问更简单的网格gvSample
这样,如果您更改 html,它就不会被破坏...:
protected void dl_Click(object sender, ImageClickEventArgs e)
{
//GridView gv = (GridView)this.Parent.Parent.Parent.Parent;
//string csv = ToCSV(gv.DataSource); //gv.DataSource is null, DatasourceID aswell
string csv = ToCSV(gvSample.DataSource);
...
}