C# 如何保存GridView行并在回发后调用它们?

C# 如何保存GridView行并在回发后调用它们?,c#,asp.net,vb.net,C#,Asp.net,Vb.net,我正在学习asp.net,我有一个动态的GridView, 这意味着GridView行在搜索后会更改, 意思是它的SelectCommand发生了变化 我的目标是: 1-要保存GridView及其搜索结果行 2-并在任何数量的页面回发后获得相同的GridView(搜索结果) 如何实现这一点?我认为在将数据绑定到GridView之前,需要检查属性。试着这样做: protected void Page_Load(object sender, EventArgs e) { if (!IsPostB

我正在学习asp.net,我有一个动态的
GridView
, 这意味着
GridView
行在搜索后会更改, 意思是它的
SelectCommand
发生了变化

我的目标是: 1-要保存
GridView
及其搜索结果行

2-并在任何数量的页面回发后获得相同的
GridView
(搜索结果)


如何实现这一点?

我认为在将数据绑定到GridView之前,需要检查属性。试着这样做:

protected void Page_Load(object sender, EventArgs e)
{
  if (!IsPostBack)
  {
      GridView1.DataSourceID = "SqlDataSource1";
      GridView1.DataBind();
  }
}

您需要将代码绑定到page_load in page.IsPostback属性中,如

protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
             // Initially bind your grid view like
                GridView1.DataSource = "DataSource";
                GridView1.DataBind();
            }
        }
搜索后

在搜索场景中,您必须将用户输入作为参数传递并进行搜索 根据用户输入并再次调用DataBind方法进行刷新 与用户输入相关的网格视图

临时存储

首先,您需要在数据库中创建一个临时表,您的数据库结构将类似于要在网格上显示的字段或与搜索查询所选值相关的字段

示例

如果要从搜索查询中选择姓名、地址、电话号码、薪资等字段,则必须将这些字段创建到临时数据库表中

现在你有问题了。

1) 将数据存储到临时表中的位置

当您通过搜索从数据库过滤器中获取值时,请运行一个插入查询,并将这些数据放入临时表中以供将来使用

2) 表必须在每页之间保持不变

您正在将数据作为临时表保存到数据库中,因此它必须是持久的

现在,您已经将搜索到的数据放入了临时表中,因此,无论何时您想要显示搜索到的数据,都可以使用临时表绑定网格视图,这意味着在查询中使用临时表名称,如

从temporarytablename中选择*

希望你能理解


希望它能起作用。

如果用户不离开
.aspx
页面,则ASP.Net控件(如
GridView
)在回发到同一页面后保留状态的能力是固有的

正如其他人所提到的,
ViewState
无法正常工作的常见原因之一是,如果您在回发后无意中将新的/不同的数据重新绑定到
GridView
,您可以通过检查
来避免这样做!IsPostBack
(即,仅在首次访问页面时将初始数据绑定到GridView,或显式重新绑定,例如,如果用户更改其搜索过滤器等)


如果用户从包含GridView的页面导航到之外后需要保留原始搜索结果,则需要将状态缓存到其他位置,如中,但不建议在SessionState中存储大量数据。在这种情况下,您可能会保存用户在
SessionState
中获取数据时运行的筛选器或查询,而不是从搜索返回的实际数据。

谢谢Patrick,这是为了搜索,但问题不是,问题不是搜索,问题是如何在搜索后保持GridView的原样,然后在离开GridView所在的页面并返回后将其恢复。感谢StuartLC,没关系,如果在asp.net中可能的话,我正在学习这种方法,在搜索后将GridView保存为原样,然后保留到页面,然后返回到相同的GridView行,你是对的,这就是我需要做的,但是……你说的
保存用户运行的过滤器或查询是什么意思,你是说保存SelectCommand吗?还是别的什么?无论采用哪种方式,我都可以通过
获取SessionState中的数据?恐怕我也不明白这一点。谢谢Rahul,你所说的
将用户输入作为参数传递是什么意思,你的意思是使用QueryString吗?如果是这样的话,那么在我从一个页面转到另一个页面并最终转到GridView页面之后,如何保留这些QueryString值呢?我如何保存这些输入?我不是说查询字符串,它意味着将用户输入文本传递给您使用“选择查询”的方法,让我们假设您的数据库中有一个从1月到12月的月份列表,现在用户需要4月的数据,然后他们将在搜索框中输入4月,然后点击enter或任何事件,现在,您将该“April”传递给查询,以便只搜索April,如“Select*from tablename where month=“April”,在获取数据后再次绑定gridview。现在,您的grid view将显示April的数据,这是用户想要的,也是搜索的功能。再次感谢Rahul,感谢您的解释,这非常有用,但我很抱歉:问题不在于搜索,问题在于是否有办法保留搜索(可能是选择查询结果?),即保留搜索的GridView结果,以便稍后调用。示例:我执行您在评论中提到的搜索,然后转到另一个页面并再次返回GridView页面,我将看到搜索结果未保存。这就是问题所在:在完成搜索并离开页面后,如何保持GridView?问题不在于搜索。好吧,好吧,我也有一个解决方案,你需要使用一个临时表,在其中保存搜索到的数据,当你想显示它时,将数据工具与该临时表绑定。如果你不介意,我怎么做呢?一个例子或一个链接将是非常好的。