Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 编辑明细记录后,gridview中选择了错误的记录_Asp.net_Gridview_Detailsview - Fatal编程技术网

Asp.net 编辑明细记录后,gridview中选择了错误的记录

Asp.net 编辑明细记录后,gridview中选择了错误的记录,asp.net,gridview,detailsview,Asp.net,Gridview,Detailsview,我有一个GridView显示了几个记录。单击第三条记录,在下面显示一个详细视图,我可以在其中编辑该记录。如果我对记录进行更改并保存,GridView将刷新并恢复,现在我编辑的记录是第5行。但是,第三行仍然处于选中状态,DetailsView现在显示的记录与我刚才编辑的记录不同 在通过DetailsView进行更新后,如何确保在GridView中重新选择记录,无论它现在在GridView排序顺序中的哪个位置?您可以通过将字段添加到GridView的DataKeyNames来跟踪每一行的ID。在代码

我有一个GridView显示了几个记录。单击第三条记录,在下面显示一个详细视图,我可以在其中编辑该记录。如果我对记录进行更改并保存,GridView将刷新并恢复,现在我编辑的记录是第5行。但是,第三行仍然处于选中状态,DetailsView现在显示的记录与我刚才编辑的记录不同


在通过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;
        }
    }
}