我在GridView中遇到了一個奇怪的問題。我設置了一個Select列,並允許排序。如果我選擇一行,然後對網格進行排序,則選擇保持原樣並對網格進行排序。也就是說,突出顯示的行被改變了,但是選擇的索引似乎並沒有改變。選中的行在GridView排序後不會改變
查看手錶中的網格,似乎選定的索引屬性實際上保持不變,但所選的數據鍵正在改變。
我很困惑,一直無法追查爲什麼會發生這種情況,有什麼想法?
我在GridView中遇到了一個奇怪的問題。我設置了一個Select列,並允許排序。如果我選擇一行,然後對網格進行排序,則選擇保持原樣並對網格進行排序。也就是說,突出顯示的行被改變了,但是選擇的索引似乎並沒有改變。選中的行在GridView排序後不會改變
查看手錶中的網格,似乎選定的索引屬性實際上保持不變,但所選的數據鍵正在改變。
我很困惑,一直無法追查爲什麼會發生這種情況,有什麼想法?
我發現a change request for this exact issue,指出以下:
這是由設計,我們不保持 曲目選擇的跨種類, 更新,刪除等,這部分將 不會改變。
看起來您將需要一種不同的方式來跟蹤所選擇的各行排序。
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;
}
}
}
什麼是SetOrderData? – Pieces 2010-08-11 13:37:19
他們確實無法跟蹤選定的RECORD,只選擇了ROW。爲了跟蹤選定的記錄,他們需要知道所表示的數據集的主要關鍵字段是什麼,這可能會因情況而異。在一種情況下,它可能是一個名爲ROWID的單個字段;在另一種情況下,它可能是三個領域的組合;在第三種情況下,數據 - 在它被帶回時 - 可能甚至沒有主鍵集。 – eidylon 2009-09-09 17:23:45
啊,那就是對我的回答!至少我知道我現在不是瘋了。 我想我實際上只是放棄選定的行,因爲我不在乎它是否跟蹤它。我實際上在我們使用的修改過的多選網格中記錄了選定的行。雖然這個特定的單選網格拋棄了我。 感謝您清理東西! – CodexArcanum 2009-09-09 17:30:01