2012-02-01 40 views
1

設置: 我目前使用SqlDataSource在更新面板內部有一個帶有GridView控件的頁面。我有一個計時器設置來每隔X秒更新一次GridView。通常,對於我每次GridView更新大約4-5個新行數據被添加到gridview時測試的內容,而最後的4-5被拋出。我一次只顯示15個結果,每次更新都會有新的結果。在ASP.NET GridView控件中維護行選擇

問題: 我允許用戶選擇行,而GridView正在更新。我通過設置SelectedIndex屬性來處理這個問題。但是,當我選擇一行,然後更新網格時,用戶選擇的行將被下推約4-5行,而選擇之前選定索引中的數據。因此,他們點擊的位置在此處被選中,而不是他們點擊的位置。

我需要一種方法來確定,如果可能從SqlDataSource/Gridview,有多少新行已添加到gridview。或通過行中的數據維護所選數據的方式,而不僅僅是SelectedIndex。

任何幫助表示讚賞,謝謝。

已解決: 好吧,我繼續前進,並在我的網格中添加了一個新的不可見列,並且現在跟蹤從數據庫中選擇的唯一ID。通過在數據綁定之前設置一個數組,並將其與數據綁定後得到的新數組進行比較,我可以使用簡單的相交來確定相同的行數。然後我用它來確定總共有多少新回發。

回答

1

只是一個想法:

我想你可以使用一個無形的列(更準確地說是ID列)到所選行IDs值存儲在Session對象,然後後電網的更新,你可以檢索這值,如果它們仍然存在,再次選擇行。

+0

嗯..我明白了。是的,這會起作用,但在我的情況下似乎可能是很多處理。此外,我想知道是否有一種方法可以確定有多少行數據綁定是新的,這可能會有很大的幫助,因爲那樣我就不必再次遍歷所有行,查找可能存在或可能不存在的ID。 – user1048281 2012-02-01 13:56:26

+0

您希望網格中有多少行?我不認爲這會需要很多處理...他們只是數字,搜索會運行得非常快。 – 2012-02-01 14:05:02

+1

好吧,我繼續向我的網格中添加一個新的不可見列,並且現在跟蹤從數據庫中選擇的唯一ID。通過在數據綁定之前設置一個數組,並將其與數據綁定後得到的新數組進行比較,我可以使用簡單的相交來確定相同的行數。然後我用它來確定總共有多少新回發。 – user1048281 2012-02-01 15:20:20

0

如果您有自定義的GridView OnRowUpdating事件。

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 
} 
+0

感謝您的建議。我現在正在做類似的事情,但請注意,這個事件發生在用戶更新行時,而不是行正在被數據綁定/添加時。 – user1048281 2012-02-01 15:21:52