2010-11-05 59 views
1

我在webform上有一個ASP.net gridview,用戶可以選擇一行。當他們選擇它時,該行將突出顯示爲黃色。問題是,當我排序表時,它排序正確,但突出顯示保持在同一行。數據全部移動,但突出顯示仍然存在。GridView排序時突出顯示的行不會移動

任何人都可以提出如何使突出顯示保持與數據?

+0

檢查此鏈接:閱讀馬克Rideout的後,看看是否適合你:http://social.msdn.microsoft.com/forums/en-US/winformsdatacontrols/thread/01f937af-d0d0-4de5-8919-088e88c5af77/ – mint 2010-11-05 19:02:38

+0

我不認爲這正是我需要的。但它確實提供了一個基本框架:在排序之前獲取表datakeyvalue,然後讓排序發生,將selectedrowindex重新分配給該鍵,然後重新高亮。問題是如何在沒有循環的情況下分配正確的索引。 – MAW74656 2010-11-05 19:08:19

+0

有沒有一種方法可以找到特定datakey值的索引? – MAW74656 2010-11-05 19:33:52

回答

1

在排序之前抓取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屬性中的行數,而不是從數據庫返回的每一行。

0

問題是,您正在排序網格的數據源,而不是網格。

在排序前獲取所選行的ID,然後在排序後將其設置爲選中狀態。

+0

問題是,排序後數據現在處於不同的索引中。我需要找到並設置新的索引。 – MAW74656 2010-11-05 19:09:12

0

很簡單找到當前選擇的項目datakey - MyGrid.SelectedDataKey.Value.ToString() 如果你有一個單一的DataKey那是,不然你要讀兩個值,這是在MyGrid.SelectedDataKey.Values

可用

排序後,您必須迭代項目並找到具有匹配數據項的項目。 MyGrid.Rows [i] .DataItem應該對此有所幫助 - 請注意,這僅在數據綁定時可用,所以如果您重新排序而沒有重新數據綁定(例如,如果將所有數據存儲在視圖狀態中),它將不包含任何內容。

+0

我得到了第一部分沒有問題。但是,如何使用.DataItem來查看單元格值? – MAW74656 2010-11-05 21:03:54

+0

請注意,單元格值和數據源項目值之間存在差異。你可以訪問單元格的值沒有問題 - 只是行[]。Cells []。Controls []集合。但這些將被格式化。更好地訪問DataItem - 它實際上包含DataRow或類似的類型(在調試器中確定),您可以讀取該行數據綁定到的實際值。 – Artemiy 2010-11-05 22:25:33