Отображение деталей курса позже, чем сегодняшняя дата - PullRequest
1 голос
/ 09 февраля 2011

Я использую VSTA C # в форме infopath 2010, в которой с помощью каскадных раскрывающихся списков (Название курса и Детали курса) отображается информация.

Таким образом, когда пользователь выбирает раскрывающийся список «Название курса», сведения о курсе заполняются сведениями о категориях StartTime, EndTime, Location и Development из списка Sharepoint 2010.

Теперь у меня проблема в том, что я хочу, чтобы пользователь только просматривал детали курса на сегодня и далее, а не просматривал детали курса в прошлом. Это код, с помощью которого я отображаю детали курса. Я попытался объявить переменную dateTime и использовать ее для сравнения со строкой, которая преобразуется в DateTime с Today, чтобы сделать ее более поздней, чем переменная DateTime, но после выбора названия курса выдает ошибку: не установлен для экземпляра объекта ". С советами по устранению неполадок: «Используйте новое ключевое слово для создания экземпляра объекта. Проверьте, чтобы определить, является ли объект нулевым, перед вызовом метода. Получите общую справку для этого исключения» *

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 { }
                            }
                        }

Ответы [ 2 ]

0 голосов
/ 09 февраля 2011
 foreach (SPListItem item in lstDocs.Items.Where(item => item.StartTime.Date >= DateTime.Now.Date))

Предполагается, что в классе SPListItem есть свойство StartTime, и вы используете .NET 3+ и имеете доступ к Linq.

0 голосов
/ 09 февраля 2011

Я считаю, что проблему лучше всего решить, прежде чем выполнять цикл foreach.Вам необходимо создать запрос, который выберет только те элементы, которые соответствуют вашим критериям, с помощью предложения Where.Их вы можете перебирать в цикле, не проверяя дату на каждом проходе, что будет медленнее.

Если предположить, что Startdate хранится как переменная даты, это должен быть тривиальный запрос для записи.

Извините, если я неправильно понял вашу проблему.

...