我在webform上有一個ASP.net gridview,用戶可以選擇一行。當他們選擇它時,該行將突出顯示爲黃色。問題是,當我排序表時,它排序正確,但突出顯示保持在同一行。數據全部移動,但突出顯示仍然存在。GridView排序時突出顯示的行不會移動
任何人都可以提出如何使突出顯示保持與數據?
我在webform上有一個ASP.net gridview,用戶可以選擇一行。當他們選擇它時,該行將突出顯示爲黃色。問題是,當我排序表時,它排序正確,但突出顯示保持在同一行。數據全部移動,但突出顯示仍然存在。GridView排序時突出顯示的行不會移動
任何人都可以提出如何使突出顯示保持與數據?
在排序之前抓取SelectedDataKey.Value(OnSorting?)。 然後排序(?OnSorted)後,使用類似:
foreach(var row in GridView1.Rows)
{
var i = Convert.ToInt32(ViewState["MySavedSelectedDataKey"]));
if(GridView1.DataKeys[row.RowIndex].Value == i)
{
GridView1.SelectedIndex = row.RowIndex;
break;
}
}
您可能需要再次調用DataBind(),以顯示新集的SelectedIndex。
我不相信無論如何不循環每行都可以做到這一點。但是如果你有分頁,那麼你只需循環你的PageSize屬性中的行數,而不是從數據庫返回的每一行。
問題是,您正在排序網格的數據源,而不是網格。
在排序前獲取所選行的ID,然後在排序後將其設置爲選中狀態。
問題是,排序後數據現在處於不同的索引中。我需要找到並設置新的索引。 – MAW74656 2010-11-05 19:09:12
很簡單找到當前選擇的項目datakey - MyGrid.SelectedDataKey.Value.ToString() 如果你有一個單一的DataKey那是,不然你要讀兩個值,這是在MyGrid.SelectedDataKey.Values
可用排序後,您必須迭代項目並找到具有匹配數據項的項目。 MyGrid.Rows [i] .DataItem應該對此有所幫助 - 請注意,這僅在數據綁定時可用,所以如果您重新排序而沒有重新數據綁定(例如,如果將所有數據存儲在視圖狀態中),它將不包含任何內容。
檢查此鏈接:閱讀馬克Rideout的後,看看是否適合你:http://social.msdn.microsoft.com/forums/en-US/winformsdatacontrols/thread/01f937af-d0d0-4de5-8919-088e88c5af77/ – mint 2010-11-05 19:02:38
我不認爲這正是我需要的。但它確實提供了一個基本框架:在排序之前獲取表datakeyvalue,然後讓排序發生,將selectedrowindex重新分配給該鍵,然後重新高亮。問題是如何在沒有循環的情況下分配正確的索引。 – MAW74656 2010-11-05 19:08:19
有沒有一種方法可以找到特定datakey值的索引? – MAW74656 2010-11-05 19:33:52