在ASP.NET中如何从一个页面发送DataTable到另一个页面?

4
我有一个datatable,它是从sql中获取的。在对每一行进行某些处理后,我会向datatable中添加一列,以显示处理结果,然后我想将其发送到另一个asp.net页面上,什么是最好的方式?使用session可以吗?
我尝试使用session,但不确定是否可行,因为许多人使用我的服务器。
        DataTable dt = new DataTable();
        dt.Columns.Add("img", typeof(string));
        dt.Columns.Add("soratvaziat", typeof(string));
        dt.Columns.Add("shomaregharardad", typeof(string));
        dt.Columns.Add("sharh", typeof(string));
        dt.Columns.Add("eghdam", typeof (Boolean));


        DataRow dtrow = dt.NewRow();    // Create New Row
        dtrow["img"] = "accepted.png";            //Bind Data to Columns
        dtrow["soratvaziat"] = "SureshDasari";
        dtrow["shomaregharardad"] = "B.Tech";
        dtrow["sharh"] = "Chennai";
        dtrow["eghdam"] = true;
        dt.Rows.Add(dtrow);

        dtrow = dt.NewRow();               // Create New Row
        dtrow["img"] = "attention.png";               //Bind Data to Columns
        dtrow["soratvaziat"] = "MadhavSai";
        dtrow["shomaregharardad"] = "MBA";
        dtrow["sharh"] = "Nagpur";
        dtrow["eghdam"] = true;

        dt.Rows.Add(dtrow);

        dtrow = dt.NewRow();              // Create New Row
        dtrow["img"] = "canceled.png";              //Bind Data to Columns
        dtrow["soratvaziat"] = "MaheshDasari";
        dtrow["shomaregharardad"] = "B.Tech";
        dtrow["sharh"] = "Nuzividu";
        dtrow["eghdam"] = true;

        dt.Rows.Add(dtrow);

        dtrow = dt.NewRow();              // Create New Row
        dtrow["img"] = "accepted.png";              //Bind Data to Columns
        dtrow["soratvaziat"] = "Mahendra";
        dtrow["shomaregharardad"] = "CA";
        dtrow["sharh"] = "Guntur";
        dtrow["eghdam"] = false;

        dt.Rows.Add(dtrow);
        RadGrid1.DataSource = dt;
        RadGrid1.DataBind();
        Session["dt"] = dt;

你不能在SQL中为新行进行插入,另一页中查询所有已插入的行吗?当你有一个数据库时,这是最好的选择。相对于在会话中存储大量数据,最好为单个用户进行多次插入和选择。 - Wagner Leonardi
你在datatable中保存客户特定的数据吗? - mehmet mecek
1
不要将datatable存储在会话中。这样做非常糟糕,太臃肿、太重,并且如果您正在会话中存储大型对象,则需要重新考虑您的方法。 - Ahmed ilyas
3个回答

1

我认为你可以使用PreviousPage属性来实现这个功能。这允许您访问从发送控件到当前加载页面的页面中的变量。您需要在.ASPX页面指令中设置一些东西,然后再使用它。

PreviousPage.Something

要做到这一点,我会将datatable设置为属性,并在当前页面上引用该属性。

更多阅读:

跨ASPX页面传递值


1
如果会话未启用,则您需要使用上下文来发送数据。
Context.Items.Add("context name", DataTable);

并且您可以通过另一个页面访问它

,保留HTML,不解释。
DataTable dt = (DataTable)Context.Items["context name"];

-5

1- 创建一个类

2- 在你的类中添加一个 public static DataTable dataTable

3- 然后将你的 dataTable 变量赋值给它;

4- 你可以从任何地方恢复它。


2
这比其他答案中提到的Cache还要糟糕。static也是应用程序范围内共享的,因此会引入线程问题。 - Tim Schmelter
@EmanuelPirovano 如果是这样,为什么你不给它点个踩呢?或者如果你认为它可以改进,提供一些建议吧。 - rene

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接