2013-06-30 62 views
0

我有一個ASPX頁面,它通過一個實體類與一個GridView控件綁定(通過DataSourceID)綁定到一個sql數據庫。在編輯一行後,數據被正確更新,但編輯行中的一些列現在爲空。非空的列顯示更新的數據,並且數據實際上在數據庫中更新。此外,即使在更新的行中顯示爲空的列也在數據庫中正確更新。非空的列顯示更新數據的事實也證明了GridView在行更新後執行了一個數據綁定。爲什麼更新行中的某些列顯示空白超出了我的範圍......更新後更新後的gridview行中的某些列爲空

更重要的是,如果我編輯另一行,新編輯的行現在顯示與先前編輯的行顯示爲空的相同的列。然後,以前編輯的行現在顯示所有列。

編輯: 我剛剛發現只有當我在數據源上設置deferredloadingenabled爲true時纔會出現此問題。這種情況發生在那些不屬於數據源實體表的部分的列中。我可以通過創建一個視圖來解決這個問題,但這是非常低效的。這意味着我需要爲每個gridview創建一個視圖。

+1

你只是說這將是低效率的,因爲你想懶惰,* * * *爲每個* gridview *做一個視圖?還是有真正的證據表明它實際上效率不高? – Zack

回答

0

這裏的問題是,在更新之後,到其他實體的鏈接對於更新的行是NULL。你可以做的是使用與其他實體鏈接相對應的ID並進行按需查詢。

也就是說,也許您的定義類似於<%#Eval(「Customer.FirstName」)%>,更新後,該行可能爲空,因爲屬性「客戶」即客戶實體的鏈接取得第一個名字,爲空。所以定義如下:

<%# Eval("Customer.FirstName") ?? Customer.GetFirstNameByID(Eval("CustomerID")) %> 

您將在Customer實體類中定義函數GetFirstNameByID以返回客戶的名字。現在在更新之後,如果「Customer」屬性爲null,則第一個Eval()將返回null,以便執行第二個語句。 Eval(「CustomerID」)將起作用,因爲屬性「CustomerID」是當前實體的一部分。然後返回適當的屬性,並且該列不會顯示爲空。