Asp.net 编辑明细记录后,gridview中选择了错误的记录
我有一个GridView显示了几个记录。单击第三条记录,在下面显示一个详细视图,我可以在其中编辑该记录。如果我对记录进行更改并保存,GridView将刷新并恢复,现在我编辑的记录是第5行。但是,第三行仍然处于选中状态,DetailsView现在显示的记录与我刚才编辑的记录不同Asp.net 编辑明细记录后,gridview中选择了错误的记录,asp.net,gridview,detailsview,Asp.net,Gridview,Detailsview,我有一个GridView显示了几个记录。单击第三条记录,在下面显示一个详细视图,我可以在其中编辑该记录。如果我对记录进行更改并保存,GridView将刷新并恢复,现在我编辑的记录是第5行。但是,第三行仍然处于选中状态,DetailsView现在显示的记录与我刚才编辑的记录不同 在通过DetailsView进行更新后,如何确保在GridView中重新选择记录,无论它现在在GridView排序顺序中的哪个位置?您可以通过将字段添加到GridView的DataKeyNames来跟踪每一行的ID。在代码
在通过DetailsView进行更新后,如何确保在GridView中重新选择记录,无论它现在在GridView排序顺序中的哪个位置?您可以通过将字段添加到GridView的
DataKeyNames
来跟踪每一行的ID。在代码隐藏中刷新网格之前,请记住所选行的ID(此处假设相关ID是一个名为ClientID的字段):
然后,您可以在绑定数据后查找它并选择相应的行:
void gvClients_DataBound(object sender, EventArgs e)
{
gvClients.SelectedIndex = -1;
foreach (GridViewRow row in gvClients.Rows)
{
int clientID = (int)gvClients.DataKeys[row.RowIndex].Values["ClientID"];
if (clientID == savedClientID)
{
gvClients.SelectedIndex = row.RowIndex;
break;
}
}
}
更新
如果在GridView中打开了分页,您可能必须使用本文中建议的方法:我尝试了几乎相同的解决方案,只是在循环方式上略有不同。只要记录在GridView的同一页上开始并结束,此解决方案和其他解决方案都可以工作。我已在GridView中分页结果。如果编辑的记录从第5页转到第1页,则会选择第5页上的记录,而不是现在第1页上的编辑记录。我添加了一个链接,指向一篇文章,该文章可以帮助您。
void gvClients_DataBound(object sender, EventArgs e)
{
gvClients.SelectedIndex = -1;
foreach (GridViewRow row in gvClients.Rows)
{
int clientID = (int)gvClients.DataKeys[row.RowIndex].Values["ClientID"];
if (clientID == savedClientID)
{
gvClients.SelectedIndex = row.RowIndex;
break;
}
}
}