C# Gridview搜索或查询的结果?
我们有一个可以编辑的gridview,这个gridview由C# Gridview搜索或查询的结果?,c#,asp.net,gridview,C#,Asp.net,Gridview,我们有一个可以编辑的gridview,这个gridview由RegularSearch()或SearchById(字符串Id)填充 代码如下: protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { string empId = Request.QueryString["EmpId"];
RegularSearch()
或SearchById(字符串Id)
填充
代码如下:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
string empId = Request.QueryString["EmpId"];
if (!string.IsNullOrEmpty(empId))
{
SearchByEmpId(empId);
}
else
{
RegularSearch();
}
}
}
protected void GridView_EmpId_RowEditing(object sender, GridViewEditEventArgs e)
{
GridView_EmpId.EditIndex = e.NewEditIndex;
string empId = Request.QueryString["empId"];
if (!string.IsNullOrEmpty(empId))
{
SearchByEmpId(empId);
}
else
{
RegularSearch();
}
// Start editing gridview row
}
当我访问Employees.aspx?empId=ABC123页面时,将调用SearchByEmpId(empId),网格将显示一行。当我单击“编辑”时,GridView\u EmpId\u RowEditing
将通过SearchByEmpId(EmpId)重新绑定GridView
我将用empid
编辑这一行。那很好
我编辑行,然后单击搜索按钮,它将调用RegularSearch()代码>。结果(比如200行)将显示在网格中
问题是当我编辑一行时,GridView\u EmpId\u RowEditing
将被调用,它将重新检查查询字符串。由于Request.QueryString[“EmpId”]
将具有来自上一个请求的值,GridView\u EmpId\u RowEditing
将使用SearchByEmpId(EmpId)绑定GridView代码>而不是常规搜索()代码>
解决此问题的方法有很多(例如会话变量或viewstate),但必须有一种更优雅的方法来解决此问题。您可以使用属性保留现有内容并将其绑定到viewstate,确保在编辑完成后清除该属性
但通常,我会从所选行的数据中获取记录Id,而不是ViewState映射属性
下面是一个使用ViewState的示例
// new property using the ViewState to retain the data across requests.
private string SelectedEmpId
{
get
{
if(ViewState["SelectedEmpId"] == null)
{
ViewState["SelectedEmpId"] = string.Empty;
}
return ViewState["SelectedEmpId"].ToString();
}
set
{
ViewState["SelectedEmpId"] = value;
}
}
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
// set property from your query param
SelectedEmpId = Request.QueryString["EmpId"];
if (!string.IsNullOrEmpty(SelectedEmpId))
{
SearchByEmpId(SelectedEmpId);
}
else
{
RegularSearch();
}
}
}
protected void GridView_EmpId_RowEditing(object sender, GridViewEditEventArgs e)
{
GridView_EmpId.EditIndex = e.NewEditIndex;
// we reference our ViewState mapped property
if (!string.IsNullOrEmpty(SelectedEmpId))
{
SearchByEmpId(SelectedEmpId);
}
else
{
RegularSearch();
}
// Start editing gridview row
// ...
// clear ViewState mapped property after edit is completed
SelectedEmpId = string.Empty;
}
通常,在edit方法中,我将从所选行的数据而不是查询参数中获取记录Id。也就是说,您可以使用属性保留现有内容并将其绑定到ViewState。为什么关闭这个问题?为什么关闭这个问题?好吧,推测一下亲密选民的想法,我突然想到:必须有一个更优雅的方式来解决这个问题——“优雅”是一个意见问题,而不是事实。看看为什么不鼓励这样做。在你的问题中,你甚至说有很多种方法可以解决这个问题,所以你可以根据自己的标准选择一种。我只会在第一页的帖子上使用过滤器。对于任何其他情况,请使用viewstate,其中可能包括行编辑事件。所以,在页面加载时,将查询值移动到viewstate,所有过滤代码现在都可以针对viewstate(“MyFilter”)工作。这意味着如果你点击清除,或者再次搜索,或者别的什么?您可以清除或重新设置ViewState(“MyFilter”)=“”或其他内容。因此,在第一次发布到页面(postback=false)上,然后按您所做的那样,将查询筛选值移动到viewstate-所有附加代码都可以使用viewstate-您可以根据需要清除/设置/重置。