我在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 { }
}
}
答案 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。