2011-02-09 28 views
1

我在infopath 2010表單上使用VSTA C#,通過使用級聯下拉(課程標題&課程詳細信息)信息顯示。顯示晚於當前日期的課程細節

因此,當用戶選擇課程名稱下拉菜單時,課程詳細信息將填入Sharepoint 2010列表中的開始時間,結束時間,位置和開發類別信息。

現在我遇到的問題是,我希望用戶只能查看今天和以後的課程信息,而不能查看過去的課程信息。這是我顯示課程細節的代碼。我試圖聲明一個DateTime變量,並用它與轉換爲DateTime有今天,要比較的字符串,使其最遲DateTime變量,但在我選擇課程標題它給了我一個錯誤,它說:「對象引用未設置爲對象的實例「。隨着故障排除提示:「使用new關鍵字來創建一個對象實例檢查,以確定該物體是調用方法前空找gengeral幫助這個例外。」

using (web = site.OpenWeb()) 
      { 
       try 
       { 
        //SPSecurity.RunWithElevatedPrivileges(new SPSecurity.CodeToRunElevated(delegate() 
        //{ 
        SPList lstDocs = web.Lists["Training Calander"] as SPList; 

        string sTitle = ""; 
        string sSDate = ""; 
        string sEDate = ""; 
        string sLocation = ""; 
        string SDCategory = ""; 
        string CourseDetails = ""; 
        //DateTime TodayDate = DateTime.Today; 

        //DateTime dt1 = Convert.ToDateTime(sEDate); 




        if (lstDocs != null) 
        { 
         SortedList<string, string> lstDetails = new SortedList<string, string>(); 

         foreach (SPListItem item in lstDocs.Items) 
         { 
          try 
          { 
           sTitle = item["Title"].ToString(); 
           sSDate = item["StartTime"].ToString(); 
           sEDate = item["EndTime"].ToString(); 
           sLocation = item["Location"].ToString(); 
           SDCategory = item["Development Category"].ToString(); 



          } 
          catch { } 


          if (sTitle == nValue) //&& (dt >= TodayDate)) 

          { 
           try 
           { 
            CourseDetails = sSDate + " - " + sEDate + " | " + sLocation + " | " + SDCategory; 
            lstDetails.Add(CourseDetails,CourseDetails); 


           } 
           catch { } 
          } 
         } 

回答

0

我相信這個問題是最好的解決在執行你的foreach循環之前。您需要創建一個查詢,使用Where子句僅選擇符合條件的項目。他們可以循環遍歷循環,而不必在每次通過時測試日期,這會變慢。

假設Startdate存儲爲一個日期變量,這應該是一個平凡的查詢來寫。

道歉,如果我誤解了你的問題。

+0

的startDate實際上是一個字符串。感謝您的幫助的輸入...但可惜我仍然有同樣的問題 – Martin 2011-02-09 14:03:28

+0

啊,不應該是一個問題。你有沒有試過Date.Parse(sSDate)?您可以使用上面的Vixen格式,或者在foreach循環之前執行查詢,以便您可以查看觀察器中的結果集。 – nycdan 2011-02-09 14:15:41

0
foreach (SPListItem item in lstDocs.Items.Where(item => item.StartTime.Date >= DateTime.Now.Date)) 

這是假設有一個在SPListItem類名爲StartTime屬性和您正在使用.NET 3+和訪問的LINQ。