gpt4 book ai didi

c# - GridView.DataSource 在 PostBack 期间为 null

转载 作者:行者123 更新时间:2023-11-30 19:01:32 29 4
gpt4 key购买 nike

我想从我的应用程序中的每个 Gridview 实现打印/下载 csv。那些通过数据源或直接通过

gvSample.DataSource = Data;
gvSample.DataBind();

现在我的第一个方法是在页脚模板中设置一个下载按钮并在那里处理下载

<asp:GridView ID="gvSample" runat="server">
<PagerTemplate>
<asp:ImageButton ImageUrl="~/download.gif" OnClick="dl_Click" runat="server" ID="dl"/>
</PagerTemplate>
</asp:GridView>

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
Response.ContentType = "application/csv";
Response.AddHeader("content-disposition", "attachment; filename=file.csv");
Response.Write(csv);
Response.End();
}

但我无法访问数据。

最佳答案

GridView 中的

DataSource 不会以任何持久方式存储在 Postback 中,因此您必须将其保存在某处( ViewstateSession )或者您必须从您的数据存储(Es 您的数据库)再次请求它。

这 3 种方法的快速解释:

VievState:保存在页面的隐藏字段中,因此不推荐用于大型数据集,因为您的页面可能会变成很多 MB。它的优点是保存在页面中所以不会过期

ViewState["Data"] = GetData();
gvSample.DataSource = ViewState["Data"];
gvSample.DataBind();

...

protected void dl_Click(object sender, ImageClickEventArgs e)
{
string csv = ToCSV(ViewState["Data"]);
...
}

session :保存在服务器内存中,因此您“完全”没有大小问题,但 session 不会永远持续(通常为 30 分钟),如果用户显示该页面并在之后单击下载一个小时后 session 将为空

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);
...
}

关于c# - GridView.DataSource 在 PostBack 期间为 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26931784/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com