我想在搜索框的搜索屏幕上放置一個下拉菜單,並讓每個條目與不同的查詢相關聯。這是在我的業務使用的數據庫,我們現在有太多的屏幕,比如:有沒有一種方法可以在Lightswitch中根據下拉菜單創建搜索屏幕
- 所有設備
- 新設備
- 可用的設備
- 已售設備
- 未付設備
- Unpaid佣金
我正在使用Lightswitch V2來回在2012 RC中
我想在搜索框的搜索屏幕上放置一個下拉菜單,並讓每個條目與不同的查詢相關聯。這是在我的業務使用的數據庫,我們現在有太多的屏幕,比如:有沒有一種方法可以在Lightswitch中根據下拉菜單創建搜索屏幕
我正在使用Lightswitch V2來回在2012 RC中
首先單擊添加數據項並添加類型爲字符串的本地屬性。爲了討價還價,將其稱爲SearchType
。在SearchType
的屬性窗口中,單擊選擇列表。用上面列出的值填充選擇列表(即所有設備,新設備等)。將它拖到控制樹上,它將成爲一個AutoCompleteBox。
右鍵單擊我要打電話給您的Equipment
表,然後單擊添加查詢。給這個名字,如EquipmentSearch
。建立類似於在晏的鏈接的步驟2所示的查詢:
添加參數,但不添加過濾器。我們把它稱爲SearchParam
而不是TownId
,並將其設爲String類型。
返回屏幕設計器,使用添加數據項將EquipmentSearch
查詢添加到屏幕。將其拖到樹上,以便它變成網格視圖。
點擊左側列表中的EquipmentSeach
,使其展開。然後點擊SearchParam
並在其屬性窗口中,點擊參數綁定下方的框並選擇SearchType
。
再次在查詢設計器中打開EquipmentSearch
。在查詢設計器的右上角,單擊編寫代碼旁邊的箭頭,然後選擇EqupimentSearch_PreprocessQuery
。
現在添加類似如下的代碼:
VB。NET
Private Sub EquipmentSearch_PreprocessQuery(SearchParam As System.Nullable(Of String), ByRef query As System.Linq.IQueryable(Of LightSwitchApplication.Equipment))
Select Case SearchParam
Case "New Equipment"
query = From es In query
Where es.EquipStatus = "New"
Select es
Case "Available Equipment"
query = From es In query
Where es.EquipStatus = "Available"
Select es
Case "Sold Equipment"
query = From es In query
Where es.EquipStatus = "Sold"
Select es
Case "Unpaid Equipment"
query = From es In query
Where es.EquipStatus = "Unpaid"
Select es
Case "Unpaid Commission"
query = From es In query
Where es.EquipCommission = "Unpaid"
Select es
End Select
End Sub
C#
private void EquipmentSearch_PreprocessQuery(System.Nullable[] SearchParam, void Of, void String) {
((System.Linq.IQueryable[])(query));
Of;
LightSwitchApplication.Equipment;
switch (SearchParam) {
case "New Equipment":
query = From es In query
Where es.EquipStatus = "New"
Select es
break;
case "Available Equipment":
query = From es In query
Where es.EquipStatus = "Available"
Select es
break;
case "Sold Equipment":
query = From es In query
Where es.EquipStatus = "Sold"
Select es
break;
case "Unpaid Equipment":
query = From es In query
Where es.EquipStatus = "Unpaid"
Select es
break;
case "Unpaid Commission":
query = From es In query
Where es.EquipCommission = "Unpaid"
Select es
break;
}
讓 「所有設備」 和所有其他人只是告吹。如果它通過,那麼網格視圖將顯示一個完整的,未過濾的整個表格的視圖,這是我假設你想在「所有設備」的情況下。在其他情況下,使用LINQ自定義返回的結果。
通過將屏幕查詢屬性添加到屏幕,然後將它們從設計器的左側拖到屏幕控制樹上,可以將多個數據網格放在同一屏幕上。
這是你在問什麼?
編輯:
「有不同的查詢相關聯的每個條目」使我相信,你想在一個屏幕上多個實體。
我想要做的是在屏幕頂部用預設條目下拉一下,每條條目都與一個不同的查詢相關聯,所以我不必擁有這麼多屏幕只是爲了顯示不同的結果集相同的數據。 – 2012-07-16 06:00:37
對於出現同樣問題的任何人。除了凱爾的優秀建議之外,還有兩個鏈接可能也有幫助。 LightSwitch - http://dotnettim.wordpress.com/2011/03/20/lightswitch-creating-a-combobox-filtered-search-screen/&http://msdn.microsoft.com/en-us/vstudio/hh499661 .aspx我希望有幫助。 – 2013-04-03 17:20:44
您還可以在Lightswitch中執行的操作是在分配給查詢的屏幕中定義一個額外的屬性,該屬性由屏幕上顯示的屬性決定。
在查詢編輯器中,將屬性分配給表中的字段,就像您通常那樣。
現在使用顯示的其他屬性,選擇Property_Changed事件,並使用所使用的開關事件(例如在embedded.kyle的示例中),根據它們的選擇來分配查詢中使用的屬性。然後,您可以在屏幕的創建事件中分配默認值。
這使代碼保留在預處理查詢和屏幕代碼之外。它可能是一個偏好的事情,但我喜歡只在需要時才使用預處理查詢,例如交叉引用不受單獨表格處理的表格。
可以使用LINQ的獎勵積分。我現在就試試這個,謝謝你的詳細回覆! – 2012-07-16 18:34:09
這一切都很好,除了一個奇怪之外。我在使用查詢時發現「無法加載數據,請檢查您的網絡...」錯誤:查詢=從查詢中的es where(DateTime.Now - es.DatePurchased).Days <32在switch語句中選擇es – 2012-07-16 22:56:06
有一個很多事情導致了這一點。其他查詢的工作,只是這一個給出了錯誤?這在運行時是否正確?這是一個桌面應用程序或Web應用程序?您是使用Intrinsic數據庫,SQL Server還是WCF/RIA服務?還有這個:http://social.msdn.microsoft.com/Forums/en-US/lightswitchgeneral/thread/9f6e3930-a953-4392-93e4-2fb3b3d952e9/雖然我不確定它是相關的。但是,只要將其排除,請將「DateTime.Now」設置爲等於局部變量並對其進行計算。 – 2012-07-17 12:55:26