2009-09-09 26 views
1

我在GridView中遇到了一個奇怪的問題。我設置了一個Select列,並允許排序。如果我選擇一行,然後對網格進行排序,則選擇保持原樣並對網格進行排序。也就是說,突出顯示的行被改變了,但是選擇的索引似乎並沒有改變。選中的行在GridView排序後不會改變

查看手錶中的網格,似乎選定的索引屬性實際上保持不變,但所選的數據鍵正在改變。

我很困惑,一直無法追查爲什麼會發生這種情況,有什麼想法?

回答

2

我發現a change request for this exact issue,指出以下:

這是由設計,我們不保持 曲目選擇的跨種類, 更新,刪除等,這部分將 不會改變。

看起來您將需要一種不同的方式來跟蹤所選擇的各行排序。

+0

他們確實無法跟蹤選定的RECORD,只選擇了ROW。爲了跟蹤選定的記錄,他們需要知道所表示的數據集的主要關鍵字段是什麼,這可能會因情況而異。在一種情況下,它可能是一個名爲ROWID的單個字段;在另一種情況下,它可能是三個領域的組合;在第三種情況下,數據 - 在它被帶回時 - 可能甚至沒有主鍵集。 – eidylon 2009-09-09 17:23:45

+0

啊,那就是對我的回答!至少我知道我現在不是瘋了。 我想我實際上只是放棄選定的行,因爲我不在乎它是否跟蹤它。我實際上在我們使用的修改過的多選網格中記錄了選定的行。雖然這個特定的單選網格拋棄了我。 感謝您清理東西! – CodexArcanum 2009-09-09 17:30:01

1

Acctually,我找到解決的辦法,也許不那麼甜的,但無論如何,我得到了我想要的東西:) 在GridView_PreRender負載事件

保護無效GridView1_PreRender(對象發件人,EventArgs的){ //如果文字太長,請將文本設爲trucate ..

 if (GridView1.Controls.Count != 0) 
     { 
      foreach (GridViewRow r in GridView1.Controls[0].Controls) 
      { 
       foreach (TableCell tc in r.Controls) 
       { 
        if (tc.Text != "" && tc.Text.Length > 39) 
        { 
         tc.Text = tc.Text.Substring(0, 39) + " ..."; 
        } 
       } 
      } 
     } 

     // here is the where the magic happens :) 
     if (GridView1.SelectedRow != null) 
     { 
      GridViewRow row = GridView1.SelectedRow; 
      if (row.Cells.Count > 1) 
      { 
       //Here I pick the p.keyID 
       SetOrderData(Convert.ToInt32(row.Cells[1].Text)); 

       this.LabelDebug.Text = row.Cells[1].Text; 
      } 
     } 
    } 
+0

什麼是SetOrderData? – Pieces 2010-08-11 13:37:19