Mohemmad K
Mohemmad K

Reputation: 839

Index was out of range. Must be non-negative and less than the size of the collection in List<string>

I am using List object to store the user property.

My code is:

 string department=string.Empty;
 List<string> otherDepartments = new List<string>();
 int no;
 string result = string.Empty;

 string queryText = string.Empty;
 using (SPSite siteCollection = SPContext.Current.Site)
 {
     using(SPWeb site = siteCollection.OpenWeb())
     {
         SPSecurity.RunWithElevatedPrivileges(delegate()
         {
              SPUser spUser = site.CurrentUser;                        
              SPServiceContext context = SPServiceContext.GetContext(siteCollection);
              UserProfileManager upm = new UserProfileManager(context);
              UserProfile profile = upm.GetUserProfile(spUser.LoginName);
              department = profile["oiplbDepartment"].Value.ToString();

              UserProfileValueCollection otherDept = profile["oiplbOtherDepartments"];

              if (otherDept.Count != 0)
              {                           
                  foreach (var prop in otherDept)
                  {
                      otherDepartments.Add(prop.ToString());
                  }
               }
               Label1.Text = department + " Ohter Departments " + otherDepartments;
          });

          SPList list = site.Lists["Events"];
          SPListItemCollection itemColl;
          SPQuery query = new SPQuery();
          no = 1 + otherDepartments.Count;
          for (int i = 1; i <= no; i++)
          {
              if (no == 1)
              {
                  result = "<or> <Eq><FieldRef Name='oiplbDepartment' /><Value Type='TaxonomyFieldType'>"+department+"</Value></Eq>"+"</or>";
                  break;
              }
              else if (i == 2)
              {
                   result = "<or> <Eq><FieldRef Name='oiplbDepartment' /><Value Type='TaxonomyFieldType'>" + department + "</Value></Eq>" + 
                   "<Eq><FieldRef Name='oiplbDepartment' /><Value Type='TaxonomyFieldType'>" + otherDepartments[i-1] + "</Value></Eq>";
              }
              else if(i >= 3)
              {
                  result = generateOr(result,otherDepartments[i-1]);
              }
         }                                  
         queryText = "<where>"+result +"</Where>";
         query.Query = queryText;
         itemColl = list.GetItems(query);
         Grid.DataSource = itemColl.GetDataTable();
         Grid.DataBind();
    }
}

public static string generateOr(string temp, string value)
{
    string r = "<or>" + temp + " <Eq><FieldRef Name='oiplbDepartment' /><Value Type='TaxonomyFieldType'>" + value + "</Value></Eq> </or>";
    return r;
}

I am getting the above mentioned error when I run the program.

I am inserting a value if and only if the properties are available otherwise not.

But why am I getting the error?

Upvotes: 0

Views: 616

Answers (1)

Tim Schmelter
Tim Schmelter

Reputation: 460098

Its because of

no = 1 + otherDepartments.Count;

change it to

no = otherDepartments.Count;

Even if you subtract 1 from i before you access the item in the list your for-loop loops until i == no. So you could also change i <= no to i < no

for (int i = 1; i < no; i++)

Upvotes: 4

Related Questions