2012-07-14 22 views

回答

3

首先單擊添加數據項並添加類型爲字符串的本地屬性。爲了討價還價,將其稱爲SearchType。在SearchType的屬性窗口中,單擊選擇列表。用上面列出的值填充選擇列表(即所有設備,新設備等)。將它拖到控制樹上,它將成爲一個AutoCompleteBox。

右鍵單擊我要打電話給您的Equipment表,然後單擊添加查詢。給這個名字,如EquipmentSearch。建立類似於在晏的鏈接的步驟2所示的查詢:

enter image description here

添加參數,但不添加過濾器。我們把它稱爲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自定義返回的結果。

+0

可以使用LINQ的獎勵積分。我現在就試試這個,謝謝你的詳細回覆! – 2012-07-16 18:34:09

+0

這一切都很好,除了一個奇怪之外。我在使用查詢時發現「無法加載數據,請檢查您的網絡...」錯誤:查詢=從查詢中的es where(DateTime.Now - es.DatePurchased).Days <32在switch語句中選擇es – 2012-07-16 22:56:06

+0

有一個很多事情導致了這一點。其他查詢的工作,只是這一個給出了錯誤?這在運行時是否正確?這是一個桌面應用程序或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

1

通過將屏幕查詢屬性添加到屏幕,然後將它們從設計器的左側拖到屏幕控制樹上,可以將多個數據網格放在同一屏幕上。

這是你在問什麼?

編輯:

有不同的查詢相關聯的每個條目」使我相信,你想在一個屏幕上多個實體。

這有幫助嗎? Creating a ComboBox filtered Search Screen

+0

我想要做的是在屏幕頂部用預設條目下拉一下,每條條目都與一個不同的查詢相關聯,所以我不必擁有這麼多屏幕只是爲了顯示不同的結果集相同的數據。 – 2012-07-16 06:00:37

+0

對於出現同樣問題的任何人。除了凱爾的優秀建議之外,還有兩個鏈接可能也有幫助。 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

1

您還可以在Lightswitch中執行的操作是在分配給查詢的屏幕中定義一個額外的屬性,該屬性由屏幕上顯示的屬性決定。

在查詢編輯器中,將屬性分配給表中的字段,就像您通常那樣。

現在使用顯示的其他屬性,選擇Property_Changed事件,並使用所使用的開關事件(例如在embedded.kyle的示例中),根據它們的選擇來分配查詢中使用的屬性。然後,您可以在屏幕的創建事件中分配默認值。

這使代碼保留在預處理查詢和屏幕代碼之外。它可能是一個偏好的事情,但我喜歡只在需要時才使用預處理查詢,例如交叉引用不受單獨表格處理的表格。

相關問題