2010-01-06 48 views
0

我有一個棘手的小問題,我輸出審計跟蹤並需要突出顯示每條記錄的更改。基於先前記錄的Asp.Net中繼器格式項目

我目前使用Linq-to-Sql數據源將審計數據拉回來,然後使用可正常工作的中繼器將其顯示在表中。

問題是我需要改變一個單元格的背景顏色,如果它的值已經從前一個記錄改變了,我正在努力尋找一種方法來做到這一點。

另一個我認爲是簡單地生成整個表,這將工作,但我只是覺得必須有一個更簡單的方法來做到這一點。

有什麼想法?

回答

0

必須玩之後我發現它是最快生成手動的HTML。

我在原始問題中忘記提及我必須將記錄的順序顛倒(即最近的第一個記錄),因此在中繼事件中記錄樣式變得更加困難,例如,添加第一條記錄,其中具有顏色編碼的單元格以指示更改,但此時下一條記錄尚未寫入,因此您沒有任何可比較的記錄。

最簡單的方法似乎是循環遍歷代碼後面的記錄,並將屬性與屬性進行比較,然後根據該屬性創建樣式。

謝謝大家花時間看問題並提出解決方案。

2

您可以使用ItemDataBound事件檢查項目綁定時的值。此時,您可以根據前一個單元格檢查該值,如果不同,請將CssClass添加到具有所需格式的文件中。

+0

我想過這樣做,但遇到了如何在相應的單元格中的上一行檢查值的問題。 關於如何做檢查的任何建議? – Nathan 2010-01-06 21:39:16

+1

在過去,我已經能夠訪問ItemDataBound中的GridView對象,所以您真正需要的是找出當前的rowindex,然後比較GridView對象中的correpsonding行。嘗試e.rowindex – 2010-01-06 22:14:06

0

選擇數據項的集合並將其保存到具有受保護get屬性的類變量中。數據項的集合需要被鍵入索引。然後在運行時將GridView綁定到數據項的集合。

那麼你應該能夠訪問以前的項目在asp.net與標籤類似

<%# this.DataItems[Container.DataItemIndex] == this.DataItems[Container.DataItemIndex] ? "same as previous item" : "different than previous item" %> 
0

在你的頁面類創建一個域:

private int previousValue; 

然後在ItemCreated或ItemDataBound事件:

int currentValue = << get current value >>; 

if (previousValue != currentValue) { 
    << do highlight >>; 
    previousValue = currentValue; 
} 
1

我知道這是一個古老的問題,但對知識池有貢獻,因爲我也發現這個棘手。

聲明性的解決辦法是訪問以前的DataListItem

((DataList)Container.Parent).Items[Container.ItemIndex-1] 

然而,不幸的是這DataItem屬性似乎是空,因此您可以將以前的DataItem的不EVAL性質(例如與一個進行比較當前DataItem的屬性)。

e。克這種不起作用:

<%# (DataBinder.Eval((((DataList)Container.Parent).Items[Container.ItemIndex-1]).DataItem, "SomeProperty")) == Eval("SomeProperty")) ? "SAME" : "DIFFERENT" %> 

但是,您可以使用ListItem.FindControl從以前的項目訪問控制和訪問控制內容。

(Eval("SomeProperty").ToString() == ((Label)(((DataList)Container.Parent).Items[Container.ItemIndex-1].FindControl("LabelBoundToSomeProperty"))).Text) ? "SAME" : "DIFFERENT" 

最後,疑難雜症 - 結合的第一個項目時,有沒有以前的項目,所以你會得到一個索引越界異常。因此,你只需要首先檢查你是不是在第一個項目。

把它全部togetehr給你一個最後的純聲明solultion:

<%# (Container.ItemIndex==0) ? "FIRST" : (Eval("SomeProperty").ToString() == ((Label)(((DataList)Container.Parent).Items[Container.ItemIndex-1].FindControl("LabelBoundToSomeProperty"))).Text) ? "SAME" : "DIFFERENT" %> 

上面會寫出來,我們是否在第一個項目,或者在隨後的項目所選擇的屬性是相同的或不同前一項中的該屬性。

(附:首屆SO提交 - 很長一段時間的讀者,第一次作家:)

相關問題