在今天的日期之后显示课程详细信息

时间:2011-02-09 13:34:35

标签: c# date drop-down-menu infopath

我在infopath 2010表格中使用VSTA C#,通过使用级联下拉菜单(课程名称和课程详情)显示信息。

因此,当用户选择“课程标题”下拉列表时,课程详细信息将填充Sharepoint 2010列表中的StartTime,EndTime,Location和Development Category信息。

现在我遇到的问题是我希望用户只查看今天及以后的课程详情,而不是查看过去的课程详情。这是我显示课程详细信息的代码。我已经尝试声明一个dateTime变量并使用它来比较一个转换为DateTime with Today的字符串,使其晚于DateTime变量,但是在我选择一个课程标题后它给了我一个错误,它说“对象参考”没有设置为对象的实例“。使用故障排除提示:“使用new关键字创建对象实例。在调用方法之前检查以确定对象是否为null。获取此异常的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 { }
                            }
                        }

2 个答案:

答案 0 :(得分:0)

我相信在执行foreach循环之前问题最好解决。您需要创建一个查询,使用Where子句仅选择符合条件的Items。他们可以遍历你的循环,而不必测试每次传递的日期,这将会变慢。

假设Startdate存储为日期变量,这应该是一个简单的查询。

如果我误解了你的问题,请道歉。

答案 1 :(得分:0)

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

这假设在SPListItem类中有一个名为StartTime的属性,并且您正在使用.NET 3+并且可以访问Linq。