如何在gridview中转到特定记录

时间:2012-11-09 09:29:56

标签: c# asp.net gridview

我在a.aspx中有多页记录的gridview。 当我单击b.aspx中的按钮时,我需要转到包含gridview中记录的特定页面。

1 个答案:

答案 0 :(得分:4)

我认为您确实想要转到特定记录。然后我将通过url-parameter(或session)传递它的ID,然后使用此记录转到网格中的页面。这是更好的,因为页面可能会改变(例如,排序)。

假设您的网格列出了产品,并且您希望确保显示特定产品,因为您刚刚在另一个页面上编辑了产品详细信息。同时假设您的DataSourceDataTable(但这并不重要):

/// <summary>
/// Binds the products-GridView.
/// </summary>
/// <param name="ProductID">the ProductID to be displayed, changes also the PageIndex if necessary</param>
private void BindProductGrid(int ProductID = -1)
{
    DataTable tblProducts = getAllProducts();
    GridProducts.DataSource = tblProducts;
    bool needsPaging = (tblProducts.Rows.Count / GridProducts.PageSize) > 1;

    if (ProductID == -1)
    {
        this.GridProducts.PageIndex = 0;
        this.GridProducts.SelectedIndex = -1;
    }
    else
    {
        int selectedIndex = tblProducts.AsEnumerable()
            .Select((Row, Index) => new { Row, Index })
            .Single(x => x.Row.Field<int>("ProductID") == ProductID).Index;
        int pageIndexofSelectedRow = (int)(Math.Floor(1.0 * selectedIndex / GridProducts.PageSize));
        GridProducts.PageIndex = pageIndexofSelectedRow;
        GridProducts.SelectedIndex = (int)(GridProducts.PageIndex == pageIndexofSelectedRow ? selectedIndex % GridProducts.PageSize : -1);
    }
    GridProducts.DataBind();
}