user1048281
user1048281

Reputation: 233

Maintaining Row Selection in ASP.NET GridView Control

The Setup: I currently have a page with a GridView control on it inside of an update panel, using a SqlDataSource. I have a timer setup to update the GridView every X amount of seconds. Typically for what I am testing every time the GridView updates about 4-5 new rows of data are added to the gridview, while the last 4-5 get tossed out. I am only displaying 15 results at a time and will have new results coming in every update.

The Problem: I allow the user to select the rows, while the GridView is being updated. I am handling this by setting the SelectedIndex property. However, when I select a row and then the grid is updated the row the user selected gets pushed down about 4-5 rows and the data in the previous selected index is selected instead. So where they clicked is selected at this point, not what they clicked.

I need a way to determine, if possible from the SqlDataSource/Gridview, how many new rows have been added to the gridview. OR a way to maintain the selected data by the data in the row and not just the SelectedIndex.

Any help is appreciated, thanks.

RESOLVED: Ok I went ahead and added a new invisible column to my grid, and am now keep track of the unique ID's selected from the DB. By setting an array before databinding, and comparing that to the new array I get after databinding I was able to use a simple Intersect to determine the number of rows that are the same. Then I used that to determine from the total how many are new this postback.

Upvotes: 1

Views: 2537

Answers (2)

Leniel Maccaferri
Leniel Maccaferri

Reputation: 102428

Just an idea:

I think you can use an invisible column (more specifically an ID column) to store the selected rows' IDs value in the Session object and then after the grid updates, you can retrieve this value(s) and select the row(s) again if they are still present.

Upvotes: 1

rofans91
rofans91

Reputation: 3010

If you have custom GridView OnRowUpdating event.

public void GridView_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
    Session["CurrIndex"] = GridView.SelectedIndex;//index before insertion
    Session["RowCount"] = GridView.Rows.Count;//row count before insertion
    //Add new Rows
    GridView.SelectedIndex = (Int32)(Session["CurrIndex"]) + ( GridView.Rows.Count - (Int32)(Session["RowCount"]);//update selected index
    Session["CurrIndex"] = GridView.SelectedIndex;//restore the index into session
}  

Upvotes: 0

Related Questions