我有一個數據中繼器連接到一個數據源(數據表對象)。我需要在某些條件下更改某些列的前端輸出。什麼是最有效的方式來做到這一點?定製中繼器中數據源的輸出?
我目前正在嘗試創建格式化的輸出並將其分配給另一個數據表並將其用作數據源,但它看起來過於複雜,並且很難維護。
是否有更簡單的方法來處理數據源的列值?我需要能夠檢查源的上一行和下一行,因爲這是某些列值的基礎。
我有一個數據中繼器連接到一個數據源(數據表對象)。我需要在某些條件下更改某些列的前端輸出。什麼是最有效的方式來做到這一點?定製中繼器中數據源的輸出?
我目前正在嘗試創建格式化的輸出並將其分配給另一個數據表並將其用作數據源,但它看起來過於複雜,並且很難維護。
是否有更簡單的方法來處理數據源的列值?我需要能夠檢查源的上一行和下一行,因爲這是某些列值的基礎。
如果你談論的是操作簡單,在DataBinder.Eval
方法接受一個格式字符串:
<%#Eval("SomeMoneyColumn", "{0:C}")%>
如果格式字符串是不夠的,你可以創建在代碼隱藏的方法來處理格式化像這樣:
<%#FormatData(Eval("SomeColumn"))%>
在後臺代碼:
protected string FormatData(object data)
{
return String.Format("My name is {0}", data);
}
您也可以使用ItemDataBound
事件。使用這種技術,如果您的操作涉及綁定到中繼器的其他數據,您仍然可以訪問數據源對象。
protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
Label lblCtrl = e.Item.FindControl("SomeControl") as Label;
if (lblCtrl != null)
{
lblCtrl.Text = String.Format("My name is {0}", DataBinder.Eval(e.Item.DataItem, "SomeColumn"));
}
}
所以我可以在itemdatabound事件中獲取整個數據源? – chobo
是的,你可以.... –
我不認爲有一種方法可以做你想做的在客戶端輕鬆W/O使用特殊的邏輯就像你現在做的事情。如果您從數據庫獲取數據,則可以在數據庫端執行所有數據操作,並將其透明地傳送到前端。
你在說什麼樣的操作?我們在談論格式化日期,還是更復雜的東西? –
根據上一行和下一行的值更改列值(字符串) – chobo
嗯......聽起來這可能是'ItemDataBound'事件的一個好候選。 –