我正在学习 asp.net 并且我有一个动态GridView
的,这意味着GridView
搜索后行会发生变化,这意味着它的SelectCommand
变化。
我的目标:
1 - 保存GridView
搜索结果及其行,
2 -GridView
在任意数量的页面回发后得到相同的(搜索结果)。
我怎样才能做到这一点?
我认为您需要Page.IsPostBack
在将数据绑定到 GridView 之前检查该属性。尝试这样的事情:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
GridView1.DataSourceID = "SqlDataSource1";
GridView1.DataBind();
}
}
您需要在 Page.IsPostback 属性中的 page_load 中绑定代码,例如
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) 表必须从一页到另一页是持久的。
您将数据作为临时表保存到数据库中,因此它必须是持久的。
现在您将搜索到的数据放入临时表中,因此每当您想显示搜索到的数据时,将网格视图与临时表绑定意味着在查询中使用临时表名称,例如
从临时表名中选择 *
希望你能理解。
希望它有效。
如果您在页面和控件上启用ViewState ,则ASP.Net 控件(如GridView
在回发到同一页面后保留状态)的能力是固有的,前提是用户不离开页面。.aspx
ViewState
正如其他人所提到的,无法正常工作的常见原因之一是如果您GridView
在回发后无意中将新/不同的数据重新绑定到 - 您可以通过检查来避免这样做!IsPostBack
(即将初始数据绑定到 GridView 仅在第一次 GET 访问页面,或者明确地重新绑定它,例如如果用户更改他/她的搜索过滤器等)。
如果您需要在用户离开包含 GridView 的页面后保留原始搜索结果,则需要在其他位置缓存状态,例如在SessionState中,但不建议在 SessionState 中存储大量数据。在这种情况下,您可以改为保存用户运行以获取数据的过滤器或查询SessionState
,而不是从搜索返回的实际数据。