【问题标题】:Displaying course details later than today's date显示晚于今天的课程详细信息
【发布时间】:2011-06-24 03:39:19
【问题描述】:

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

因此,当用户选择“课程标题”下拉菜单时,课程详细信息将使用 Sharepoint 2010 列表中的开始时间、结束时间、位置和开发类别信息进行填充。

现在我遇到的问题是我希望用户只查看今天及以后的课程详细信息,而不是查看过去的课程详细信息。这是我显示课程详细信息的代码。我尝试声明一个 dateTime 变量,并使用它与转换为 DateTime 和 Today 的字符串进行比较,使其晚于 DateTime 变量,但是在我选择课程标题后它给了我一个错误,它显示“对象参考未设置为对象的实例”。带有故障排除提示:“使用new关键字创建对象实例。在调用方法之前检查对象是否为null。获取此异常的一般帮助”

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

【问题讨论】:

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


    【解决方案1】:

    我相信最好在执行 foreach 循环之前解决问题。您需要创建一个查询,该查询将使用 Where 子句仅选择满足您的条件的项目。他们可以迭代你的循环,而不必在每次通过时测试日期,这会更慢。

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

    如果我误解了您的问题,我们深表歉意。

    【讨论】:

    • startDate 实际上是一个字符串。感谢您提供有用的意见...但是我仍然遇到同样的问题
    • 啊,应该没问题。你试过 Date.Parse(sSDate) 吗?你可以使用上面的 Vixen 格式,或者在 foreach 循环之前进行查询,这样你就可以在你的 watcher 中查看结果集。
    • 马丁,Date.Parse(sSdate) 有帮助吗?
    【解决方案2】:
     foreach (SPListItem item in lstDocs.Items.Where(item => item.StartTime.Date >= DateTime.Now.Date))
    

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

    【讨论】:

    • @Vixen , where 子句不适用于 foreach 子句。抱歉,因为我是 C# 的新手。感谢您的意见...
    • 你说它不起作用是什么意思?您是否遇到编译时问题或运行时问题?
    • 在items后面输入时无法识别的地方。
    • 将“使用 System.Linq”添加到您的使用中
    • 我的参考文献中没有 System.Linq,感谢您的耐心等待。
    猜你喜欢
    • 1970-01-01
    • 2016-07-05
    • 2015-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多