2011-01-11 3 views
0

Я хочу показать все поля определенного ListItem. Это включает в себя LookUpFields и ChoiceFields. Но мне кажется, что я могу показать Textfields, например Title. Как я могу показать все поля моего ListItem? Проблема в том, что я получаю сообщение об ошибке, когда пытаюсь показать другие поля списка, как я получил «Title», чтобы показать, как если бы строки, которые я вводил, не существовали как поля в этом списке. Но они существуют и населены ценностями! Что такое хороший способ показать пользовательские поля списка без получения ошибок ObjectReference? Также я получаю эту ошибку: данный ключ отсутствовал в словаре.Я не могу получить поля SharePoint ListItem

private void foo() 
    { 
     using (ClientContext context = new ClientContext(ApplicationContext.Current.Url)) 
     { 
      _list = context.Web.Lists.GetByTitle("MyList").Title); 
      _items = _list.GetItems(CamlQuery.CreateAllItemsQuery()); 
      context.Load(_items); 
      context.ExecuteQueryAsync(
       new ClientRequestSucceededEventHandler(OnListItemsRequestSucceeded), 
       new ClientRequestFailedEventHandler(OnListItemsRequestFailed)); 
     } 
    } 
private void OnListItemsRequestSucceeded(Object sender, ClientRequestSucceededEventArgs args) 
    { 
     // this is not called on the UI thread 
     Dispatcher.BeginInvoke(ShowListItemDetails); 
    } 
public void ShowListItemDetails() 
    { 
foreach (ListItem i in _items) 
     { 
TextBox_Details.Text += i["Title"].ToString() + Environment.NewLine; 
// Now the rest of the fields of this item. 
     } 
} 

Редактировать: Что также является большой проблемой, я не могу заставить отладчик работать. Этот код работает как веб-часть Silverlight на локальном сайте Sharepoint. Я прикрепляю отладчик к iexplorer.exe, но он не сломается. Если бы я мог заставить отладчик работать, это действительно помогло бы.

+0

И проблема на самом деле * что *? Что не так, когда вы сбрасываете больше полей? Какие проблемы вы испытываете при работе с нетекстовыми полями? –

+0

Возможно, что Ондрей, возможно, означает, что вы должны дать нам ошибку, которую вы получаете при работе с нетекстовыми полями. Также: установите точку останова в вашем листе ListItem foreach, и вы можете получить доступ ко всем полям (просто чтобы увидеть, что они есть). –

ответ

1

вы должны сказать запрос, что все поля, которые нужно тянуть из списков

CamlQuery camlQuery = new CamlQuery(); 
      camlQuery.ListItemCollectionPosition = itemPosition; 
      camlQuery.ViewXml = 
       @"<View> 
        <ViewFields> 
         <FieldRef Name='Title'/> 
         <FieldRef Name='Category'/> 
         <FieldRef Name='Estimate'/> 
        </ViewFields> 
        <RowLimit>10</RowLimit> 
        </View>"; 
      ListItemCollection listItems = list.GetItems(camlQuery); 
      clientContext.Load(listItems); 
      clientContext.ExecuteQuery(); 

для более подробной информации

http://msdn.microsoft.com/en-us/library/ee857094.aspx#SP2010ClientOM_Accessing_Large_Lists

+0

Я видел этот пример, но еще не пробовал. Обязательно ли предоставлять CamlQuery для этих настраиваемых полей? У меня было впечатление, что CamlQuery.CreateAllItemsQuery() предоставит мне все поля ListItem. –

+0

не совсем то, что у них есть другие способы, но мой мотив состоял в том, чтобы назвать все столбцы, которые вам нужны. –

+0

Я пробовал ваш подход. Я get'null ", когда я пытаюсь использовать имя поля, указанное в запросе. TextBox_Details.Text + = i.FieldValues ​​["Production"]; ... Результат является нулевым исключением –

0

Чтобы получить свойства элемента вам необходимо будет указать все свойства элемента вам нужен второй параметр метода ClientContext.Load

например

 string server = "http://localhost"; 
     ClientContext context = new ClientContext(server); 
     Web web = context.Web; 
     var spList = web.Lists.GetByTitle("MyTitle"); 
     CamlQuery query = new CamlQuery(); 
     var items = spList.GetItems(query); 
     context.Load(items, 
      itema => itema.Include(
       item => item, 
       item => item["ComplexProperty"])); 
     context.ExecuteQuery();` 
Смежные вопросы